-
-
[原创]记一则iOS App 反调试绕过
-
发表于:
2021-4-5 23:09
92040
-
前段时间在一个群里看到有人在讨论这个app,连一个专职接单的人都被难住了说有反调试过不了,不禁激起了好奇心,这个从来没听过的app有这么牛逼的技术了吗?
看了下下载链接,直接跳到AppStore,那就还好,不会有太变态的混淆,下下来看看吧。
果然,在越狱手机上一启动就退出,且没有crash log,是主动退出的没跑了,既然已经有人踩坑说有反调试策略了,那就先想办法拿到解密后的应用吧。
AppStore上架的应用都是统一的FairPlayDRM 数字版权加密保护,所以现有的各种解密套路也都一样,在程序跑起来以后进行dump。先试试用的比较多的两个工具frida-ios-dump、CrackerXI看看能不能直接dump出来。经过测试,都不行,皆是由于程序退出导致没有完成dump操作,但是在用frida-ios-dump的时候看log显示所有的framework都已经成功的加载,只是dump操作由于程序退出没有完成。
确实没那么简单,但是似乎也不是丝毫没办法嘛,翻翻dyld的源码,看下dyld的加载流程,这里借用 李斌同学 总结的图:

可以看出至少已经能走到加载动态库的地方了,至于是在初始化的地方做的检测还是在进入main函数之后做得检测目前还不得而知,也不重要。由于用lldb拉起程序的时候,断点是断在_dydl_start上,所以我们完全有时机可以dump出程序的,直接memory read手撸出来再做个修复就好。这里为了省事,就直接修改frida-ios-dump 的代码,在砸壳的时候让程序暂停,直接把resume注释掉:

这样就成功把解密后的IPA包拿到了,先把主程序丢尽ida里分析一波,粗略看一下有下面这些检测越狱的API:

使用搜索引擎大致搜了下,发现多是一些sdk提供的检测,那么在越狱屏蔽插件的基础上再针对性做些处理就够了,应该不会有太骚的操作。可以直接写frida脚本或是substrate插件hook

对于懒癌患者来说,哐叽哐叽写那么多代码实非所愿,就想着能不能直接把退出的逻辑处理下,这样只要解决一处即可,谁让它动静那么大。
ida搜下exit,发现确实有好几处调用,大致看了下却都不像是检测到调试或越狱后调用的,经过调试发现确实不是这几处导致程序退出的。那就很奇怪了,还会是怎么退出的呢?
ummm, 直接上MonkeyDev调试一波吧(不得不说MonkeyDev真是一个好东西,把重打包等一系列操作都做了,还集成了一些调试环境,真香),先把MonkeyDev里面反调试相关的注释全部打开,然后就直接跑起来

[注意]看雪招聘,专注安全领域的专业人才平台!