公众号:泷羽Sec-尘宇安全
hook 微信信息撤回功能
原文地址:https://bbs.kanxue.com/thread-282005.htm
b站刷到一位老师分享了hook pc端微信信息撤回功能的视频,跟着动手操作了一遍之后,尝试了一下hook Android端的微信,下面分享一下学习过程。
视频链接:广东财经大学-信息安全-基于IDA Pro和Frida的微信消息撤回无效实验_哔哩哔哩_bilibili
PC端
PC端那位老师已经演示的很清楚了,我就简单的复述一遍,感兴趣的可以看一下视频。
微信的核心功能都是在WeChatwin.dll(windows下)里实现的,信息撤回也不例外。
我们使用ida分析,通过字符串进行定位,试试相关的字符,如:撤回、revoke、withdrawn等关键字
我们逐一hook使用到这些字符串的函数,然后点击微信的撤回,如果有log输出,就代表是关键函数。
测试脚本如下,首先我们获取了dll的加载地址,然后通过ida查看到函数的偏移地址,将dll地址加上该偏移地址,即可得到内存中该函数的地址,那么如何确定哪一个才是撤回相关函数? 就是靠试,使用到msg相关字符串的函数我们都hook一遍,然后触发撤回功能,如果打印出来revokeMsg就说明hook成功。
import frida,sys
# 创建脚本
jsCode="""
//写入js脚本 就和之前一样
//下面的代码获取dll的加载地址
const baseAddr=Module.findBaseAddress('WeChatWin.dll');
console.log("baseAddr:"+baseAddr);
//每次需要修改的只有这里
const revokeMsgFunAddr=getRealAddr('0x1823CD710');
console.log("function addr:",revokeMsgFunAddr);
//根据地址进行frida注入
Interceptor.attach(revokeMsgFunAddr,{\
//一旦进入hook的函数,该回调函数就会被调用
onEnter(args){
console.log("-----revokeMsg------")
}
});
//dll地址加上偏移地址,定位到这个函数
function getRealAddr(addr){
//基地址
const idaBase=ptr('0x180000000');
const offset=ptr(addr).sub(idaBase);
const result=ptr(baseAddr).add(offset);
return result;
}
"""
#使用任务管理器查看微信的PID然后填入
session = frida.attach(7876)
# 运行脚本
script = session.create_script(jsCode)
script.load()
print("Successfully attached!!!!")
# 防止运行完进程直接退出
sys.st