大千中华科技网

的聊天记录干货|Windows下进程操作的一些C+代码美寻求

大千中华科技网 3

0x01 进程遍历

因为进程是在随时进行变动的所以我们需要获取一张快照

1.1 CreateToolhelp32Snapshot

因为要获取进程第一个参数选择TH32CS_SNAPPROCESS来获取系统中所有的进程,因此他们产生了数TB的数据。SEC声称,具体可以参考[CreateToolhelp32Snapshot]:https://docs.microsoft.com/zh-cn/windows/win32/api/tlhelp32/nf-tlhelp32-createtoolhelp32snapshot?f1url=%3FappId%3DDev16IDEF1%26l%3DZH-CN%26k%3Dk(TLHELP32%252FCreateToolhelp32Snapshot);k(CreateToolhelp32Snapshot);k(DevLang-C%252B%252B);k(TargetOS-Windows)%26rd%3Dtrue

1.2 Process32First

第一个参数使用上面CreateToolhelp32Snapshot函数返回的句柄。第二个参数执行了PROCESSENTRY32结构的指针,被告在发现阶段开始时曾同意搜索所有消息。但最终仅产生了1468条消息,它包含了进程信息。检索进程里的第一个进程信息。

1.2.1 PROCESSENTRY32

使用时候要把结构体清零。szExeFile为进程名称,但仍包含一些“至关重要”的信息。在将其最初不愿合作归咎于数据处理错误之后,其他都根据名称一样。

1.3 Process32Next

检索快照中的下一个进程信息。

0x02 模块遍历

同理只需要将CreateToolhelp32Snapshot的dwFlags修改为TH32CS_SNAPMODULE,Ripple现在拒绝提供对其余聊天的访问权限。,th32ProcessID参数为进程的pid,这里要先获取进程pid。

2.1 获取进程pid

通过PROCESSENTRY32结构体的th32ProcessID来获取进程pid。遍历进程通过strcmp匹配到我们的进程名就返回the32ProcessID。

2.2 模块遍历

获取到了进程pid,放入CreateToolhelp32Snapshot第二个参数,但是因为考虑到进程可能根本不存在所以写一个CheckPorcess方法来判断是否存在该进程。

然后遍历模块

0x03 遍历线程

使用TH32CS_SNAPTHREAD参数来获取,这里都同小异了。

通过te32.th32OwnerProcessID与GetProcessPid方法获取到的pid来对比进而确定当前进程。

0x04 干进程

4.1 TerminateProcess

第一个参数为要结束进程的进程句柄,第二个参数为终止代码。

4.2 OpenProcess

第一个参数为进程访问权限这里设置为拥有全权限PROCESS_ALL_ACCESS,具体查看[进程访问权限]:https://docs.microsoft.com/en-us/windows/win32/procthread/process-security-and-access-rights 第二个参数为是否要继承句柄。第三个参数为进程pid。

0x05 dll注入

dll加载:1.静态调用:通过在我们的程序中添加头文件,以及lib文件来完成调用,前提就是获取dll然后还有头文件 2.动态调用:仅仅只需要一个dll即可完成调用

这里写一个Test方法

可以看到有一些脏数据。这里可以协商约定来解决 1.__stdcall 标准 栈传参,函数内(被调用者)平栈 2. __cdecl c 栈传参,函数外(调用者)平栈 3. __fastcall 快速 寄存器传参 4. __thiscall 类的thiscall调用约定,使用ecx寄存器来传递this指针

__stdcall是函数内平参可以举个例子

两个返回8一个返回4

5.1 动态调用

这里使用动态调用

流程概就是 1.在目标进程中申请内存 2.向目标进程内存中写入shellcode(没有特征,编码比较麻烦) 3.创建远线程执行shellcode

首先打开进程获取到进程句柄

然后再要注入的进程中申请内存

VirtualAllocEx

详情查看[VirtualAllocEx]:https://docs.microsoft.com/zh-cn/windows/win32/api/memoryapi/nf-memoryapi-virtualallocex?f1url=%3FappId%3DDev16IDEF1%26l%3DZH-CN%26k%3Dk(MEMORYAPI%252FVirtualAllocEx);k(VirtualAllocEx);k(DevLang-C%252B%252B);k(TargetOS-Windows)%26rd%3Dtrue 这里要用到可读可写权限PAGE_READWRITE。

然后再要注入的进程里面写入数据

WriteProcessMemory

然后获取loadlibrary的地址后就通过CreateRemoteThread加载dll地址和函数地址来调用

最后再使用CreateRemoteThread创建远线程,注入DLL

InjectDll函数

这里我们写一个程序加一个dll来验证

DemoDll.dll

Demo.exe

运行Demo.exe,然后先遍历模块

dll注入

0x06 PPID欺骗

PPID欺骗允许使用任意进程启动程序

同理先判断父进程是否存在

首先我们要获取父进程的进程句柄然后为进程和线程创建初始化指定的属性列表使用InitializeProcThreadAttributeList。

最后一个参数指定输入时lpAttributeList缓冲区的小。si.lpAttributeList在堆中分配一块内存,分配的小为前面的SizeBuff。然后再使用InitializeProcThreadAttributeList初始化进程和线程的属性列表最后使用UpdateProcThreadAttribute函数来更新进程和线程的指定属性,最后创建我们的进程。

小米手机图片怎么发邮箱

三星手机使用时卡怎么办

佳能相机怎么设置镜头焦距

网课电脑怎么打不开摄像头

为什么快递回顺丰店

中通快递为什么不送

申通快递超区间是什么意思

陈一发为什么不直播了

东莞搜狗seo推广费用

标签: