【腾讯Bugly干货分享】iOS 黑客技术大揭秘(3)

进入聊天界面,再次向群发送一个消息,会发现 ui卡住了,观察 lldb控制台,会提示进程被断住了,在 lldb中继续输入 bt指令,重点观察模块名是 WeChat的栈,但是由于没有符号表,我们只能看到栈的内存地址:

【腾讯Bugly干货分享】iOS 黑客技术大揭秘

想要把内存地址还原成函数名,需要两步:

第一要把内存地址转换成二进制文件偏移量

第二步再使用 hooper根据偏移量找到函数名

也就是上面公式的逆向过程:

函数在二进制中的偏移量=内存地址 - 进程内存基地址

这里我们栈地址是0x0000000101ad02f4,基地址是0x00000000000e8000,做下减法,得到结果0x1019E82F4,然后在 hooper中搜索这个地址就能得到方法名:

【腾讯Bugly干货分享】iOS 黑客技术大揭秘

以此类推,最后得到栈顶的调用是这个:

[CMessageMgr MainThreadNotifyToExt:]

CMessageMgr这个类,从名字来看,就是消息管理器,而且是单例的,我们终于找到了真正需要 hook的类,但是这个方法是用来异步发送通知的,不像是消息的源头,所以我们用上面说的 logify组件继续追踪一下这个类

过程不再重复讲,最后的目标终于浮出水面:

(void)AsyncOnAddMsg:(id)message MsgWrap:(CMessageWrap* )msgWrap

第一步消息的拦截点终于找到了,接下来是第二步:

第二步:我们需要知道哪些消息是红包,这个就比较简单,向群里发一个普通消息和红包消息,通过 logify组件观察 message参数的内容,发现它里面有一个 type字段,如果是红包,值是49,其他语音和文本各不相同,所以,这里轻松搞定。

第三步:需要实现抢红包代码,这一步稍微复杂一点,先讲一下思路,首先进入微信开红包的界面:

【腾讯Bugly干货分享】iOS 黑客技术大揭秘

根上面讲过的一样,通过 cycript+logify我们可以轻松拿到开红包的入口函数,下一步,我们需要自己从 AsyncOnAddMsg的参数中构造抢红包函数的入参。

找注入点我就不再重复讲,直接上结果:

[WCRedEnvelopesReceiveHomeView OnOpenRedEnvelopes]

这显然是一个事件处理函数,它里面肯定会调用真正的拆红包逻辑

所以我们打开 hooper,找到这个方法然后观察方法体,发现它在最后调用了一个 selector:

WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes

这应该是真正的拆红包逻辑,但是这个 selector没有参数,所以我猜想这个方法的作用应该是自己封装拆红包所需的数据,并调用底层服务来拆红包。

在hooper中搜索这个方法,观察一下,果然是这样的:

函数开始部分的汇编代码都是在构造dictionary,只有在最后调用了一个可以函数:

【腾讯Bugly干货分享】iOS 黑客技术大揭秘

这里说明一下,由于微信这一块的代码全都是 oc的,而 hooper可以直接将 oc反汇编到接近源码的水平,所以,还原过程基本不需要掌握多少汇编知识,具体的还原过程可以看下我之前发的文章:

最后一步,编写 tweak,替换 AsyncOnAddMsg函数并把自己的成果注入进去就 ok了。

6、注入工具——insert_dylib + install_name_tool

对于越狱机器来说,到这里已经大功告成了,但是想要在非越狱机器上跑,还需要几个步骤:

在非越狱机上面,一切都要靠自己,首先手动把你的库注入到目标二进制中,这一步使用 insert_dylib就可以了,它运行在 pc端,在命令行 cd到微信的二进制目录,执行命令:

insert_dylib @executable_path/xxx.dylib WeChat

因为我们的 hook代码是基于 cydiaSubstrate的,用l -L xxx.dylib来检查一下你的 tweak,这个依赖库在正版机上是没有的,我们需要把它从越狱机充 cp出来和你的 tweak一起拖进目标 app目录,并通过install_name_tool命令修改你的 tweak中对他的引用路径。

最后,用 codesign命令对微信 bundle里面所有的 dylib进行签名:

codesign -f -s "iPhone Developer:xxx" xxx.dylib

打包成ipa:

xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/WeChat.ipa

再使用 iResign对 ipa进行签名,就可以安装到非越狱的机器上了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/fde9b9a5aea5cff405ec47d471e73efe.html