工具1:CE, OD, VS2013
起首用CE 加载微信 用 unicode 查找string
点击别的谈天窗口 发现:0BF71544
这个地点字符串就是窗口标题缓冲区
我们再用 OD附加微信 在dump区域输入 0BF71544
这个地点没错了
使用 write硬件断点, 再切换下窗口
这时的上下文环境 MOV WORD [EDI],AX,
这里的EDI 就是缓冲区地点,之后就是顺着摸上去看看最终是谁给了EDI 这个值
根据栈回溯这里就略过
末了发现 4169这里的Call返回的指针+偏移最终得到缓冲区地点
[[[[[[[EAX]]+4]]]+70c]+580]+1b8=标题字符串缓冲区
再往上逆就发现这个EAX=[EBP-64] 是 sub esp,68 分配出来的;
这里我笔者也没搞清楚为啥sub esp,68 会刚好有一个有用的指针,为啥不怕分配一个无效指针,希望读这篇文章的大佬可以解答
知道了地点加偏移背面就好办了 我的做法是hook 416E 这个地点之后查察偏移的有用指针
判断 [[[[[[[EAX]]+4]]]+70c]+580]+1b8 是否为真 则得到缓冲去地点 使用 ReadProcessMemory 这个函数来判断
不过这个模块的的地点是会改变的 所以必要得到模块的地点 我的做法是hook DispatchMessageW 函数和VadateHandle 函数
得到模块地点后HOOK 416E地点 代码 判断 [[[[[[[EAX]]+4]]]+70c]+580]+1b8指针的有用性 得到标题字符串
文章没有写得到模块地点不过会HOOK的读者应该不难知道。
这里谢谢我的导师老高。
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |