.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
.局部变量 快照句柄, 整数型
.局部变量 进程信息, LPPROCESSENTRY32
.局部变量 下一个, 逻辑型
.局部变量 微信PID, 整数型
.局部变量 微信句柄, 整数型
.局部变量 DLL文件, 文本型
.局部变量 DLL文件字符串长度, 整数型
.局部变量 申请内存地址, 整数型
.局部变量 LoadLibraryA地址, 整数型
.局部变量 线程句柄, 整数型
.局部变量 写内存成功, 逻辑型
' 1) 遍历系统中的进程,找到微信进程(CreateToolhelp32Snapshot、Process32Next)
快照句柄 = CreateToolhelp32Snapshot (#TH32CS_SNAPPROCESS, 0)
进程信息.dwSize = 300
下一个 = Process32Next (快照句柄, 进程信息)
.循环判断首 ()
.如果真 (到文本 (进程信息.szExeFile) = “WeChat.exe”)
微信PID = 进程信息.th32ProcessID
跳出循环 ()
.如果真结束
下一个 = Process32Next (快照句柄, 进程信息)
.循环判断尾 (下一个 = 真)
.如果真 (微信PID = 0)
信息框 (“微信进程未找到”, 0, “错误”, )
返回 ()
.如果真结束
' 2) 打开微信进程,获得HANDLE(OpenProcess)。
微信句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 假, 微信PID)
.如果真 (微信句柄 = 0)
信息框 (“打开微信进程失败!”, 0, “错误”, )
返回 ()
.如果真结束
' 3) 在微信进程中为DLL文件路径字符串申请内存空间(VirtualAllocEx)。
DLL文件 = “C:\Users\Visual Studio 2019\Desktop\WeChatHook.dll”
DLL文件字符串长度 = 取文本长度 (DLL文件) + 1
申请内存地址 = VirtualAllocEx (微信句柄, 0, DLL文件字符串长度, #MEM_COMMIT, #PAGE_READWRITE)
.如果真 (申请内存地址 = 0)
信息框 (“内存申请失败!”, 0, “错误”, )
返回 ()
.如果真结束
' 4) 把DLL文件路径字符串写入到申请的内存中(WriteProcessMemory)
写内存成功 = WriteProcessMemory (微信句柄, 申请内存地址, 到字节集 (DLL文件), DLL文件字符串长度, 0)
.如果真 (写内存成功 = 假)
信息框 (“写入内存失败!”, 0, “错误”, )
返回 ()
.如果真结束
' 5) 从Kernel32.dll中获取LoadLibraryA的函数地址(GetModuleHandle、GetProcAddress)
LoadLibraryA地址 = GetProcAddress (GetModuleHandleA (“Kernel32.dll”), “LoadLibraryA”)
.如果真 (LoadLibraryA地址 = 0)
信息框 (“未找到LoadLibraryA!”, 0, “错误”, )
返回 ()
.如果真结束
' 6) 在微信中启动内存中指定了文件名路径的DLL(CreateRemoteThread)。
' 也就是调用DLL中的DllMain(以DLL_PROCESS_ATTACH为参数)。
线程句柄 = CreateRemoteThread (微信句柄, 0, 0, LoadLibraryA地址, 申请内存地址, 0, 0)
.如果真 (线程句柄 = 0)
信息框 (“执行线程失败!”, 0, “错误”, )
返回 ()
.如果真结束
信息框 (“注入成功!”, 0, , )
还是上截图吧!
示例来源:
网易云课堂《2019 PC 微信探秘》