iOS逆向与安全8.1:砸壳、初识Theos 您所在的位置:网站首页 ios逆向开发是什么意思 iOS逆向与安全8.1:砸壳、初识Theos

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

2024-06-17 04:20| 来源: 网络整理| 查看: 265

砸壳

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

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

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

iOS应用运行原理 应用运行原理 砸壳工具 1、Clutch

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

Clutch使用

安装

官网: https://github.com/KJCracks/Clutch

找到发布版本

下载最新的

image.png

使用

映射端口

image.png

拷贝工具到手机 放在usr/bin

拷贝工具到手机

列出可以砸壳的应用列表 $Clutch -i

image.png

砸壳 $Clutch –d 应用ID

砸壳 完成 2、dumpdecrypted

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

安装

官网 :https://github.com/stefanesser/dumpdecrypted 直接Git Clone

通过Make 编译生成动态库

Make 编译 生成动态库

远程拷贝到手机

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=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 [email protected]:~

登录手机使用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 目录


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有