来点我最喜欢的实战环节,然后再去学ctf。
某绿色软件
版本:
需要用到的是x32dbg,一步一步分析吧。
先打开微信,然后直接附加进程
然后微信会卡死,我们在dbg里面跑到最后,会发现微信能点击登录按钮了。这个时候的模块是wechatwin.dll,根据名字来看这玩意估计是主要的dll。
据此,我们考虑在这个dll里面找一找有没有我们想找的撤回模块。
在符合里面找到这个dll,然后进去看看
要找的是撤回模块,直接在当前模块搜字符串,拼音和英语都试一试
revoke和recall的关键字都有,但是可以找到更关键的关键字:revokemsg,看这名字应该是撤回消息
来到这个函数,我们这里就是在7AF24C68处
看了一圈没发现什么好利用的地方,然后突然想到:刚刚搜revoke的时候看见了把函数地址压入栈的操作,会不会有一个是在压这个函数的栈呢
退回引用的地方,发现这句话
而且只有这句话在调用revokemsg的地址,那么去看看
这个逻辑很好理解,考虑把je改成jmp或者把下面一大串全nop了,改成jmp的话还得调栈帧,就全部nop了吧
直接右键补丁然后修补,保存出来的dll文件命名为wechatwin.dll,替换就行,替换前建议备份预备不测。
测试一下
done