![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c/c++
文章平均质量分 52
一些代码片段及学习记录。
pureman_mega
这个作者很懒,什么都没留下…
展开
-
c++ stl 之vector使用
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。当然,向量中除了可以存放int类型的数据,其他的像char,DWORD,std::string或者自定义的结构体都是可以的。向量容器(一个 C++ 标准的模板),它与数组十分相似,唯一不同的是,向量在需要扩展大小的时候,会自动处理它自己的存储需求."原创 2023-07-04 11:35:41 · 179 阅读 · 0 评论 -
Windows下x86和x64平台的Inline Hook介绍
如果你通过windows.h头文件导入WriteConsoleA这个函数,会发现它调用了kernel32.dll的WriteConsoleA而不是kernelbase.dll的,这个你可以去反汇编看看,但是在kernel32.dll内部,你会发现函数头部就是一句jmp指令,而真正执行的是kernelbase.dll里的函数,所以一般选择要Hook的函数的时候,如果这个函数头部是一句跳转指令,则去修改跳转过去的地址。而__i386__是gcc定义的x86下的宏,_M_IX86是微软定义的。转载 2023-02-26 21:40:20 · 355 阅读 · 0 评论 -
[推荐]aes,base64使用
上面的aes和base64都是c语言实现的,没有本地库依赖,可以根据需要添加使用。后面的一个网站是在线的aes工具,支持多种模式与填充方式,输出支持base64和hex格式,可以用来作为辅助验证程序的正确性。(具体实现细节待研究)原创 2023-02-12 11:50:10 · 173 阅读 · 0 评论 -
cjson,libcurl 使用demo
这些开源的库使用起来能够节省不少精力和时间。如果是自己去实现相关的功能,一方面是时间来不及,一方面是效果和性能不一定有保证。这些库都是经过长时间维护和优化的,在开发中应用确实比较方便(其实是自己做不到同等效果,哈哈)。(相关的源码文件都可以在github上下载)原创 2023-01-16 11:18:38 · 234 阅读 · 0 评论 -
(转载)windows消息管理机制
一、基本概念1.SDK和API的区别SDK:软件开发工具包(外语首字母缩写:SDK、外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。API:应用程序接口。windows API是通过C语言来实现的,头文件为windows.h;MFC和QT是C++实现的,是C++的GUI开发框架。3. 句柄4.消息。转载 2023-01-07 14:09:43 · 273 阅读 · 0 评论 -
windows 各种inject/hook学习材料(自用)/监控远程线程创建
windows hook 学习原创 2022-12-01 11:35:25 · 528 阅读 · 0 评论 -
获取系统完整版本号/本机ip/系统开机时间/当前时间/本机mac/网关mac
【代码】获取系统完整版本号/本机ip/系统开机时间/当前时间/本机mac/网关mac。转载 2022-11-21 09:47:54 · 189 阅读 · 0 评论 -
关闭 Windows Defender
通过api关闭windows defender 服务转载 2022-01-29 15:40:54 · 359 阅读 · 0 评论 -
通过遍历系统句柄信息(SystemHandleInformation),获取系统进程和当前进程的eprocess
实验环境:win10 1909 64参考:https://blog.csdn.net/qinlicang/article/details/4489727首先,获取系统的句柄信息;然后,在句柄信息表中进行搜索,通过数据结构进行匹配;最后,确定系统进程和当前进程的eprocess;主要数据结构如下:typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO { USHORT UniqueProcessId; USHORT CreatorBack原创 2021-11-23 17:39:41 · 10600 阅读 · 0 评论 -
PE 文件加载器实现
/** * peLoader.cpp * Windows APT Warfare * by aaaddress1@chroot.org */#include <stdio.h>#include <windows.h>#pragma warning(disable : 4996)#define getNtHdr(buf) ((IMAGE_NT_HEADERS *)((size_t)buf + ((IMAGE_DOS_HEADER *)buf)->e_lfanew.转载 2021-08-12 17:07:31 · 756 阅读 · 0 评论 -
通过 irp 请求包删除文件
测试环境:win7 32测试功能:通过构造irp 请求包,直接发给DeviceObject 调用对应DriverObject中的MajorFunction 来删除文件参考:强制删除文件(1)——直接发IRP到文件系统_zz_strive_2012的专栏-CSDN博客来源:从文件 MD5:dace344b6a923a756143a76c9cd12ebc 中扣出来的。NTSTATUS DeleteCompletionRoutine(PDEVICE_OBJECT DeviceObject, P.原创 2021-03-30 17:02:32 · 354 阅读 · 0 评论 -
驱动签名学习
简述如何通过CryptAPI实现签名的生成,并打到pe文件里,时间戳部分还没实现。获取PE文件签名信息的工程:https://github.com/leeqwind/PESignAnalyzer下面是一个有效的签名信息】参考图片中的签名,签名信息包含有时间戳,版本,摘要算法,后面跟着3小块证书信息。可以看出证书的来源issuer是颁发者,subject是颁发给。Miros...原创 2019-11-22 17:29:58 · 1106 阅读 · 1 评论 -
windows中服务(service)学习
感谢 songtzu.服务程序的编写可以参考:https://www.cnblogs.com/songtzu/p/3543920.html服务的启动从服务程序到服务正真运行起来,可以分为两步。一,创建服务;二,启动服务。创建服务,通过CreateService(***)可以在服务数据库中建立一个新的服务项,还会在注册表生成相应的数据。如果创建成功,可以通过任务管理器查看新建服务。...原创 2019-09-18 15:13:41 · 1594 阅读 · 0 评论 -
通过对象名(ObjectName)匹配,确定所属的进程
大概流程:首先通过ZwQuerySystemInformation(SystemHandleInformation,*,*)获取句柄信息,然后根据句柄调用ZwQueryObject(*,ObjectNameInformation,*)获取对象名信息,最后匹配确定目标。示例是确定“\\Windows\\ApiPort"所属的进程。需要注意的是用有的句柄调用ZwQueryObject会返回ST...原创 2019-08-30 17:49:00 · 895 阅读 · 0 评论 -
EquationLaser_reversed_partial
EquationLaser是方程式样本中的较早,从它的编程应用技巧的"古老"程度可以看出来,当然对于我这种编程经验比较欠缺的爱好者还是值得学习研究一下的.它会收集一些系统信息,键盘记录等。本来在资源里有个驱动文件,但是样本里的驱动已经释放出去,数据全为零,所以主要的功能应该还没分析到。(仅供参考)#include"stdafx.h"#include<stdio.h>#in...原创 2019-03-06 21:07:06 · 201 阅读 · 0 评论 -
通过WinDbg收集关于ExCreateCallback的信息
lkd> dt nt!_object_attributes +0x000 Length : Uint4B +0x004 RootDirectory : Ptr32 Void +0x008 ObjectName : Ptr32 _UNICODE_STRING +0x00c Attributes : Uint4B +0x01原创 2018-01-01 21:47:54 · 409 阅读 · 0 评论 -
通过ActiveProcessLinks遍历进程
进程的遍历有多种方法。在应用程序里可以使用CreateToolHelp32SnapShot函数先做个进程快照(snapshot),然后通过返回的数据进行遍历。在内核编程里可以通过内核数据结构来实现。 内核结构EPROCESS(执行体进程块 executive process)是一个不透明(opaque)的结构体,大概意思就是这个结构不对外公开,但是还是可以通过WinDbg获取它的各成员名和类型原创 2017-12-26 22:03:04 · 771 阅读 · 2 评论 -
自己尝试还原的ObReferenceObjectByHandle
ObReferencObjectByHandle()这个函数从字面上看就可以知道是通过句柄(Handle)来访问对象。还原的过程中对汇编语言强大又有了进一步的认识,其效率之高令人惊叹,每个寄存器的使用都是那么的精妙绝伦,相同或类似的功能的代码很少重复出现。效率高的代价就是可读性较差,和C代码相比就会表现出巨大的差异;但是对于那些比较熟悉这两种语言的高手来说,随意在两者之间切换应该不是什么问题,而我看原创 2018-01-05 21:57:55 · 1172 阅读 · 0 评论 -
ObReferenceObjectByPointer
ObReferenceObjectByPointerWithTag()例程介绍参考ddk文档。这个函数和ObReferenceObjectByHandleWithTag()最后要完成的任务是一样的—“ReferenceObejct”,只不过方法不一样。通过指针引用对象相对通过句柄来说,逻辑要简单得多,可以将二者结合起来看,上一个写的不清楚的地方在这里可能有答案。 lkd> dt nt!_object原创 2018-01-06 22:04:59 · 646 阅读 · 0 评论 -
关于调用栈一个函数ObpPushStackInfo
kd> !obtrace 0xfa96f700(对象地址)Object: fa96f700 Image: cmd.exeSequence (+/-) Stack-------- ----- --------------------------------------------------- 2421d +1 nt!ObCreateObject+180原创 2018-01-08 16:42:01 · 342 阅读 · 0 评论 -
获取调用栈信息的函数RtlCaptureStackBackTrace()
这是一个导出函数,使用时必须试探页面产生异常的能力(probe the ability to take page fault)—(翻译 ddk文档)。USHORT //返回捕捉到的结构数 RtlCaptureStackBackTrace( __in ULONG FramesToSkip, __in ULONG FramesToCapture, __out_ecount原创 2018-01-08 20:32:45 · 4816 阅读 · 2 评论 -
为什么用指针?(20230228更新函数指针使用)
相信接触过编程的,大部分应该对C语言有一定了解或者学过一门C语言课程。或多或少听到这种说法:C语言很难学,特别是指针。我大一下学期开的这门课,学完之后感觉还好(其实是我没有深入学,典型的自我感觉良好: )),但指针那块确实也没太弄明白。现在好像明白了一点什么是指针,在什么情况下用比较好。 int a=1;//int* pointer_a=1 在编译会报错// 'initializing':can原创 2018-03-14 17:51:42 · 5234 阅读 · 2 评论 -
病毒常用方法之下蛋
恶意文件有时会通过资源(resource)来携带一些其他的子文件。一般的资源有图标,对话框等(可以去查看关于FindResoure的文档)。好像可以自己定义资源的种类!下面是如何从母文件中提取子文件的方法: long SizeOfImage=0; DWORD NumOfWrittenBytes; HANDLE hFile; HGLOBAL hResData; H原创 2018-03-10 20:08:15 · 174 阅读 · 0 评论 -
IoCallDriver()简析
NTSTATUS IofCallDriver(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp){ if(*pIofCallDriver)//je 0x1d { return pIofCallDriver(DeviceObject,Irp); } Irp->Cu原创 2018-03-27 11:05:20 · 1610 阅读 · 0 评论 -
选择排序(c语言描述)
选择排序的主要思想就是每次找出未排序序列中最小的值,然后将该值放到合适的位置。#include <stdio.h>#define SWAP(a,b,c) ((c)=(a),(a)=(b),(b)=(c))void SelectionSort(int [],int); /*selection sort */void main(void){ int i,n=5; int l原创 2018-04-17 09:24:22 · 3744 阅读 · 0 评论 -
socket分包小实验
当采用最基本socket来传输数据时,如果接受方的缓存去足够大,一次就能保存全部数据;但是当传输的数据比较大(像视频,大文件等),这个时候数据明显需要多次传输。下面是演示将数据分开多次发送的一个例子,分包的关键就是自己设定一套规则,将要发送的数据按照规则组织在一起。有一个要注意的地方:如果发送的数据小于接受方的缓冲区大小,分包就没有意义了;所以接受方缓冲区的大小应该和发送包的最大size相等。 ...原创 2018-08-05 14:46:19 · 635 阅读 · 0 评论 -
Event(事件)的简单使用
Event 事件通常会用来控制同步操作,通俗地说就是一个流程中下一步操作会等待上一步操作结束才开始。下面是个简单的例子:////创建事件对象#define event_name "shared_event"int main(){ int time=100; HANDLE event=NULL; event=CreateEvent(NULL,TRUE,FALSE,ev...原创 2018-11-24 11:37:30 · 855 阅读 · 0 评论 -
Backdoor Longhorn部分重写
在网上找了个样本,看了一下好像是个服务程序,而且感觉原作者思路非常清晰,自己也试着逆向写了一点,没有写完,没有调试./*#define SERVICE_STOPPED 0x00000001#define SERVICE_START_PENDING 0x00000002#define SERVICE_STOP...原创 2019-01-16 19:53:06 · 263 阅读 · 0 评论 -
几个字符串函数的实现
size_t strlen(const char *) ,返回字符串长度strlen : mov edi,edi push ebp mov ebp,esp xor al,al;al=0 mov edi,dword ptr [ebp+8h] ;目标字符串指针 mov ebx,edi原创 2017-12-21 11:46:03 · 165 阅读 · 0 评论