乐于分享
好东西不私藏

【iOS 原创】iOS抖音App越狱检测分析

本文最后更新于2026-01-02,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

【iOS 原创】iOS抖音App越狱检测分析

作者论坛账号lichao890427

一、准备工作

工具
在本文中,用到的工具有IDA Pro,Frida。其他工具安装方式请自行查阅,这里简单说下frida

Frida是跨平台的函数级跟踪工具,可以提高分析效率。利用该工具可以很方便的调用进程内部函数;在实际分析过程中,lldb一般用来定位反调试,崩溃和指令级别的分析,而frida主要用作函数级别的分析,如修改函数输入参数和返回值,打印调用栈,跟踪调用的API流,用作逆向分析和渗透测试再好不过。

Frida安装分两部分:
1. 在越狱机从cydia源build.frida.re安装frida-server,安装成功后便会自动在手机上以daemon执行server

2. PC上用pip安装frida-tools即可。注意win上容易安装失败,即使成功也可能出现缺少dll的问题,该如何解决呢?可以在参考编译好的版本:https://pypi.org/project/frida/#files。例如Windows x64下使用python3.7安装frida,就不需要编译安装,也不会出现各种错。

脱壳
首先我们进行静态分析,第一步要脱壳,常见的工具有dump-decrypted/frida-ios-dump/clutch等工具。先来看看App哪些模块需要脱壳,从下图可以看到App内部模块有Aweme,AwemeDylib和两个第三方Rtc库,对这两个动态库进行脱壳,然后拖到IDA分析。

二、越狱检测分析
抖音二进制比较大,两个二进制的IDA分析加上跑add_xref_for_macho.py要半小时以上。如此该如何寻找呢,由浅入深可以采用如下方法:

  • 在IDA字符串窗口和函数窗口查找jail,jeil,jb,break,cydia,substrate,bash,apt,ssh等关键字

  • 使用fiddler等抓包工具捕获app所有网络请求,在url和body中查找jail,jeil,jb,break等关键字。如果body加密则需要跟踪和逆向。(网络请求定位到代码逻辑,可以从跟踪URLWithString甚至connect开始)

  • 使用frida对常用越狱检测函数对应的系统调用进行跟踪access,creat,faccessatgetxattr,getxattr,link,listxattr,lstat,open,opendir,readlink,realpath,stat,statfs,symlink,这样可以检测到所有函数级

  • 在IDA汇编中搜索SVC指令,这样能检测出指令级系统调用。

1. 初步检测
首先找到比较明显的痕迹,例如函数名字符串,检测到得到如下函数:

[ANSMetadata computeIsJailbroken];  

[ASSStaticInfoCollector checkJB)];  

[ASSStaticInfoCollectorOpen checkJB]  

[AWECloudJailBreakUtility jailbroken];  

[AWEYAMInfoHelper isJailBroken]  

[BDADeviceHelper isJailBroken];  

[BDLogDeviceHelper isJailBroken]  

[IESLiveDeviceInfo isJailBroken]  

[HMDCrashBinaryImage isJailBroken];  

[HMDInfo isJailBroken]  

[MobClick isJailbroken]  

[TTAdSplashDeviceHelper isJailBroken];  

[TTInstallDeviceHelper isJailBroken]  

[UAConveniece deviceWasJailed];  

[UIDevice btd_isJailBroken]  

[UMANProtocolData isDeviceJailBreak]  

[WXOMTAHelper isJB]

进行分析以后可以找到如下检测逻辑:

  • 文件系统检测

      /bin/bash

     /Applications/Cydia.app

     /Library/MobileSubstrate/MobileSubstrate.dylib

     /user/Applictations

     /user/Continers/Bundle/Application

     /usr/sbin/sshd

     /etc/apt

     /Applications/RockApp.app,

     /Applications/Icy.app,

     /usr/sbin/sshd,

     /usr/bin/sshd,

     /usr/libexec/sftp-server,

     /Applications/WinterBoard.app,

     /Applications/SBSettings.app,

     /Applications/MxTube.app,

     /Applications/IntelliScreen.app,

     /Library/MobileSubstrate/DynamicLibraries/Veency.plist,

     /Library/MobileSubstrate/DynamicLibraries/LiveClock.plist,

     /private/var/lib/apt,

     /private/var/stash,

     /private/{uuid}可写

     /System/Library/LaunchDaemons/com.ikey.bbot.plist,

     /System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist,

     /private/var/tmp/cydia.log,

     /private/var/lib/cydia,

     /etc/clutch.conf,

     /var/cache/clutch.plist,

     /etc/clutch_cracked.plist,

     /var/cache/clutch_cracked.plist,

     /var/lib/clutch/overdrive.dylib,

     /var/root/Documents/Cracked/

     /etc/fstab 分区检测

  • 沙盒完整性检测  system函数

  • 环境变量检测  使用environ检测MobileSubstrate环境变量

  • mmap检测

  • 进程检测 MobileCydia  Cydia  afpd

  • schema检测 cydia://

2. 深度检测
使用frida工具跟踪前面提到的系统调用。插句题外话,frida的-f参数目前是不能用的,也就是不能以-f启动app(其实老一些的iOS是可以的),所以只能附加进程进行跟踪,然而frida在附加进程的时候会有几秒延迟导致App初始化时执行的函数和数据包无法跟踪到,怎么解决呢?简单做法是写个tweak,在%ctor里sleep几秒就可以了。跟踪代码可以参考我git中的antijailbreak.js代码。得到如下结果:

此时可以看到果然AwemeDylib是有猫腻的,只不过把OC函数名进行了混淆,同时存在字符串加密,那么接下来就是分析这些混淆名的函数,最终发现几个与越狱检测有关的函数:

经过分析可知,App存在SVC指令级别的越狱检测并封装成函数__libc_do_sycall,同时也调用了syscall函数来隐藏api调用。通过跟踪__libc_do_sycall和iOS系统调用号,可以发现的系统调用有:        

read/close/getpid/getppid/open/sysctl/stat64/getdirentries64,

根据该结果进行二次跟踪,又会得到一些检测文件,未防止有遗漏,可以将data段内存dump下来查看解密后的敏感路径

/Library/TweakInject

/Library/LaunchDaemons/

/Library/MobileSubstrate/DynamicLibraries

/Library/MobileSubstrate/MobileSubstrate.dylib

/Applications/iGameGuardian.app

/Applications/GamePlayer.app

经过几番折腾,最终就可以得到所有越狱检测逻辑了。

www.52pojie.cn

pojie_52

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 【iOS 原创】iOS抖音App越狱检测分析

评论 抢沙发

1 + 1 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮