网易云音乐, QQ音乐, 酷狗音乐 App去反调试
总结:1)还原包名
2)搜索jail,hook越狱相关检测。
3)搜索debuger之类,看看有没有调试器检测,hook。
4)边Hook,边重新运行看效果。
第一步:砸壳
砸壳(我用的是frida,非常好用),然后新建MonkeyDev工程。
第二步:获取包名(ps + cycript命令), 这里就不详细说了。
第三步:
解压砸壳后的ipa文件,得到macho文件。然后拖入hopper。
首先还原包名,为什么要还原包名呢,主要有两方面:
1.还是因为得益于MonkeyDev这一神器,在xcode里面调试起来简直是方便太多,最主要的还是长期正向开发用惯了XCode调试吧。但是MonkeyDev工程必须得有个bundleId, 但是又不能和原bundleId一致,因此有些App就在包名上做反调试。这是之前分析boss直聘的时候经验。
2.另外也许业务接口也会上传App包名。
所以我们先还原包名吧,这个时候我们得先把之前appstore上下载的包删掉,不然真机调试的时候手机上就有两个相同包名的App,会影响调试的。
%hook NSBundle
- (NSString *)bundleIdentifier
{
return @"com.netease.cloudmusic”;//包名
}
//注意,hook下面这个方法有可能会影响UI效果.比如网易云音乐hook下面方法就会导致很多App图标加载不了。不hook又无法正常使用,具体原因懒得去分析了,hook上能正常使用就行。
- (NSDictionary *)infoDictionary
{
NSDictionary *dic = %orig;
NSMutableDictionary *resultDic = ;
; //包名
return ;
}
%end
1)酷狗音乐:
搜索jail,得到如下:
然后对这些方法hook,直接返回NO即可。
运行起来看看效果,能正常使用。基本就过了。
2)QQ音乐:
同样,先搜索jail:
然后对这些方法进行hook, 直接返回NO.
运行起来看看效果,感觉还是不行,有日志提示被xcode调试。然后搜搜debug看看:
发现搜出来的debug很多,跟调试器相关的估计也就圈起来的这个,那我们再搜搜debugger试试看:
我们先对这三个方法hook,直接返回NO。
另外在搜索KSPerformanceMonitor的时候发现有这么个方法:+ (BOOL)isTheAppStoreEnvironment,我们也hook一下它,直接返回YES。
然后运行起来看看效果。
这里需要说一下:
当时日志提示正在被xcode调试,我走了不少弯路,先是根据日志内容在Hopper中搜索相关字符串,结果什么也没搜到。然后只好对NSLog下符号断点。并记住 正在被xcode调试的上一条日志内容,当xcode输出这条日志时候,继续运行,应用下一次断下来就是 提示被xcode调试的日志的地址,然后我们bt一下调用栈,结果都去掉符号了。那只有根据当前地址 - base地址 = 偏移地址,然后在hopper中搜索偏移地址,并进行分析咯。
然后搜索包名相关的方法,对返回包名的相关方法进行hook, 恢复App包名。
我们可以看看这些类,有第三方SDK设置包名,也有VC,这些我们都不管。 我们只看圈起来的这些类,看看这些类的其他方法,大致看看是干嘛的。然后根据猜测有选择性的对相关类的包名方法进行hook。我这里主要做了如下hook:
%hook RqdBundleUtil
- (NSString *)getBundleId
{
return @"com.tencent.QQMusic";
}
%end
%hook RqdModelBase
- (NSString *)bundleId
{
return @"com.tencent.QQMusic";
}
%end
再跑起来看看,运行正常。那反调试基本就过了。
3)网易云音乐
同样,先是搜索jail, 看看搜索结果:
好家伙,还挺多的, 从搜索截图来看,其中NTESBugrptJailbreakCheck这个类的方法还挺多的,那我们对其他类的jail相关方法先hook,然后再来分析这个类。然后有针对性的Hook NTESBugrptJailbreakCheck类的某些方法。
然后跑起来看看,还是有些问题。
我们再来看看有没有跟调试器相关的方法,主要搜索下面这些字符串:
debugattached, debugger,
然后搜索包名相关的方法,对返回包名的相关方法进行hook,恢复App包名。 在build setting里面有个default bundleID,改成yes就会自动以原bundleID打包 qtfreet00 发表于 2019-9-4 17:19
如果符号被混淆呢或者是c层实现的
先是上面的常规处理; 如果符号被混淆,或者无符号,如果现象是直接崩溃的话,那就对exit, abort下断,看栈信息,去分析调用栈上下文。如果不崩溃,跳到其他页面,那就针对出现的症状再针对性的分析,比如什么情况会跳转到这种页面而不是正常页面。只要能够正常运行了,不影响后续的功能分析就好。 顶一个。 图片不能直接粘贴,需要先上传再贴到正文,给你编辑了一下,下次记得这么操作哦。 感谢楼主,看到了耳目一新的干货{:1_893:} Hmily 发表于 2019-9-4 16:25
图片不能直接粘贴,需要先上传再贴到正文,给你编辑了一下,下次记得这么操作哦。
哇,谢谢大佬。第一次发帖,不懂这些,以后注意。 如果符号被混淆呢或者是c层实现的 看不懂 这是干嘛用的? 希望多指导IOS逆向 感谢 感谢楼主分享