iOS逆向与安全8.1:砸壳、初识Theos

砸壳

软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。

砸壳原理

  • 应用加壳(加密)
    提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)。本质为dump出内存中的二进制文件
  • 应用砸壳(解密)
  1. 静态砸壳
    静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术

2.动态砸壳
动态砸壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。

  • iOS应用运行原理
应用运行原理

砸壳工具

1、Clutch

Clutch是由KJCracks开发的一款开源砸壳工具。工具支持iPhone、iPod Touch、iPad,该工具需要使用iOS8.0以上的越狱手机应用。

Clutch使用

安装

使用

  • 映射端口


    image.png
  • 拷贝工具到手机 放在usr/bin


    拷贝工具到手机
  • 列出可以砸壳的应用列表 $Clutch -i


    image.png
  • 砸壳 $Clutch –d 应用ID


    砸壳
完成

2、dumpdecrypted

Github开源工具。 dumpdecrypted这个工具就是通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳。

安装

生成动态库
  • 远程拷贝到手机


    image.png
  • 通过DYLD_INSERT_LIBRARIES 环境变量插入动态库执行

DYLD_INSERT_LIBRARIES脱壳

DYLD_INSERT_LIBRARIES 脱壳得到可行性文件 xxxx.decrypted 文件

DYLD_INSERT_LIBRARIES 使用
查看当前进程

ps -A
image.png

插入进程
DYLD_INSERT_LIBRARIES=动态库文件 进程

DYLD_INSERT_LIBRARIES=xxxx.framework/xxxx /var/mobile/Containers/Bundle/Application/XXXXX.app/XXXMacho
进入执行

3、frida-ios-dump

该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件。

安装frida

Mac电脑安装方式:

查看python版本,Mac都是自带的


image.png

查看pip版本


image.png

安装frida $sudo pip install frida-tools


image.png

*目录不归当前用户所有。请检查该目录的权限和所有者.需要sudo的-H标志。
sudo -H 。set-home 将 HOME 变量设为目标用户的主目录
$sudo-H pip install frida-tools

  • Uninstalling a distutils installed project (six) $sudo pip install frida –upgrade –ignore-installed six
安装完成查看应用

iOS安装方式:
1、添加源 https://build.frida.re

2、安装Frid

image.png
  • 安装完成查看应用
    frida-ps -U 查看usb设备应用


    image.png
  • 附加到进程

frida -U XXX
frida -U 微信 附加到微信进程

image.png
  • 查看进程对象
$ ObjC 
image.png
image.png

Mac配置ios-dump
下载脚本
$sudo git clone https://github.com/AloneMonkey/frida-ios-dump
dump.py配置登录

vi dump.py
dump.py配置登录

进入目录安装依赖

$sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt –upgrade

有可能报错。
frida-tools 1.2.2 has requirement prompt-toolkit<2.0.0,>=0.57, but you'll have prompt-toolkit 2.0.7 which is incompatible.
降低 prompt-toolkit 版本
卸载


$ sudo pip uninstall prompt-toolkit

安装指定版本

$ sudo pip install prompt-toolkit==1.0.6

dump.py 砸壳

登录后 dump.py砸壳
./dump.py 应用名或者bundle id

./dump.py 微信

查看砸壳的文件


image.png

配置全局运行环境
复制frida文件到LHShell

编辑脚本

vi dumpIPA.sh 

使用
sh dumpIPA.sh XXX应用

sh  dumpIPA.sh 微信
image.png
image.png

4 LLDB砸壳 手动砸壳

  • 读取Macho信息
otool -l | Wechat | grep cryp

cryptoff 加密开始位置
cryptsize 加密模块
cryptid 1 加密算法 标识
Macho加密信息

原理:Macho header + lldb解密的Macho加密部分,即为完整的解密的Macho文件

  • 连接手机
  • 启动debugserver
  • 启动lldb
  • 连接 debugserver 到服务
  • image list 找到Macho首地址
  • 读取 --fore以字节读取, --outfile 拷贝, 到./目录下,解密过的二进制文件存储为 decrpyted.bin ,--binary 二进制文件,--count个数(cryptsize),地址macho头地址+ 加密开始地址(cryptoff)

memory read --fore --outfile 目标路劲 --binary --count 数量 开始地址+加密开始偏移地址

memory read --fore --outfile ./decrpyted.bin --binary --count 10000  0x0000011323+1230
解密开始

解密完成

完成后,在./目录下,decrpyted.bin文件即为解密后的Macho加密部分文件,


完成目录
  • 写入文件 dd seek=起始位置 bs=1写入方式,写入大小,1:一个字节一个字节写入, convc:转换配置,notrunc:不截取,只写入指定位置和大小,其余部分不变。if=./decrpyted.bin 要写入的文件.of=./Wechat 被写入输出文件
    注意:被写入的文件为原始未解密的Wechat Macho文件,保证文件不会出错
    dd seek=起始位置 bs=写入方式 convc=转换配置 if=写入文件 of=被写入输出文件
dd seek=cryptoff  bs=1 convc=notrunc if=./decrpyted.bin of=./Wechat
写入完成

写入后查看macho文件,依然显示加密


写入完成查看macho文件

此时,实际已经解密了,只是加密标识字段cryptid未变而已,手动改成0即可


image.png

注意:macho文件加密后加密前文件一样大,主要因为内核加载位置和加载大小,所以采用的加密方式不会改变文件大小

Cycript使用

解决
.inputrc 文件登录手机后的不能输入中文的问题,运行向终端输入中文

vi .inputrc

拷贝到手机

scp -p port .inputrc root@127.0.0.1:~

登录手机使用vim
安装Vi IMproved(vim) 和 adv-cmds(命名行支持工具)插件 以及Cycript(使用Cycript)插件

Cycript 使用

登录 ps -A查看进程,然后用cycript -p 附加到应用进程

cycript -p 微信
cycript附加成功

导入cy文件
登录手机后

cd /usr/bin

拷贝cy脚本(封装的cycript命名脚本)到/usr/bin/cycript0.9 目录下


image.png

然后登录手机 cycript附加应用 引入脚本即可


image.png

为了避免命令重复,可以cy脚本放到/usr/bin/cycript0.9.com文件夹下


image.png

Theos

Theos,强大越狱开发工具。最初由DHowett进行开发,后面有Adam Demasi 维护并加了很多全新功能。

官网https://github.com/theos/theos
安装方法https://github.com/theos/theos/wiki/Installation-macOS

安装目录 ~/theos 可以自己修改
echo "export THEOS=~/theos" >> ~/.profile

使用
执行
cd 到Theos安装目录下

$ THEOS/bin/nic.pl 
image.png

配置全局环境变量 配置到PATH中
base_profile中修改


image.png

theos创建项目 写插件

  • nic.pl
nic.pl

  • 选择twaek插件
  • 输入包名
  • 输入依赖包名


    创建twaek工程

makefile 配置连接ip和端口

makefile 配置连接ip和端口

在xm文件中写插件实现

make编译 写完make编译


image.png

打包make package
安装 make install

或者 make package; make install

总结

011--越狱砸壳

  • 应用砸壳:一般在客户端的应用为了防止别人反编译会对可执行文件进行加密保护(加壳),我们的砸壳就是解密的过程
    • 静态砸壳
      • 知道了应用的加密算法和逻辑。在不需要运行应用的情况下,直接使用工具进行解密。这种方案难度很大,成本高。加密算法一旦改变,解密工具就失效。
    • 动态砸壳
      • 在应用启动之后,从内存中找到应用的位置,导出内存中的数据。因为应用能够运行就必然被CPU读取。二CPU也只能读取解密之后的可执行文件。所以导出内存中的数据就是解密之后的数据。
    • 应用运行原理
      • 加密应用从磁盘载入内存的过程中,有内核调用解密程序进行解密。
      • 解密之后的可执行文件由DYLD载入内存。
  • Clutch(命令行工具)
    • Clutch -i 列出可砸应用
    • Clutch -d 应用编号、BundleID
    • 导出的是ipa包!
  • dumpdcrypted(.dylib库)
    • 通过 DYLD_INSERT_LIBRARIES环境变量,插入动态库,载入某个应用执行动态库代码进行砸壳。
    • 导出的 MachO
  • frida-ios-dump(利用frida加载脚本砸壳工具)
    • 安装frida。Mac 和 iPhone。
    • 下载frida-ios-dump 脚本工具
    • 执行dump.py脚本 参数是应用名称 : 导出的是ipa包
  • Cycript
    • 越狱手机安装Cycript插件,依赖插件 adv-cmds
    • 依附程序
      • cycript -p 进程ID/名称
    • cy文件路径
      • /usr/lib/cycript0.9 目录
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容

  • 概述 软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。 砸壳原理 应用加壳(加密)提交给...
    没八阿哥的程序阅读 7,081评论 0 2
  • 砸壳原理 砸壳顾名思义就是对软件进行逆向操作,对已加密的软件进行解密,从而获取真实软件源码。App Store下载...
    Hanfank阅读 19,198评论 7 12
  • 下载的非越狱应用都是经过加密的,加密后可以保证一定的安全性,但是对于逆向开发的人来说,加密应用无法进行静态分析,也...
    绿叶竹林阅读 1,234评论 0 2
  • 一、概述 从App Store下载的应用是加过壳的,加壳的应用是不能直接执行的,手机之所以能够使用下载的app,是...
    heart_领阅读 1,221评论 0 2
  • 进行iOS逆向开发首先需要下载相关的工具。 准备工作 越狱手机(例如我的:iPhone 4s,系统8.4.1)越狱...
    荒漠现甘泉阅读 3,335评论 0 4