叽里呱啦 少儿英语 swift App简单分析

总结:
1.搜索jial相关方法,然后进行hook并直接返回NO,过反调试。
2.swift项目,以系统OC类作为突破点,比如NSLog, UIAlertView等等,这些都是可以断下来的。例如:
1)观察日志,对NSLog日志打印进行下断,并打印堆栈,定位到逻辑处理函数。
2)观察UI效果,比如弹框提示, 对弹框点进行下断,并打印堆栈,定位到逻辑处理函数。

我们本次分析的突破口是:点击按钮,App弹框提示,通过XCode UI调试得到弹框类是SVProgressHUD,并且是一个OC类,然后hook SVProgressHUD的弹框方法,并进行下断,通过打印堆栈,得到具体逻辑处理的无符号函数。

首先下载App,然后使用frIDA砸壳,拿到解密ipa。然后打开IDA分析macho文件,并创建MonkeyDev工程且运行。
运行过程中,我们发现App对越狱做了检测。
那我们在IDA里面搜搜 “ jail” 吧,发现有这些:

一看这些方法名,我们就知道他们是用来检测设备是否越狱。那我们先hook掉这些isJail之类的方法,并返回NO。然后继续运行,发现可以正常运行了,是不是很简单。

好了,现在我们来看看点击付费课程是怎样一个逻辑,如下图:

点击发现,App弹框提示需要先学完前面的课程才行。那能不能绕过它呢。 我们用pvc命令看看当前VC:

然后在IDA里面搜“ParentingLessonListViewController”, 结果如下:

很明显,很多方法都没显示啊,一个VC不可能就这么点方法。并且还是swift开发的。
通过base地址和该类的偏移地址相加,得到方法的实际地址,并进行下断。结果发现压根就断不下来,OC那套不适用了。

那是不是没法搞了呢,我们回过头来看看App的截图, 当我们点击付费课程的时候,弹出了一个提示框, 并且这个框
是SVProgressHUD实现的。我们知道这是一个OC类。我们不妨先hook它的相关方法试试,并把xm文件改成c++,方便下断点。
然后运行,我们发现竟然能断下来,那我们就可以打印堆栈找到逻辑处理的方法。如下图:

如上所示:frame #1 这是一个无符号的方法,根据地址和base地址,得到frame #1代码行的偏移地址,然后在IDA中进行搜索,我们发现这个函数有点长。

仔细看看反汇编代码,发现如下:

从上图反汇编代码可以看出,这里取到课程的status,然后根据status,进行switch处理.
因此我们在 sub w8, w8, #1 代码行进行下断,如下图所示:

断点断下来之后,查看w8寄存器的值,发现是2。我们改成1,或3,4试试。 继续运行发现跳转到购买页面。

我们继续看反汇编代码,发现有个needsPay, 如下图:

我们在cmp w8, #1 该行下断点, 然后按C继续运行。

当断点断下来之后,查看寄存器w8的值为1, 我们改成0试试。继续运行,发现成功的进入了播放页面,不过很可惜,服务器返回 “非法的课程状态”。看来服务器也做了课程校验,只好放手。
另外该App接口并没有加密,都是明文来着,就懒得分析了。

THE END
喜欢就支持以下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称