iOS10.2下的IPA砸壳

前言

从App Store上下载的ipa里面的二进制文件是通过加密的,class-dump和Hopper Disassembler都须要用到未加密的二进制文件,须要经过砸壳获得。网上敲壳教程仍是挺多的,几乎都差很少,但都太旧了都没有更新,例如在iOS10.2下,传统的dumpdecrypted砸壳就会有问题,须要加点其它操做才能敲成功。html

小编这里推荐一个群:691040931 里面有大量的书籍和面试资料,不少的iOS开发者都在里面交流技术

查看二进制文件是否加密

使用能够otool来查看,otool -l 二进制文件路径 | grep -B 2 cryptios

$ otool -l WeChat.app/WeChat | grep -B 2地穴
          cmd LC_ENCRYPTION_INFO
      cmdsize 20
     cryptoff 16384
    cryptsize 49463296
      cryptid 1
—
             cmd LC_ENCRYPTION_INFO_64
      cmdsize 24
     cryptoff 16384
    cryptsize 53149696
      cryptid 1
复制代码

cryptid为1时说明被加密,为0时则是未加密。能够看到微信已经被加密了,第一个对应的是较老的armv7架构,后者则是arm64架构。被加密的二进制文件直接拿起来就撸是没用的,须要先敲壳。git

准备敲壳

ssh连上的iPhone

确保iPhone和Mac在同一个网段,个人iPhone的IP地址为192.168.1.22.OpenSSH的root密码默认为alpine程序员

$ ssh root@192.168.1.22
root@192.168.1.22的密码: 
Dankal-Device-5s:~root#
复制代码

这个时候已经顺利获取了iPhone的root权限,root至关于Windows中的管理员,权限最高,可读写。github

ssh相关的问题请看以前写过的“iOS10.2 SSH链接越狱设备”,这里就很少阐述。面试

获取设备当前的进程

iPhone打开微信,后台结束其余APP进程,控制台输入ps ax 或者ps -esass

Dankal-Device-5s:~root#ps -e
PID TTY TIME CMD
  1 ??         0:26.19 / sbin / launchd
 21 ??         0:01.77 / usr / sbin / syslogd
 42 ??         0:17.65 / usr / libexec / logd
 44 ??         0:00.08 /System/Library/PrivateFrameworks/MobileSoftwareUpdate.framework/Support/softwareupdated
...
1190 ??         0:08.03 / 变种 /容器/捆绑/应用/ 46316B03 -5DC3- 4534 -8D40-A29FE9315E22 / WeChat.app /微信
...
1391 ?? ??         0:00.17 / usr / local / bin / dropbear -F -R -p 22
1392 ttys000     0:00.04 -sh
1401 ttys000     0:00.01 ps -e
1020 ttys001     0:00.02 login -fp mobile
1021 ttys001     0:00.06 -SH
复制代码

找到微信的的进程,记住PID为1190,Bundle路径/var/containers/Bundle/Application/46316B03-5DC3-4534-8D40-A29FE9315E22/WeChat.app/WeChat安全

勾住进程

Dankal-Device- 5 s: ~root #cygcript - p 1190
CY#
复制代码

看到cy#的出现就说明,成功勾住了微信的进程。bash

获取沙盒路径

经过Cycript与进程交互动态获取应用的沙盒路径,输入如下任一行代码。服务器

  • [NSHomeDirectory() stringByAppendingString:@"/Documents"]
  • NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0]
cy#[NSHomeDirectory()stringByAppendingStrin g: @ “/ Documents” ]
@ “/ var / mobile / Containers / Data / Application / E2ABB23B-EC66-4DA4-AD3E-E14E20D680B5 / Documents”
复制代码

出来显示的字符串即为沙盒品路径

dumpdecrypted.dylib

敲壳的最重要的东西就是dumpdecrypted.dylib,确保从Github上下载了最新的dumpdecrypted源码,解压后进入dumpdecrypted文件夹的跟目录,make编译dumpdecrypted.dylib。

$ cd / Users / bingo / Downloads / dumpdecrypted-master
$ make
`xcrun --sdk iphoneos  - find gcc` -Os -Wimplicit -isysroot`xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path` / System /库/框架-F`xcrun --sdk iphoneos --show-sdk-path` / System / Library / PrivateFrameworks -arch armv7 -arch armv7s -arch arm64  - c - o dumpdecrypted。o dumpdecrypted。C 
`xcrun --sdk iphoneos  - find gcc` -Os -Wimplicit -isysroot`xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path` / System /库/框架-F`xcrun --sdk iphoneos --show-sdk-path` / System / Library / PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -dynamiclib  - o dumpdecrypted.dylib dumpdecrypted。Ø

复制代码

结束后会在当前目录中生成dumpdecrypted.dylib,这里有坑,下面会说。

拷贝dumpdecrypted.dylib到沙盒路径下

scp拷贝贝文件到越狱设备的沙盒路径下,沙盒目录刚刚用Cycript动态获取到了,若是设备不支持scp或者出现问题,能够参考“让越狱设备支持scp文件传输”,或者使用iTools等工具实现文件传输,在此再也不阐述。

$ scp dumpdecrypted.dylib root@192.168.1.22:/ var / mobile / Containers / Data / Application / E2ABB23B-EC66-4DA4-AD3E-E14E20D680B5 / Documents
root@192.168.1.22的密码: 
dumpdecrypted.dylib 100%193KB 242.3KB / s 00:00
复制代码

开始敲壳 以上都是准备工做,接下来能够正式砸壳了。

dumpdecrypted.dylib的具体用法是:DYLD_INSERT_LIBRARIES=to/Path/dumpdecrypted.dylib to/bundlePath

Dankal-设备- 5个S: 〜根#CD的/ var /移动/容器/数据/应用/ E2ABB23B-EC66- 4 DA4-AD3E-E14E20D680B5 /文件
Dankal-设备- 5个S:的/ var /移动/容器/数据/应用/ E2ABB23B-EC66- 4 DA4-AD3E-E14E20D680B5 /文档根#DYLD_INSERT_LIBRARIES = dumpdecrypted.dylib “的/ var /容器/捆绑/应用/ 46316B03-5DC3 -4534-8D40-A29FE9315E22 / WeChat.app /微信”
dyld:没法加载插入的库'dumpdecrypted.dylib',由于找不到合适的图像。没有找到:
	dumpdecrypted.dyli B:所需的代码签名丢失了 “dumpdecrypted.dylib”
停止陷阱:6
复制代码

很明显砸壳失败了,这跟说好的不同!为何别人砸壳成功了,而我却砸失败了?重复试了几回都不成功。

因而开始找问题,首先怀疑个人设备的CPU架构不对,打开iTools能够明显看到是iPhone 5s,arm64,已越狱,没毛病,若是是32位处理器的话应该是越狱不成功的。

再找问题,怀疑是yalu02越狱的时候出了问题,重启再越狱了一遍,仍是同样的问题。

继续寻找,设备不支持吗?网上搜索“iPhone5s砸壳失败”,很失望,没有相关的资料,搜到的全是真的手机壳的相关问题。

最后,怀疑是越狱自己就有问题,毕竟iOS 10.2是非完美越狱。因而搜“iOS 10.2 dumpdecrypted失败”,终于摸索到相关文章,真的不容易啊,卡了一天,终于找到了解决方案。学会定位问题与使用搜索引擎对于程序员来讲仍是很重要的!

正确砸壳

dumpdecrypted对系统ios 9.3.2以上的版本砸壳失败,会报错Killed: 9解决方案

固然,咱们如今是iOS 10.2,上面的解决方案可能还有问题,最后找到正确的解决方法,就是另外下载dumpdecrypted.dylib,连接来自上面解决方案的页面下的评论。

masbog

也许一些用户须要最新的.dylib与iOS 10.2 sdk ... masbog.com/dumpdecrypt…和一些iOS 10.2教程:拥抱:

最终能找到问题所在我也感到很是神奇与幸运,为了预防站长的服务器挂掉或者连接失效,我已经将.dylib上传到了七牛云上,cdn加速下载链,以防不备之需。

使用方法

拷贝最新的dumpdecrypted.dylib到设备上的/usr/lib

$ scp dumpdecrypted.dylib root@192.168.1.22:/ usr / lib
root@192.168.1.22的密码: 
dumpdecrypted.dylib 100%193KB 410.8KB / s 00:00
复制代码

iOS 10+:

Dankal-Device- 5 s: ldid -S /usr/lib/dumpdecrypted.dylib

复制代码

最终一砸

Dankal-设备- 5个S:的/ var /移动/容器/数据/应用/ E2ABB23B-EC66- 4 DA4-AD3E-E14E20D680B5 /文档根#DYLD_INSERT_LIBRARIES = / usr / lib中/ dumpdecrypted.dylib “的/ var /容器/包/应用程序/ 46316B03-5DC3-4534-8D40-A29FE9315E22 / WeChat.app /微信”
马赫Ø解密自卸车
免责声明:此工具是 只意味着用于安全研究的目的,而不是用于应用饼干。
[+] 在内存中检测到64位ARM二进制文件。
找到[+]偏移到 cryptid :@ 0 x1000a0ca8(从0 x1000a0000)= ca8
[+]在地址00004000处找到长度为53149696字节的加密数据- 类型 1。
[+]打开/私有的/ var /容器/捆绑/应用/ 46316 B03- 5 DC3- 4534 - 8 D40-A29FE9315E22 / WeChat.app /微信为读数。
[+]阅读标题
[+]检测标题类型
[+]可执行是 一个 FAT图像-搜索为 右架构
[+]正确拱是在偏移58195968中文件
[+]开放WeChat.decrypted 用于写入。
[+]复制文件的未加密开头
[+]将解密的数据转储到文件中
[+]复制未加密的文件剩余部分
[+] 在偏移3780 ca8 处将LC_ENCRYPTION_INFO-> cryptid设置为 0
[+]关闭原始文件
[+]关闭转储文件
Dankal-设备- 5个S:的/ var /移动/容器/数据/应用/ E2ABB23B-EC66- 4 DA4-AD3E-E14E20D680B5 /文件根#
复制代码

查当作果 砸壳完毕,会自动在当前目录生成砸壳后的二进制文件WeChat.decrypted

$ ls
00000000000000000000000000000000   Ksid MMResourceMgr SafeMode.dat db.globalconfig
8 f9f003b02f320ae7f28b1250270eb48 LocalInfo.lst MMappedKV WeChat.decrypted mmupdateinfo.archive
复制代码

后话

终于砸壳完毕,说难也不难,从App Store上下载的ipa就这样被砸掉了壳,可见所谓的Apple Store给ipa穿上的战衣也不过如此,并无多么安全。敲壳后的二进制文件就能够作一些好玩的东西了,好比dump出头文件等,接下来的文章会慢慢记录。

  • 本文做者: 宾果
  • 本文连接: https //bingozb.github.io/23.html
  • 版权声明: 本博客全部文章除特别声明外,均采用麻省理工学院许可协议。转载请注明出处!

小编这里推荐一个群:691040931 里面有大量的书籍和面试资料,不少的iOS开发者都在里面交流技术