试水ios-一次过闪退记录
共 1178字,需浏览 3分钟
·
2022-04-10 20:42
前言
上次写文章还是2021年,一下就一年过去了,最近挖洞有点累,研究了一手ios的应用,为后面挖洞先未雨绸缪下。踩了不少坑,但是还是学到不少东西,简单记录下一个app从闪退到”基本“能进行调试的过程。
背景
之前有安排过测试这个企业内部的办公app,移动端安卓,ios都有,pc端同样也有win和osx的。之前搞不定,这次继续硬着头皮搞。
测试环境
ipx ios 13.6 已越狱
xcode 10.x
可能会有问题,需要去GitHub下载对应的设备支持文件(你高版本xcode没关系)。
放到下面的目录:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
还有问题就谷歌吧。
开始
从appstore中下载该应用,直接点开发现闪退(意料之中)。
要去分析肯定第一步是要砸壳(应用商店下载的都有壳),尝试直接从cydia安装CrackerXI来砸壳,并不行。还是老老实实用frida砸壳,好在没有什么别的问题。
看一下砸壳以后的二进制文件,已经没有壳了。看文件名像是企业微信。
真机调试
完成上面两步,开始尝试真机调试(肯定还不能调,有检测)。
安装monkeyDev,创建项目,真机运行。
让它跑,到断下来。
查看堆栈调用信息,一眼能看到这个checkEnv,它有问题。
看他的调用应该是在framework,找到它ida慢慢分析它。
过闪退
已经找到闪退的调用处了,一点一点改,它的调用还是很常规,exit、svc之类的。都能改问题就不大。
一处一处找,一处一处patch,有好几处,检测越狱,注入,调试等。
我这里后来选用的是把exit调用跳掉,svc我是nop。
最后伪码是这样的,打印不管,退出跳掉。
过签名检测
完成闪退修复后,发现进入仍然是有别的问题。会弹窗提示,不合法。
这种只能图层调试,但是我这个不行,因为之前改过一次主文件,导致后续加载会有问题。
到这里其实是卡住了(思路和应用都是卡住了)。
正常思路是图层,找到弹窗的事件,然后去回推。
不过好在柳暗花明,发现调试信息如下:
去主文件找,"invalid team id",很幸运,找到了。
这里只列出一部分,最开始if判断进入该逻辑后,输出检测信息,弹窗调用等,我if处给他反条件,成功绕过。
其实到这里重新打包,就已经能进行调试了,不闪退,不弹窗。没有账号没进行进一步测试。
填坑
完成上面的所有步骤,发现还是会崩溃断下来,可以说”屡试不爽“,调试崩溃断下来循环。
尝试找到崩溃的调用。
通过崩溃地址最近的主文件函数地址减去偏移,在主文件中找到函数调用。
发现了自己挖的坑,把这里nop了,后面的调用直接出问题。所以崩溃了。
还原成原来的样子,再xcode run起来,一切都很美好了。