最近对 iOS 逆向很感兴趣,想学习下如何通过逆向app、分析源码、注入动态库的方式来给别人的软件增加些酷炫的功能。决定拿微信练手。
先上几个教程:
然而,真正开始学习后,发现做逆向的人本来就不多,而且由于法律法规问题,导致很多教程都含糊其辞、较为浅显。而随着 iOS 系统的更新,安全性也越来越强,以往教程中的不少逆向工具,都失效或者改变了使用方法。
教程中已有的步骤,本文不再累述;仅记录我踩过的一些坑。
#【第一个瓶颈】ios9.3 后,cycript 由于权限问题无法 hook 进程
*** _syscall(connect(socket, reinterpret_cast<sockaddr *>(&address), sizeof(address))):../Handler.cpp(169):CYHandleSocket [errno=1]
*** _assert(system(inject.str().c_str()) == 0):../Inject.cpp(119):InjectLibrary
解决 --》 使用一部 iOS 8.1.1 的 iPod 来 hook
# bundle
mobile 4021 0.9 9.8 722448 50360 ?? Ss 12:50PM 0:11.31 /var/mobile/Containers/Bundle/Application/EF82C83B-6CCA-4274-8313-AA15C8B8D042/WeChat.app/WeChat
# Data
@"/var/mobile/Containers/Data/Application/0E291049-58E9-41E8-B38F-B01C7C5B6645/Documents"
# dylid_insert 指令,执行完后,在本目录下得到 WeChat.decrypted 文件。
DYLD_INSERT_LIBRARIES=/var/mobile/Containers/Data/Application/0E291049-58E9-41E8-B38F-B01C7C5B6645/Documents/dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/EF82C83B-6CCA-4274-8313-AA15C8B8D042/WeChat.app/WeChat
# 将 WeChat.decrypted 文件复制到本地。但后来发现,mac端的 class-dump 是64位的,和iPod不适配,故无法成功将头文件dump出来。于是决定在iPod上进行 class-dump。
scp WeChat.decrypted liqiyu@172.18.67.185:~/Desktop
# 使用 class -dump 把头文件暴露出来
class-dump -s -S -H ./WeChat.decrypted -o ./header6.3-arm64
# 将 ipod 上的头文件复制到电脑本地(电脑需要先开启远程登录)
scp -r header6.3-arm64 liqiyu@172.18.67.185:~/Desktop/wechat
# 安装 iosOpenDev
参考:《在xcode7下安装iOSOpendev,并使用iOSOpendev模板编译iOS9钩子》( http://bbs.iosre.com/t/xcode7-iosopendev-iosopendev-ios9/1963 )、《iOSOpenDev安装》( http://www.jianshu.com/p/29580725707a )
安装 iOSOpenDev 时,我根据教程先装了 MacPort, 装完后 还不能直接执行 sudo port -v selfupdate 指令更新 MacPort,而要先配置环境变量。详见此处第2.5条 ( https://guide.macports.org/#installing.shell )。
安装 Xcode Command Line Tools
# 查看指定页面 ui 层级结构
UIApp.keyWindow.recursiveDescription().toString()
# make package install 坑
动态库写完后,需要进行package install。运行发现报错。
wxopenredbag make package install
==> Error: The vendor/include and/or vendor/lib directories are missing. Please run `git submodule update --init --recursive` in your Theos directory. More information: https://github.com/theos/theos/wiki/Installation.
make: *** [before-all] Error 1
(按说明,到 theos 目录运行 git submodule update --init --recursive 指令就好)
wxopenredbag make package install
> Making all for tweak WXOpenRedBag…
==> Preprocessing Tweak.xm…
Tweak.xm:2: error: %orig does not make sense outside a method
make[3]: *** [/Users/liqiyu/Work/Hackor/myCode/WeChat/wxopenredbag/.theos/obj/debug/armV7/Tweak.xm.b8bea91d.o] Error 22
make[2]: *** [/Users/liqiyu/Work/Hackor/myCode/WeChat/wxopenredbag/.theos/obj/debug/armV7/WXOpenRedBag.dylib] Error 2
make[1]: *** [internal-library-all_] Error 2
make: *** [WXOpenRedBag.all.tweak.variables] Error 2
(文件中,有俩方法是自动生成的,如:
- (void).cxx_destruct { %log; %orig; }
该方法方法名以"."开头,显然有问题。把"."删除后即可成功 install)
# 连接xcode打开越狱机器控制台,查看 logify 输出
打开Xcode->Window->Device→你的设备,下面有Log显示,但未找到微信logify输出
# 反汇编工具 hooper 查看偏移量
用 hooper 打开之前砸壳后获得的 WeChat.decrypted 文件,并在左侧框搜索 addMessageNode 方法
注意:
1、要把 WeChat 文件拖入 hooker 中来打开,若使用 hooker 的 File -> open 来打开则会打开失败!
2、打开时会让你选择armv7或者arm64,这需要根据你越狱手机的cpu类型来选,一定要和你的手机一致!
# 通过lldb远程调试iOS App
参考:
http://www.cnblogs.com/csutanyu/p/3653252.html
./debugserver *:微信的pid -a WeChat
另开一个终端,输入3条指令:
lldb
platform select remote-ios
process connect connect://192.168.2.101:微信的pid
然后输入指令获取进程基地址:
image list -o -f
输入:
br s -a '0x000c5000+0x01657fb4'
联系客服