LLDB解密(砸壳)

前言

前段时间学习过利用工具来对加密的应用ipa包砸壳,dumpdecrypted砸壳Clutch砸壳frida-ios-dump砸壳,这次通过LLDB自己手动操作可执行文件,dump出解密的文件(实际上dumpdecrypted就是这个原理),简单了解砸壳的原理。

一、原理

加密内容在手机启动执行加载到内存后,是解密的,可以根据Mach-O文件记录的加密内容开始偏移值以及加密内容大小,从内存中dump出已经解密的部分,再将dump出的部分写回原执行文件,这样就得到一个完整的解密的可执行文件。

二、从越狱手机拷贝出原可执行文件

以WeChat为例


查看可执行文件路径

拷贝

查看可执行文件加密字段信息

arm64架构

了解到了这两个数据信息,就可以利用LLDB进行解密,下面选择64位架构进行解密

三、使用LLDB砸壳

参考LLDB+debugserver调试第三方应用进入lldb调试界面,并且附加到目标进程,如下:

LLDB调试

查看主模块加载地址
image.png

我们使用的物理地址为:0x0000000100014000,先记录下来,接着根据cryptoofcryptsize字段dump出解密部分,如下:
dump出解密部分

这样dump出的文件是没有Mach-O header,因此要将dump出文件Patch回原可执行文件(可以先备份原可执行文件),Patch之前先说个注意点:

注意:手机上拷贝出的Mach-O文件含有两种架构,因此我们在Patch的时候要找对架构起始偏移

从下面的Mach-O头信息可知,我们需要将dump出的文件写回70041600 + 16384 =70057984的位置

架构起始偏移

Patch操作如下(过程会有点久,耐心等待):


到这一步,原可执行文件的arm64架构文件已经解密,最后修改一下对应的加密标识cryptID即可。

提取arm64架构的文件

lipo -thin arm64 WeChat -output /Users/kinken_yuen/Desktop/WeChat_arm64

使用Mach-OView修改字段


修改加密标识字段

最后使用class-dump能够正常dump出工程的类头文件,砸壳成功。

四、脚本调用LLDB砸壳

Github:https://github.com/BlueCocoa/dumpdecrypted-lldb

python脚本dump

参考

使用lldb砸壳

推荐阅读更多精彩内容

  • 准备工作 找出程序的可执行文件路径 root# ps aux | grep Snapchat 列出所有的 Fram...
    carpond阅读 766评论 0 0
  • 逆向工具集的安装和使用 iOS 逆向工程的工具分类 检查工具如:Reveal(界面分析工具)、tcpdump(抓包...
    Yochi阅读 4,426评论 1 7
  • 准备 首先你要有一台越狱机,纯属废话!其次确认越狱机上的 SSH、SCP、Cycript 工具可用,接下来就可以开...
    jiaxw32阅读 921评论 0 1
  • App Store中下载的程序是加密后的,为了能够获取目标程序的类信息以便之后修改源码,我们需要对应用程序做一个解...
    bai_ya阅读 784评论 0 1
  • 一直都喜欢书,但真正喜欢读书是上了大学之后。每一天,每一年都有书相陪伴,那真是最好的日子。 17年寒假开始就一直在...
    神秘嘉宾HT阅读 177评论 11 2
  • 清晨,闹钟响了无数遍,小童才勉强睁开眼睛,挣扎着把自己从床上撕下来,一步一顿的走到浴室。随着水流声的响起开...
    杯子Andrea阅读 57评论 0 0
  • 这个属于经典款的面膜,蚕丝质地,我记得最火的时候韩国大街上一盒难求。比较推荐给敏感肌肤的姑娘们,秋冬用来补水镇静。...
    姚小姐Yvette阅读 161评论 0 0
  • 前两天和妈妈聊天,她说住我们家上面那家的金姐姐就要结婚了,他家里人打电话通知我们家让你爸爸到时记得回去(家乡的...
    如我小巧玲珑阅读 258评论 0 1
  • 望着你的身影的远去 剩余下的季节,已经失去了所有颜色 绝不是因为冬季的冰冷 也不是为完成一幅沉闷的水墨画屏 就像黑...
    泰安左眼皮跳跳阅读 116评论 0 3