iOS逆向与安全8.1:砸壳、初识Theos | 您所在的位置:网站首页 › ios逆向开发是什么意思 › iOS逆向与安全8.1:砸壳、初识Theos |
砸壳
软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。 砸壳原理 应用加壳(加密) 提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)。本质为dump出内存中的二进制文件 应用砸壳(解密) 静态砸壳 静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术2.动态砸壳 动态砸壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。 iOS应用运行原理 应用运行原理 砸壳工具 1、ClutchClutch是由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、dumpdecryptedGithub开源工具。 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文件。 安装fridaMac电脑安装方式: 查看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.pngMac配置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.6dump.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 TheosTheos,强大越狱开发工具。最初由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.pngtheos创建项目 写插件 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 实验室设备网 版权所有 |