.版本 2
.子程序 功能_发文本消息, , , 3.6.0.18 版VX
.参数 对方VXID, 文本型
.参数 消息的内容, 文本型
.局部变量 进程句柄, 整数型
.局部变量 群ID结构体, 整数型
.局部变量 组装代码, 字节集
.局部变量 变量, 整数型
.局部变量 线程句柄, 整数型
.局部变量 参数地址, 整数型
.局部变量 Call_Addr, 整数型
.局部变量 艾特对象起始结构, 整数型
.局部变量 艾特对象起始VXID内容, 整数型
.局部变量 艾特对象结束结构, 整数型
.局部变量 艾特结构体, 整数型
.局部变量 消息内容指针, 整数型
.局部变量 消息内容结构体, 整数型
.局部变量 群ID内容, 整数型
.局部变量 执行代码区, 整数型
.局部变量 ECX_Addr, 整数型
.局部变量 缓冲区结构体, 整数型
.局部变量 消息, 字节集
.局部变量 群ID, 文本型
群ID = 对方VXID
Call_Addr = WeChatWin_DLL + 十六到十 (“4BE7B0”)
ECX_Addr = 取模块句柄 (进程PID, “msftedit.dll”) + 十六到十 (“23363”)
' 调试输出 (十到十六 (Call_Addr))
' 返回 ()
进程句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 进程PID) ' 再取得进程句柄
群ID结构体 = VirtualAllocEx (进程句柄, 0, 2048, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
消息内容指针 = VirtualAllocEx (进程句柄, 0, 9000, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
消息内容结构体 = VirtualAllocEx (进程句柄, 0, 1024, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
群ID内容 = VirtualAllocEx (进程句柄, 0, 1024, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
艾特对象起始结构 = VirtualAllocEx (进程句柄, 0, 1024, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
艾特对象起始VXID内容 = VirtualAllocEx (进程句柄, 0, 1024, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
艾特结构体 = VirtualAllocEx (进程句柄, 0, 1024, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
缓冲区结构体 = VirtualAllocEx (进程句柄, 0, 2048, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
执行代码区 = VirtualAllocEx (进程句柄, 0, 1024, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
消息 = 大恩_VX_文本到消息 (消息的内容)
写内存字节集 (进程PID, 消息内容指针, 消息, 取字节集长度 (消息))
写内存整数型 (进程PID, 消息内容结构体, 消息内容指针)
写内存整数型 (进程PID, 消息内容结构体 + 4, 取字节集长度 (消息))
写内存整数型 (进程PID, 消息内容结构体 + 8, 取字节集长度 (消息))
写内存整数型 (进程PID, 消息内容结构体 + 12, 0)
写内存整数型 (进程PID, 消息内容结构体 + 16, 0)
写内存字节集 (进程PID, 艾特对象起始VXID内容, 编码_Ansi到Unicode (对方VXID), 取字节集长度 (编码_Ansi到Unicode (对方VXID)))
写内存整数型 (进程PID, 艾特对象起始结构, 艾特对象起始VXID内容)
写内存整数型 (进程PID, 艾特对象起始结构 + 4, 取文本长度 (对方VXID))
写内存整数型 (进程PID, 艾特对象起始结构 + 8, 取文本长度 (对方VXID))
写内存整数型 (进程PID, 艾特对象起始结构 + 12, 0)
写内存整数型 (进程PID, 艾特对象起始结构 + 16, 0)
写内存整数型 (进程PID, 艾特对象起始结构 + 20, 0)
写内存整数型 (进程PID, 艾特结构体, 艾特对象起始结构)
写内存整数型 (进程PID, 艾特结构体 + 4, 艾特对象起始结构 + 20)
写内存整数型 (进程PID, 艾特结构体 + 8, 艾特对象起始结构 + 20)
写内存整数型 (进程PID, 艾特结构体 + 12, 0)
写内存字节集 (进程PID, 群ID内容, 编码_Ansi到Unicode (群ID), 取字节集长度 (编码_Ansi到Unicode (群ID)))
写内存整数型 (进程PID, 群ID结构体, 群ID内容)
写内存整数型 (进程PID, 群ID结构体 + 4, 取文本长度 (群ID))
写内存整数型 (进程PID, 群ID结构体 + 8, 取文本长度 (群ID))
写内存整数型 (进程PID, 群ID结构体 + 12, 0)
写内存整数型 (进程PID, 群ID结构体 + 16, 0)
写内存整数型 (进程PID, 群ID结构体 + 2004, Call_Addr)
写内存整数型 (进程PID, 群ID结构体 + 2008, 1)
置汇编代码 ({ })
Pushad ()
Mov_ESI (群ID结构体 + 2008)
Mov_EAX (艾特结构体)
Push (1)
Push_EAX ()
Mov_EDI (消息内容结构体)
Push_EDI ()
Mov_EDX (群ID结构体)
Mov_ECX (缓冲区结构体)
Call_Ptr (群ID结构体 + 2004)
Add_ESP (十六到十 (“c”))
Popad ()
ret ()
组装代码 = 取汇编代码 ()
写内存字节集 (进程PID, 执行代码区, 组装代码, 取字节集长度 (组装代码)) ' 这里是将组装好的机器码写入申请的那块内存。
' 信息框 (“call线程地址” + #换行符 + 十到十六 (执行代码区, 真), 0, , )
线程句柄 = CreateRemoteThread (进程句柄, 0, 0, 执行代码区, 参数地址, 0, 0) ' 写进去之后执行。
WaitForSingleObject (线程句柄, 2000) ' 等待执行完毕。
' VirtualFreeEx (进程句柄, 内存地址, 0, #MEM_RELEASE) ' 释放我们申请的内存,不然游戏会越来越慢。
CloseHandle (线程句柄) ' 关闭
CloseHandle (进程句柄) ' 关闭
|