iOS应用脱壳(解密)的几种方式

我们日常开发提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)

脱壳原理:从内存中dump出MachO

一、Clutch

由KJCracks开发的一款开源砸壳工具。

具体操作

1、使用Clutch,下载最新的release版本,可得到一个名为Clutch-2.0.4的胖二进制文件。
2、通过usb登录越狱设备。
3、通过命令scp -P 12345 Clutch-2.0.4 root@localhost:/usr/bin将其拷贝到越狱设备的指定目录下。
可通过mv Clutch-2.0.4 Clutch对其重命名。

4、查看Clutch的可执行权限。没有的话就chmod +x Clutch添加权限即可。
5、进入到越狱设备的命令行操作界面。通过Clutch命令可查看相关命令帮助信息。

Dyoung5s:~ root# pwd
/var/root
Dyoung5s:~ root# Clutch
Usage: Clutch [OPTIONS]
-b --binary-dump <value> Only dump binary files from specified bundleID
-d --dump <value>        Dump specified bundleID into .ipa file
-i --print-installed     Print installed applications
   --clean               Clean /var/tmp/clutch directory
   --version             Display version and exit
-? --help                Display this help and exit
-n --no-color            Print with colors disabled

6、Clutch -i 显示可砸壳的应用列表。

Dyoung5s:~ root# Clutch -i
Installed apps:
1:   微博国际版 <com.weibo.international>
2:   淘宝-双十二购物,移动生活社区 <com.taobao.taobao4iphone>
3:   今日头条极速版 <com.ss.iphone.article.lite>
4:   QQ <com.tencent.mqq>
5:   DingTalk <com.laiwang.DingTalk>
6:   酷狗音乐-就是歌多 <com.kugou.kugou1002>
7:   抖音短视频 <com.ss.iphone.ugc.Aweme>
8:   爱思助手 <com.diary.mood>

7、Clutch -d 4选择要砸壳的应用,并进行砸壳,成功后有如下提示。将其拷贝出来即可。我们也可以通过otool -l查看其cryptid字段以验证是否砸壳成功。

二、dumpdecrypted

通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳。

1、下载dumpdecrypted,并通过make命令编译生成dylib库。


2、通过命令scp -P 12345 dumpdecrypted.dylib root@localhost:~/将动态库拷贝越狱设备的指定目录。

3、通过ps -A查看当前进程,并通过如下命令将其动态库插入到指定进程中。即可生成对应进程应用的MachO文件。

//后面加上的进程路径。
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/A8CC18F5-9213-482E-B145-C36EFE9ACED0/DingTalk.app/DingTalk

三、frida-ios-dump

安装

1、下载pip

sudo easy_install pip

2、通过pip下载frida_tools

sudo -H pip install frida_tools
//如果报下图中的错误则更换为另外一条命令。
sudo pip install six --upgrade --ignore-installed six

3、直接clonefrida-ios-dump到本地目录,进入目录可发现dump.py脚本文件。

4、修改dump.py文件中的如下信息,确保与越狱设备信息匹配。

5、在越狱设备中添加https://build.frida.re源,并且安装Frida插件.

dump应用

将脱壳应用在设备上置于运行状态。进入脚本所在文件夹,通过./dump.py 微信便可成功脱壳应用。成功后会在执行终端命令的地方生成ipa包。

以上dump时的操作可写成脚本,将frida-ios-dump文件夹放置sh脚本文件的同级目录中。编写脚本,并配置环境变量即可。

//脚本内容:
dump.py的路径 $1
遇到的一些坑:

1、No module named xxx。 通过pip install --user xxx下载即可。

2、from scp import xxx,同上执行pip install --user xxx即可。

3、生成ipa,存放到脚本文件所在文件夹时没有写的权限。可直接对文件夹执行sudo chmod -R 777 文件夹路径即可。

四、lldb手动dump

准备

1、在手机中配置好debugserver
2、通过以下命令导出需要dump应用的可执行文件到当前路径。xxxx代表应用进程路径。

scp -P 12345 root@localhost:xxxx ./

3、查看瘦身后的可执行文件的加密信息。并记录。

●  otool -l Aweme_arm64 | grep cry
     cryptoff 16384
    cryptsize 52527104
      cryptid 1

分析:
cryptoff:指加密文件的头所对应的偏移。这个数字之前代表着可执行文件的header。
cryptsize: 加密的数据长度,我们需要把这段时间拷贝出来。

实操

1、开启debugserver服务,依附到我们想要dump应用的进程中。

debugserver *:9393 -a Aweme

2、电脑进入lldb调试环境,连接到对应的debugserver端口。

process connect [connect://localhost:9393](connect://localhost:9393)

3、通过image list指令拿到可执行文件的头地址,加上之前的cryptoff得到需要拷贝数据的起始地址。

4、按字节读取内存中的可执行文件,并拷贝到电脑。(耗时动作)

//--force:按字节读取。
//0x00000001000c4000+16384:需要拷贝内容的起始地址。
//52527104:需要拷贝内容的大小。
//./decrypted.bin : 在当前目录下生成一个名为decrypted.bin的二进制包。
memory read --force --outfile ./decrypted.bin --binary --count 52527104 0x00000001000c4000+16384

5、将二进制文件包替换之前拷贝出来的可执行文件中的对应部分,得到一个新的可执行文件。

//dd:用指定大小的文件写到另一个文件当中。
//bs:一个一个字节写入
//conv:指定转换文件的方式。
dd seek=16384 bs=1 conv=notrunc if=./decrypted.bin of=./Aweme_arm64

6、通过otool -l查看新的可执行文件,得知cryptid仍为1,这里是因为我们并没有对header文件作修改,所以字段的值仍保持之前加密的键值。但是可执行文件的内容却被我们解密了的。可以通过class-dump验证。

7、通过Mach0View 修改cryptid的值为0。如果不修改class-dump会不成功。因为这个工具首先会拿到header获取cryptid的值,如果是已加密的话就会放弃后面的dump工作了。

8、通过class-dump -H Aweme_arm64 -o ./AwemeHeaders能导出应用的头文件,便可证明lldb手动脱壳成功。

补充

frida_tools的一些使用

1、配置端口映射。
通过frida-ps列出当前应用进程。
通过usb连接好手机后,通过frida-ps -U列出usb设备的应用进程。


2、通过frida -U 微信附加进程到微信。

3、执行ObjC可拿到附加进程应用的所有Object-C对象。

插入自定义动态库到指定应用

通过这样的操作,进程没有被污染,在以后的每次执行时候不会执行我们所插入的动态库的方法。这里只相当于一次性插入。上文的dumpdecrypted便是用到了这样的原理。

1、使用Xcode生成framework文件。通过以下命令拷贝到越狱设备中。

scp -r -P 12345 DyInsert.framework/ root@localhost:~/

2、通过以下命令将动态库插入到指定进程即可。

DYLD_INSERT_LIBRARIES=DyInsert.framework/DyInsert    /var/mobile/Containers/Bundle/Application/4560ADA4-9AE4-4E9D-BE84-ABF666B12A7A/WeChat.app/WeChat

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

推荐阅读更多精彩内容

  • 概述 软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。 砸壳原理 应用加壳(加密)提交给...
    没八阿哥的程序阅读 7,073评论 0 2
  • 应用程序加载过程 对于诸多逆向爱好者来说,给一个app脱壳是一项必做的事情。基于安全性的考虑,苹果对上架到apps...
    欧阳大哥2013阅读 4,047评论 10 37
  • 逆向工程的目的 1)分析竞品的最新研究或者产品原型(包括所用的技术,所使用的框架)2)学术/学习目的。3)破解应用...
    90后的思维阅读 6,938评论 3 14
  • mvn项目运行失败的时候,cmd进入当前项目路径根目录,运行clean命令 mvn clean package 空...
    月光在心中阅读 264评论 0 0
  • 读小学那会总喜欢去周末去乡下田野里抓野兔野鸡这些野味,然而有一天晚上两个同村的小伙伴喊我夜里去小树林里抓野鸡的时候...
    老槐树下酣睡的猫阅读 698评论 0 0