iOS加壳脱壳

/ 0评 / 0

认识加壳脱壳

加壳

加壳就是利用特殊的算法,对执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目的。

我们通过开发者账号将 APP 上传到 App Store,苹果会对我们的 APP 的可执行文件进行加壳操作。

脱壳

脱壳就是摘掉壳程序,将未加密的可执行文件还原出来(也称砸壳)。

脱壳主要有2种方法:硬脱壳、动态脱壳。

如何验证可执行文件是否加壳

可以通过 otool 命令或者 MachOView 工具来查看 LC_ENCRYPTION_INFO_XX 中的 Crypt ID 的值,这个值表示使用了哪种加壳算法。如果为 0 ,表示未加壳,我这个可执行文件是从 App Store 下载安装的,显示 1 。

使用 otool 命令:

otool -l Aweme | grep crypt
     cryptoff 16384
    cryptsize 4096
      cryptid 1

或者使用 MachOView 工具:

iOS中的脱壳工具

flexdecrypt

下载最新的 release 版本的可执行文件,并导入手机 /usr/bin 目录下。

下载地址:https://github.com/JohnCoates/flexdecrypt

通过 SSH 登录我们的手机,执行 flexdecrypt 命令:

iPhone-X:~ root# flexdecrypt
-sh: /usr/bin/flexdecrypt: Permission denied

如果提示没有权限,则给文件添加执行权限:

chmod +x /usr/bin/flexdecrypt

再次执行 flexdecrypt 命令,显示以下内容则安装成功:

iPhone-X:~ root# flexdecrypt
Error: Missing expected argument '<file>'

OVERVIEW: A tool for decrypting apps and Mach-O binaries. Based on the Flex 3
jailbreak app's source code.

USAGE: flex-decrypt <subcommand>

OPTIONS:
  --version               Show the version.
  -h, --help              Show help information.

SUBCOMMANDS:
  file (default)          Decrypt file.

  See 'flex-decrypt help <subcommand>' for detailed help.

通过 ps 命令列出正在运行的进程,找到我们想要脱壳的 APP,比如我们这里要脱壳微信:

iPhone-X:~ root# ps -A
  PID TTY           TIME CMD
33225 ??         0:00.51 /var/containers/Bundle/Application/545F8F3E-DFC3-4AC3-A2E5-7F112ED4D5CD/WeChat.app/WeChat
32841 ttys000    0:00.25 -sh
33226 ttys000    0:00.01 ps -A

对微信 APP 进行脱壳操作,成功则可以得到脱壳后的可执行文件的路径:

iPhone-X:~ root# flexdecrypt /var/containers/Bundle/Application/545F8F3E-DFC3-4AC3-A2E5-7F112ED4D5CD/WeChat.app/WeChat
Wrote decrypted image to /tmp/WeChat

查看脱壳后的可执行文件的 cryptid ,则可验证脱壳成功:

otool -l Wechat | grep crypt
     cryptoff 16384
    cryptsize 178356224
      cryptid 0

MJAppTools命令行工具

处理 iOS APP 信息的命令行工具,可以方便的列出和搜索手机上的 APP 的信息,包括:

下载地址:https://github.com/CoderMJLee/MJAppTools

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注