说明
记录逆向学习,基于微信2.6.8.51,易语言,用到工具有CE,Ollydbg,汇编转易语言工具。仅供学习,有人感兴趣在发下一篇吧,下一篇获取实时消息call。
获取登录二维码
首先打开CE附加微信,附加后搜索IHDR(png头部声明,不懂的自行了解,另一种思路搜二维码网络地址,经实践没有这种快。)
校正地址-c,显示出 png。(指针地址一般不变(除非多重指针,但是一般比较少),数据地址会变(经验),所以不能随便切换二维码,否则找不出)
地址比较多时,可以根据刷新二维码来筛选地址,筛选剩下几个之后,迅速搜出指针(因为指针不变),再用读二维码的工具读指针看是否正确。
根据找出来的指针地址,来找偏移,用od附加
dd找出来的指针地址
写入断点(内存写入,当内存被改写的时候调用该断点。(只可以下一个(好像是cpu断点)))
扫码,改变刷新二维码,找出刷新二维码的call,用读二维码的工具辅助
边F8边看二维码有没有刷新出来,找出call
刷新出来说明就是这个call
下面找偏移
看这一步的寄存器,最接近二维码指针的地址(寄存器传值,一般)。图中是ESI最接近,然后算出ESI和地址的偏移(因为后面hook就传这个esi的参数过来)ESI-03E62EE0=4B0
再找call和被call函数的偏移(根据当前模块的基址来找,后面会获取模块基址)
点e找到当前模块基址
计算出call的偏移和被call的偏移
606D19D2 E8 D984C900 call WeChatWi.61369EB0
基址60580000
call偏移=606D19D2 -60580000=1519D2
被call偏移=61369EB0-60580000=DE9EB0
根据偏移读出图片
其中置入的汇编为
pushad (备份寄存器)
push esi esi入栈(传参,根据具体找偏移的寄存器写)
call label1(图中就是调用回调地址里传过去的子程序(第二维码地址)esi就是传的参数)
label1:(占位符,调用hookpro回调子程序)
popad (恢复寄存器)