微信hook
Snow Player

2020-02-16 工程文件 增添发送消息功能,dll注入采用tcp方式通讯,还增加了自动回复机器人

base = 取模块基址 (“WeChatWin.dll”)
wxid = 申请新内存 (-1, 1024)
写内存字节集 (-1, wxid, id)
wxidp = 申请新内存 (-1, 1024)
写内存整数型 (-1, wxidp, wxid)
写内存整数型 (-1, wxidp + 4, 取文本长度 (编码_Unicode到Ansi (id)))
写内存整数型 (-1, wxidp + 8, 取文本长度 (编码_Unicode到Ansi (id)))
wxnr = 申请新内存 (-1, 1024)
写内存字节集 (-1, wxnr, text)
wxnrp = 申请新内存 (-1, 1024)
写内存整数型 (-1, wxnrp, wxnr)
写内存整数型 (-1, wxnrp + 4, 取文本长度 (编码_Unicode到Ansi (text)))
写内存整数型 (-1, wxnrp + 8, 取文本长度 (编码_Unicode到Ansi (text)))
buff = 申请新内存 (-1, 2172)
callapp = base + 十六进制 (“327B00”)
置入代码 ({ 96, 139, 85, 248, 106, 1, 106, 0, 139, 93, 240, 83, 139, 77, 236, 255, 85, 232, 131, 196, 12, 97 })
删除内存 (-1, wxid)
删除内存 (-1, wxidp)
删除内存 (-1, wxnr)
删除内存 (-1, wxnrp)
删除内存 (-1, buff)

成功

#hook代码
base = 取模块基址 (“WeChatWin.dll”)
myfuc = 取子程序真实地址 (&read)
hookadress = base + 3484099
jmpbackadress = base + 3484104
newadress = 申请新内存 (-1, 1024)
save = 申请新内存 (-1, 10)
修改内存属性 (-1, newadress, 64, 1024)
修改内存属性 (-1, save, 64, 10)
信息框 (save, 0, , )
old_data = 读内存字节集 (-1, hookadress)
写内存字节集 (-1, hookadress, jmp地址取机器码 (newadress, hookadress))
写内存字节集 (-1, newadress, old_data)
写内存字节集 (-1, newadress + 5, { 137, 37 } + 到字节集 (到整数 (save)))
写内存字节集 (-1, newadress + 5 + 6, { 96, 156 })
写内存字节集 (-1, newadress + 5 + 6 + 2, { 232 } + 到字节集 (到整数 (myfuc - (newadress + 5 + 6 + 2 + 5))))
写内存字节集 (-1, newadress + 5 + 6 + 2 + 5, { 157, 97 })
写内存字节集 (-1, newadress + 5 + 6 + 2 + 5 + 2, jmp地址取机器码 (jmpbackadress, newadress + 5 + 6 + 2 + 5 + 2))
#读取内存[[esp]]
point1 = 读内存整数型 (-1, save, )
point2 = 读内存整数型 (-1, point1)
point3 = 读内存整数型 (-1, point2)
useradress = point3 + 64
msgadress = point3 + 104
user = 编码_Unicode到Ansi (读内存字节集 (-1, 读内存整数型 (-1, useradress)))
msg = 编码_Unicode到Ansi (读内存字节集 (-1, 读内存整数型 (-1, msgadress)))
信息框 (user + “:” + msg, 0, , )

写代码部分暂告一段落,技术不行,以后再搞

对HOOK有一个更深的认识

具体的hook流程也已经明确

对hook目标地址更改

jmp 申请的新地址

新地址

先执行hook目标地址的原代码
mov 地址,寄存器
pushad
call 我的子程序
popad
jmp hook目标地址的下一句

另外在内联汇编中,jmp和call后面跟着的是相对地址,需要计算,具体公式为:

相对地址(也就是call和jmp后面跟着的地址) = 被跳转地址(被jmp和被call的地址) - 当前地址(要执行jmp和call命令的地址) - 5(jmp和call占用的字节)