xifgg 发表于 2019-9-4 12:36

网易云音乐, 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包名。

wstclzy2010 发表于 2019-9-13 10:28

在build setting里面有个default bundleID,改成yes就会自动以原bundleID打包

xifgg 发表于 2019-9-4 17:44

qtfreet00 发表于 2019-9-4 17:19
如果符号被混淆呢或者是c层实现的

先是上面的常规处理; 如果符号被混淆,或者无符号,如果现象是直接崩溃的话,那就对exit, abort下断,看栈信息,去分析调用栈上下文。如果不崩溃,跳到其他页面,那就针对出现的症状再针对性的分析,比如什么情况会跳转到这种页面而不是正常页面。只要能够正常运行了,不影响后续的功能分析就好。

xifgg 发表于 2019-9-4 12:39

顶一个。

Hmily 发表于 2019-9-4 16:25

图片不能直接粘贴,需要先上传再贴到正文,给你编辑了一下,下次记得这么操作哦。

PInstinct 发表于 2019-9-4 16:55

感谢楼主,看到了耳目一新的干货{:1_893:}

xifgg 发表于 2019-9-4 17:09

Hmily 发表于 2019-9-4 16:25
图片不能直接粘贴,需要先上传再贴到正文,给你编辑了一下,下次记得这么操作哦。

哇,谢谢大佬。第一次发帖,不懂这些,以后注意。

qtfreet00 发表于 2019-9-4 17:19

如果符号被混淆呢或者是c层实现的

minipink 发表于 2019-9-4 17:21

看不懂 这是干嘛用的?

Bds1r 发表于 2019-9-4 17:39

希望多指导IOS逆向 感谢

麦辣鸡腿堡 发表于 2019-9-4 18:24

   感谢楼主分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 网易云音乐, QQ音乐, 酷狗音乐 App去反调试