首页 06-脱壳
文章
取消

06-脱壳

加壳

  • .ipa –> AppStore –> 安装到手机。在上传到AppStore时对可执行文件进行了加壳操作,也就是进行了加密。
    • iPhone上安装的App不是所有都被加密的,这取决于App的安装来源,只有是AppStore来源的才是加密的。
  • 什么是加壳?
    • 利用特殊的算法,对可执行文件的编码进行改变(比如压缩、解密),以达到保护程序代码的目的。
1
2
3
4
5
6
									执行	
加壳前  可执行文件	-----> 		内存(可执行文件)
															 执行
加壳后	 壳程序(可执行文件(已加密)) ----->	内存(壳程序(可执行文件(已加密)))  
 解密
-----> 内存(壳程序(可执行文件))

脱壳

  • 什么是脱壳
    • 摘掉壳程序,将未加密的可执行文件还原出来(砸壳)
    • 脱壳主要有两种方法: 硬脱壳、动态脱壳
1
2
3
4
5
6
															执行解密算法
硬脱壳	 壳程序(可执行文件(已加密)) -------->	可执行文件
															  执行
动态脱壳 壳程序(可执行文件(已加密)) ----->	内存(壳程序(可执行文件(已加密))) 
从内存中导出
-------->	可执行文件

脱壳工具

验证脱壳

  • 查看Load Commands -> LC_ENCRYPTION_INFO ->Crypt ID的值,0代表未加密。
  • 通过otool命令行也可以: otool -l 可执行文件 | grep crypt

工具使用

  • Clutch下载Clutch,直接下载Clutch 2.0.4就可以。

    • 将Clutch直接拖到/usr/bin文件夹,或者用命令行
    1
    2
    
    // Clutch当前路径
    scp -P 10010 Clutch root@localhost:/usr/bin/
    

    注意:

    如果在iPhone上终端执行Clutch出现

    -sh: /usr/bin/Clutch: Permission denied 报错时,就是没有权限,可以使用下列命令给Clutch执行权限。

    chmod +x /usr/bin/Clutch 获取权限

    • 列出已安装的App
      • Clutch -i
    • 输入App序号或者Bundle Id进行脱壳操作
      • Clutch -d App序号或者Bundle Id
    • 脱壳成功后会生成一个ipa文件
      • 位置: /private/var/mobile/Documents/Dumped/xxx
    • Dumped文件下载到Mac中:
      • scp -r root@192.168.3.20:/private/var/mobile/Documents/Dumped/
  • dumpdecrypted

    • 下载dumpdecrypted源代码目录下执行make指令进行编译,获得dylib动态库文件

    • 将dylib文件拷贝到iPhone上(如果是root用户,建议放/var/root目录)

      • 终端进入dylib所在目录下

      • 使用环境变量DYLID_INSERT_LIBRARIES将dylib注入到需要脱壳的可执行文件(可执行文件可以通过ps -A(查看进程)查看获取)

        DYLID_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径

      1
      2
      3
      4
      
      // 查看App路径
      $ ps -A
      // 脱壳
      $ DYLID_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/5A929474-CD06-4A8E-A759-F8AAD1EE5044/ting.app/ting
      
    • .decrypted文件就是脱壳后的可执行文件

    • frida-ios-dump

本文由作者按照 CC BY 4.0 进行授权

05-动态库缓存

07-Hook