【软件逆向-[调试逆向] linux 微信 调试原创,可打印接收的消息,仅限技术交流,不定期更新】此文章归类为:软件逆向。
请先安装 wechat-beta_1.0.0.145_amd64.fixed.deb 版本的微信,然后将我的应用程序wechat 还有libX.so替换进去,即可实现收消息打印,效果如下。
原理:
通过gdb分析 当linux 微信收到消息后,必然会走到地址 0x9b0a7a ,并且明文消息的内存地址会存放在x64架构的寄存器里面,我们接下来的做法就是hook这个地址位置,然后将寄存器里面的内容打印出来。
hook原理:
首先修改wechat的二进制文件,让其运行链接动态库时,多链接一个我的动态库libX.so.然后在libX.so里面做初始化操作,这个初始化操作主要就是修改机器指令,修改wechat应用内存地址 0x9b0a7a的指令,修改前记得先将里面的指令读取出来做个备份,然后插入mov rax, addr
jmp rax. 这两条指令的意思就是远程跳转,让CPU远程跳转到libX.so的动态库里面,跳转后,立即执行如下指令:
这一步的操作主要是为了备份寄存器信息,避免因为libX.so内部的函数调用等操作污染之前的寄存器。
然后将备份的寄存器地址输出出来,取数据并打印出来,这个数据就是明文消息内容。
如图所示,在rdi寄存器里面,
最后,我们要想办法把cpu跳转回wechat应用里面,恢复环境,
由于wechat应用内存机器指令被修改,所以现在拿出之前已经备份的wechat指令进行运行,然后再跳转回去,即可恢复环境,代码如下:
代码链接如下:
https://github.com/lmclmc/linux-wechat-hook.git
更多【软件逆向-[调试逆向] linux 微信 调试原创,可打印接收的消息,仅限技术交流,不定期更新】相关视频教程:www.yxfzedu.com