零基础一行代码快速破解iOS某App
零基础一行代码快速破解iOS某App0x1 目标介绍
目标App能够帮助你了解世界各地的风土人情,是学习各国语言的必备佳品,可惜的是,启动后就有显眼的广告(底部),而且默认只能学习美式英语,比如飘哥想要学习一下法语,则要开启”高级“功能才行,如下图所示。
开发者也是挺“人性化”的,右下角显眼位置提供了一个”订阅“指引,点进去看看,原来是个内购页面,如图所示。
嗯!本文就尝试从新手的角度来破解这些限制。
0x2 不需具备的知识
本文不需要你了解LLDB、IDA、Hopper等分析调试工具,不需要你了解任何ARM汇编知识!需要了解啥呢?这是个好问题!你只需要会敲命令行即可!!
本文涉及的代码只有一行!学完后你可以正儿八经的吹个牛B:“哥一行代码破解xxx”。
0x3 安装Frida
Frida是一个跨平台的轻量级Hook框架,支持所有主流操作系统,它可以帮助逆向人员对指定的进程进行分析。它主要提供了精简的Python接口和功能丰富的JS接口,除了使用自身的控制台交互以外,还可以利用Python将JS脚本库注入到目标进程。使用Frida可以获取进程详细信息、拦截和调用指定函数、注入代码、修改参数、从iOS应用程序中dump类和类方法信息等。 Frida源代码托管在GitHub:https://github.com/frida/,感兴趣的读者可以下载回来阅读。 Frida需要安装控制端(macOS端)与被控端(iOS端),两端的版本号最好保持一致,否则可能无法正常工作。
1.被控端(iOS端)
打开越狱商店添加软件源https://build.frida.re/,搜索“Frida”进行安装,当前最新版本为12.6.18,如下图所示。2.控制端(macOS端)
控制端可以安装到Windows、macOS、Linux等平台,本文仅以macOS平台为例讲解。
使用sudo权限,利用pip安装frida及frida-tools,如下:
$ sudo pip install frida
$ sudo pip install frida-tools
$ frida --version
12.6.18
0x4 寻找切入点
以前教程都用IDA之类的寻找切入点,由于本文是新手教程,那么就直接利用frida-trace进行试探,由于有免费试用,所以飘哥选择用FreeTrial关键字在作死的边缘反复进行试探,命令行如下:
$ frida-trace -U -f com.apalonapps.xxxapp -m "*[* *FreeTrial*]"
Instrumenting functions...
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APMInAppPurchaseItem_isFreeTrial_.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APMInAppPurchaseItem_setFreeTrial__.js"
+: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedStart_0b3c8fc5.js"
+: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedJoinW_14c42d59.js"
+: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedSubsc_3ef5833c.js"
+: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedStart_-4b087cfa.js"
+: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedEnrol_-1c75f8e9.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedPerio_5aa8eee7.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedStart_-19f8503b.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedStart_6bd91611.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNInAppProduct_localizedNDayF_-63a0ffb1.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__ICMusicSubscriptionStatus_isIn_-1cb12cd0.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__ICMusicSubscriptionStatus_isEl_1207a9d0.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNSubscriptionsManager_isActi_-1800081e.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNSubscriptionsManager_isFreeTrial_.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNSubscriptionsManager_setIsF_39d6e6dd.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__SSVSubscriptionStatus_setFreeT_06feffb6.js"
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__SSVSubscriptionStatus_isFreeTr_-0038832.js"
Started tracing 18 functions. Press Ctrl+C to stop.
此时会在命令行所在目录下生成一个“__handles__”文件夹,里面是生成的JS文件,先不要管他们。 现在解释几个关键参数:
[*]-U:表示USB连接
[*]-f:表示启动某个进程(后面跟着应用的bundleId)
[*]-m:对Object-C的方法进行追踪(你也可以叫Hook),后面可以更各种模糊匹配等等。
成功Hook了一堆方法(函数),遗憾的是,直到进入界面都没触发相关的方法,那么我们进入内购页面试试看,点击“订购套餐并享受试用”,由于飘哥大写的Qiong,所以在随后支付窗口中当然点击“取消”,土豪随意!此时控制台总算有反应了:
/* TID 0x403 */
215349 ms-
很好,看来前戏很重要哦!!现在全面追踪APNSubscriptionsManager类的所有方法,如下:
$ frida-trace -U -f com.apalonapps.xxxapp -m "*"
.
.
.
Started tracing 87 functions. Press Ctrl+C to stop.
/* TID 0x403 */
540 ms-
540 ms | -
541 ms | | -
541 ms | | -
541 ms | | -
541 ms | | | -
541 ms | | -
541 ms | | | -
541 ms | | | -
541 ms | | | -
548 ms-
548 ms-
548 ms-
548 ms-
556 ms-
557 ms-
.
.
.
好了,这次高C了,调用了一堆方法,先别去管他,点击一下服务器列表,继续看方法调用:
168571 ms-
168572 ms-
168572 ms-
168572 ms-
168573 ms-
168573 ms-
168573 ms-
168574 ms-
168574 ms-
168574 ms-
168575 ms-
168575 ms-
这里反复调用hasActiveSubscription方法,从字面意义来看就知道在检测是否激活了“订阅”功能(开发者说可以全功能试用)。 此时当然是没有激活!想办法激活它会怎么样?
0x5 飞向光明之巅
既然是新手教程,当然不去分析其代码实现。通过观察日志,我们注意到该方法在App启动时就会调用,嘿嘿,那么接下来干吗呢?找到frida-trace生成的JS文件,稍微添加一行代码如下图所示: 大家别慌,这些代码都是frida-trace自动生成的,你只要大概知道onEnter是进入函数时执行,onLeave是离开函数时执行即可,那么飘哥刚刚加入的retval.replace(1);代码意思就是在离开函数时将返回值改为1(true)。 此时用明确的脚本调用来启动进程,如下:$ frida-trace -U -f com.apalonapps.xxxapp -m "-"
Instrumenting functions...
-: Loaded handler at "/Users/piao/Desktop/__handlers__/__APNSubscriptionsManager_hasAct_14ba39f8.js"
Started tracing 1 function. Press Ctrl+C to stop.
/* TID 0x403 */
482 ms-
710 ms-
748 ms-
749 ms-
.
.
.
.
经过一番云雨之后,进入了界面,此时心情还是非常激动的,因为底部的广告条没了~~~~,哈哈,如下图: 点击服务器列表,随意点击个服务器试试,貌似全部可用了,如下图。 点击试试功能完全正常,如下图所示。
0x6 插件实现 这部分你们找diao大的C版帮编译吧,哈哈哈~~~~
%hook APNSubscriptionsManager
- (bool) hasActiveSubscription {
return YES;
}
%end 搜嘎 看来必须得入手一部爱疯才能学习了 本帖最后由 small-q 于 2019-9-5 19:26 编辑
666,火速前来学习
感觉需要越狱才行 666,精彩! thor或者http catcher
应该就可以实现吧 [url=forum.php?mod=redirect
低调学外语
代码看到了,爱疯什么时候发? 爱疯没有只能看看,支持飘大教程。 这句代码花我一晚上,终于背熟了,下一步先入手鼠标垫!必须要有计划!有实施!mac我又进一步了!