对X信的研究及修改(四)

发布者:iweizime
发布于:2018-01-03 13:46
 

本文讲一下Hook技术。

 

已经可以调试了,为什么还需要Hook呢?首先,smalidea的调试功能并不是很好用,只能查看类的数据成员,不能查看函数的参数,局部变量等数据。其次,使用Hook可以实现对函数的修改,快速验证一些想法,而不需要重新编译安装微信。总之,多学一点总是没有坏处的。

Frida安装

Frida是一个动态注入工具集,允许你将自己的JavaScript代码片段或你自己库注入Windows, macOS, GNU/Linux, iOS, Android, and QNX上的本地应用。其安装和使用都比较简单。

 

在电脑上安装只需要一条命令:

$ sudo pip install frida

在手机上安装,要先到Github Release上面现在最新的frida-server-10.6.29-android-arm64.xz,解压后放到/data/local/tmp目录下面就行了。

Frida使用

我也只是会用简单的功能,更详细的请参考Frida的文档

 

假如我们想Hook一下com.tencent.mm.sdk.platformtools.bi这个类中的.method public static r(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;这个函数,可以使用如下代码:

 

WeChat
str1: <sysmsg type="revokemsg"><revokemsg><session>wxid_xxxxxxxxxxxxxx</session><msgid>0000000000</msgid><newmsgid>0000000000000000000</newmsgid><replacemsg><![CDATA["XX" 撤回了一条消息]]></replacemsg></revokemsg></sysmsg>
str2: sysmsg
map: {.sysmsg.revokemsg.session=wxid_xxxxxxxxxxxxxx, .sysmsg.revokemsg.replacemsg="XX" 撤回了一条消息, .sysmsg.$type=revokemsg, .sysmsg=, .sysmsg.revokemsg=, .sysmsg.revokemsg.msgid=0000000000, .sysmsg.revokemsg.newmsgid=0000000000000000000}

可以想到,如果把这种撤回消息屏蔽掉,就可以防止撤回了。当然,只是简单的屏蔽掉是可以防止撤回,但是撤回消息就没有任何提示了。

 

还有一点需要说明的是,bi.r.implementation这个表示在这里是没有问题的,因为bi类里面只有一个r函数,然而当遇到函数重载,即函数名相同但是形参不同时,这样写就不能确定是哪个函数了,这是要需要r.overload(xxx).implementationxxx是形参列表。


声明:该文观点仅代表作者本人,转载请注明来自看雪