环境:越狱手机9.0以下一部,macOS系统、
工具:reveal、class-dump、PP助手、logify
如果工具不熟悉用的话,可以简书搜索一下 全是教程的
1.用pp助手下载越狱ipa包,然后右击解压到桌面,然后在Payload中右击显示包内容,然后找到执行文件,比如微信是WeChat执行文件。
2.用ssh在mac连接到手机,然后用class-dump进行导出头文件,Class-dump -S -s -H [工程名] -o [导出的路径],然后就能在文件夹中看到所有的h头文件啦,然后将这个文件放一旁。
3.用reveal查看运行时的app界面,选中一个控件,在右侧会有父视图的类名,然后按照这个类名,在h文件找到这个类文件,在其中看看是否有可疑函数。
以上就是基本的着函数的方法,下面还有个方法是我最近总结的
有的方法是用单例实现的,比如id DC = [objc_getClass("MMServiceCenter") defaultCenter];
这个方法是获取一个微信的单例service。然后CContactMgr *contactManager = [DC getService:[%c(CContactMgr)class]];,获取到CContactMgr群组相关操作的service
比如我可以用这个CContactMgr类获取诶诶想你联系人列表、建群、拉人进群、修改群名称等等操作,由于涉及到wx机密 就一一贴了,想要研究的私聊。
类比抖音app,最近研究了一下抖音发送私信功能,总结根据逆向微信的经验,大概找到了抖音发送私信的功能
idDC = [%c(HTSServiceCenter) defaultCenter];
idmsgSend = [DC getService:[%c(TTIMListenerManager)class]];
NSLog(@"AWEIMMessageListViewController viewDidLoad");
[msgSend notifyAddMsg:@"抖音联系人id"chatMsg:@"测试消息"];
[msgSend notifySendAckMsg:@"抖音联系人id"chatMsg:@"测试消息"extraInfo:nil];
哎呀,写多了,不过没有具体demo,也成不了事。
再往里面说,当我看了某个类里面,根本定位不到任何函数,这怎么办呢,可以用logify,
命令 /opt/theos/bin/logify.pl + 头文件绝对路径。将打印出的代码复制到theos,make package打成deb,然后重启app,打开控制台,你会发现所有关于这个类的输出都可以看到了,如果想要看到详细的参数输出,可以在theos中详细进行打印。
这大概就是我一般找函数的方式了。。。终结
还没终结,我还要挣扎一下,另外一个较专业的找函数方法,工具 ida活hopper、debuggserver、frida-ios-dump环境。
首先用ida或hopper将执行文件WeChat进行解析,一般需要两三个小时,然后会得到i64文件,用ida打开可以看到机器码、部分函数名、函数内部逻辑【对照逆向书可以慢慢看得懂】
用debuggserver 断点app
image list -o -f 查看地址
1.最终运行的基地址 = 不包含偏移地址的基地址 + ASLR 偏移地址
2.不包含偏移地址的基地址可以在IDA中查看
3.ASLR 偏移地址可以在LLDB上查看
当debugserver断住app时候,可以通过br +内存地址对某个内存地址进行断点,按c运行后,当执行到这个断点 回停下,可以通过打印sp、sp2什么的看看寄存器值【register read 可以查看当前所有寄存器值】
参数都能打印出来了,剩下的就是慢慢找函数了。
找到函数了 再用hook写一个deb,注入到越狱手机,看看能不能真的修改你想要的功能。
到这里,我是黔驴技穷了。。。
后面有新进展 再补充吧。。。
网友评论