iOS-砸壳+IDA分析

技 术 文 章 / 超 人


App Store上的应用都使用了FairPlay DRM数字版权加密保护技术
FairPlay保护的文件是具有加密容器文件。使用AES 算法进行加密。解密所需的主密钥也以加密形式存储在容器文件中。解密主密钥所需的密钥称为“用户密钥”。当用户使用iTunes、App Store登陆新设备时,该设备向Apple服务器请求授权,从而获得用户密钥。在试图使用容器文件时,存储在文件中的主密钥随后与用户密钥匹配,并且如果成功则允许使用。

例1,有些买断性游戏,当你在iPhone X设备用A账号购买了一个游戏后,想在IPad上也可以玩,只需要在IPad上登陆你购买这款游戏的A账号即可,登陆后就能获取该账号的用户密钥,也能直接从App Store直接下载已买断的游戏。下载完后更换登陆的App Store账号,你会发现依然可以玩A账号买的游戏。因为A账号的用户密钥已经存在本地了。(这是本人的分析理解,具体是这样的可能只有苹果自己知道)

从AppStore下载的应用我们在使用IDA进行分析之前,需要对.ipa进行破壳解密,使用Clutch,其原理就是在应用运行时把内存数据按照一定格式导出,实质就是去除数字验证的过程。

苹果官方的安全架构图

PS.大家可以看看苹果的官方安全保护文档,这样有利于对苹果对逆向分析

本文主要分三部分:
1.Clutch破壳
2.class-dump+ cycript + dumpdecrypted 破壳
3.IDA静态解析
4.cycript动态输入代码

首先使用Clutch破壳

  • 步骤1 下载Clutch
    他的下载中有几种,一个是可执行文件,一个是工程需要编译获得可执行文件(不知道为什么2.0.4的工程编译出来没有build.sh。我是拿可执行文件直接用的)

    Clutch

  • 步骤2 下载Mac版本的PP助手,用已经越狱的设备连接Mac电脑,然后打开PP助手 --> 工具 --> 文件管理 --> 系统文件(系统) --> usr --> bin 。把步骤1的可执行文件放入bin目录下

    放入可执行文件到越狱设备中

  • 步骤3 打开越狱设备的Cydia工具,下载Open SSH

    在Cydia的主页下拉选择Open SSH

下载OpenSSH
下载完成后确认Open SSH已经下载好了
  • 步骤4 让越狱的手机与Mac电脑连接在同一个WiFi中(可以Mac开WiFi共享给手机),获取手机连接WiFi的IP
    在WiFi中选择连接的WiFi信息
查看该WiFi的IP记录下来
  • 步骤5 打开电脑的终端
    1.输入ssh root@192.168.2.10这里的IP地址填入步骤4所记录下来的手机IP(如果连接不上,请确认设备已经安装好了Open SSH,并且设备的WiFi与Mac是同一个)
    2.输入完后会要求输入密码 这个值正常情况下都是默认为alpine,如果不是请删除OpenSSH重新安装
    3.密码输入正确后,就会发现终端的前缀已经变成我们的手机设备命了,cd到我们把Clutch可执行文件放在手机的位置 cd /usr/bin
    4.给Clutch加权限防止执行事权限不够chmod a+x Clutch
    5.查看设备当前已安装的应用Clutch -i ,我的手机远远不止安装这些软件,但是显示出来的却只有这些,具体原因不是非常清楚,有可能是安装的自己打包的ipa的原因。

    过程

  • 步骤6 在终端中输入Clutch -d 1,这里输入的数字id是我们步骤5中使用Clutch -i打印出来的应用前面的数字id,如果你要破壳其他应用,请选择对应应用的id。等几十秒就会把破解的包导出来

    导出的地址

然后用PP助手就可以在相应路径里找到对应ipa包。

注意:经过本人多次测试,发现Clutch砸壳一直失败,报的entitlements错误。似乎只有系统自带的某些app能砸壳成功。使用Clutch方案我已经放弃了。这里依然保存这不部分的内容,留给懂的大神看看也许是我哪里没有做对


砸壳方案二:class-dump+ cycript + dumpdecrypted

该方法本人已经多次测试,确认能成功砸壳
在砸壳前需要安装class-dumpdumpdecryptedcycript这个工具可以在越狱设备的cydia中下载

  • 首先下载安装class-dump。这是一个放在电脑里的工具
    1.官网下载

    进入官网点击class-dump-3.5.dmg

    2.双击下载好的class-dump-3.5.dmg,并复制其中的
    复制class-dump

    3.在Finder中选择前往 --> 前往文件夹 输入/usr/local/sbin/进入该目录,把2中复制的class-dump放进该目录(复制进去时需要输入电脑密码或者指纹)
    点击前往文件夹

    复制class-dump进去

    4.打开终端 输入 sudo chmod 777 /usr/local/sbin/class-dump给class-dump文件赋予执行权利

  • 接着在手机中安装cycript,打开越狱设备的cydia,在搜索中搜素cycript,点击更改,然后安装


    cycript
  • 接着下载安装dumpdecrypted,这是一个放在手机中的工具
    1.下载好后,双击解压

    解压后里面包含的内容

    2.打开终端 cd到解压到目录下,输入make,这样程序就会自动运行编译出dumpdecrypted.dylibdumpdecrypted.o
    运行结果

    3.一会儿会用到dumpdecrypted.dylib文件

  • 最后我们开始砸壳

步骤1.首先,在终端中用ssh连接你越狱设备(ssh是什么,请看看上面说Clutch的内容,有详细说明)

ssh连接

步骤2.接着我们查找当前设备的运行进程(可以删除设备里其他应用,只留自己要砸壳的应用运行。)在连接好ssh的终端中输入ps -e
进程id

ps.必须把你的终端放大,不然你看不完整进程的应用路径信息,就无法找到对应的app。

步骤3.找到自己想要砸壳的应用后,记录下进程id和应用路径

步骤4:在终端中输入cycript -p 1736进入该进程,这里的1736是你步骤3中记录的砸壳应用的进程id。等待直到终端输入中出现cy# 后,输入[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]打印出当前进程应用的沙盒路径,记录下打印出的沙盒路径

沙盒路径

ps.必须让越狱设备当前运行界面为该砸壳应用,否则不会出现cy#

步骤5:保存沙盒路径和应用路径

步骤6.输入exit退出 ssh连接回到电脑,然后使用终端把刚刚下载好的dumpdecrypted.dylib文件放入步骤3中记录的应用沙盒路径(是沙盒路径不是应用路径,沙盒路径有Documents)
例如:

//在终端中输入下面代码,记住scp 后的第一部分是你放在电脑中的dumpdecrypted.dylib的路径 第二部分是步骤5记录的应用沙盒地址,请替换成自己的
scp /Users/xieyujia/Desktop/ios/逆向工程/dumpdecrypted-master/dumpdecrypted.dylib root@192.168.2.10:/var/mobile/Containers/Data/Application/0EA4E809-E663-4E7B-AB91-2B7CFA2B0AB3/Documents/
把dumpdecrypted.dylib文件放入沙盒路径

步骤7:把dumpdecrypted.dylib文件放入沙盒路径后,重新连接ssh,并cd 到需要砸壳应用路径,输入

//后面的路径是应用路径 而不是沙盒路径
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/B8416315-EF7E-4464-8F7F-4C1B92CBF1AF/WeChat.app/WeChat

等待执行完成后,会在应用沙盒路径的Documents下生成一个.decrypted文件,这个就是破解后的可执行文件。利用pp助手,根据沙盒路径在pp助手中找到对应的Documents路径下的.decrypted文件。把它导出到电脑中。


.decrypted

步骤8:利用class-dump破解里面的代码,在终端中输入

//第一个路径是.decrypted文件的路径,第二个路径是导出.h文件的路径
class-dump -H /Users/xieyujia/Desktop/ios/逆向工程/WeChat.decrypted -o /Users/xieyujia/Desktop/ios/逆向工程/head
image.png

ps.如果你自己编译的工程,没有上传到AppStore 那么就没有加密,所以可以不需要砸壳,可以把步骤8中的.decrypted文件的路径改为你.app的路径。一样可以导出.h内容


这就是破壳出来的程序中的.h文件

ps.这里说明下,解析出来的.h为该应用的所有.h文件,但.h文件中包含的内容并不只有原本工程的.h内容,比如你在原工程一个类的.h中只声明公开了一个 add方法,而在.m中除了add方法的实现还有remove,push方法,那么解析出来的.h中也会包含有.m中声明的方法(包括.m中的属性变量),只是没有包含具体实现。还有,解析出来.h中不包含你在原代码中注释的内容。所以不用担心你在.h.m中写的注释被别人解析出来
ps2.比如工程中接入了第三方的静态库.framework。那么解析也会把第三方库中的.h也解析出来


IDA工具静态分析源码

    1. 需要去下载一个IDA工具,IDA原版听说要几万块,所以我用的是网上找到的破解版本
      GitHub好像出问题了,没传成功,还是发个网盘的
      链接 密码:5sm3
    1. 下载完成后会有几个文件,我们只需要解压x64_idapronm_hexarm64m_hexarmm_hexx64m_hexx86m_170914_e723c5648dc3f2f588ab8339ccf62ec0.zip文件就可以得到IDA工具使用
      解压x64_idapronm_hexarm64m_hexarmm_hexx64m_hexx86m_170914_e723c5648dc3f2f588ab8339ccf62ec0.zip
  • 3.双击解压出来的工具安装即可,安装完成后会有2个版本,我一直都用的64位版本


    IDA版本
  • 4.选择一个版本运行,然后点击new,选择自己要分析的应用(上面我们破解出来的.decrypted文件,.app文件,.ipa文件都可以选择)。然后一直点下一步OK即可,
    点击new
解析出来的汇编界面
    1. 点击F5 即可进入解析出来的源码界面(这个功能是付费功能,很多版本里都没有这个功能,我提供都版本里有这个功能,免费的)
      解析出来的源码

从这里基本就可以看出该方法源码的内容。


关于cycript动态注入代码的使用后面在写吧。网上资料很多,都是千篇一律。这部分需要深入,目前我还没深入研究,后面研究清楚了在补充。还有一个Reveal工具也不错。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 逆向工具集的安装和使用 iOS 逆向工程的工具分类 检查工具如:Reveal(界面分析工具)、tcpdump(抓包...
    Yochi阅读 5,445评论 1 5
  • 逆向工程的目的 1)分析竞品的最新研究或者产品原型(包括所用的技术,所使用的框架) 2)学术/学习目的。 3)破解...
    零度_不结冰阅读 647评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 砸壳 class-dump 搭建越狱开发环境 Theos 配置越狱开发调试的 iOS 设备 Theos 环境 动态...
    ampire_dan阅读 5,493评论 0 7
  • 睡前聊天 儿子,你怎么看待期末考试啊 妈妈,就当成平常考试啊,好好发挥,认真复习,不要太在意。 嗯,平常心!那怎样...
    孙苹阅读 98评论 0 0