美文网首页iOS进阶
可执行文件的脱壳

可执行文件的脱壳

作者: Miss_QL | 来源:发表于2020-04-24 23:44 被阅读0次

    大家知道,通常iOS中下载的ipa包可以通过解压缩,最后获得可执行的Mach-O文件。

    一、判断可执行文件是否被加密
    方法1:通过终端命令来查看
    otool -l QQ | grep crypt

    //class-dump出来的qqHeaders文件夹中头文件如果只有一个,通常也是被加密的
    class-dump -H QQ -o qqHeaders
    //输出的cryptid如果为0则未加密,为1则被加密
    otool -l QQ | grep crypt
    
    终端判断是否被加密.png

    方法2:通过MachOView来查看

    MachOView判断是否被加密.png

    方法3:Hopper Disassembler解析不出来的,也是被加密的。

    二、脱壳
    一旦发现可执行文件是被加密过的,那就需要先进行脱壳操作,将原始的可执行文件给剥离出来。通常我们采用的都是硬脱壳方式,即暴力脱壳,也不需要将程序运行到内存中再进行操作。
    硬脱壳是有工具的,一般用Clutch工具和dumpdecrypted工具,接下来我们逐个解释。

    1、Clutch工具
    Clutch下载地址
    通过Clutch可以将装在手机上的应用进行脱壳操作,所以需要安装到手机上。为了方便在终端上直接操作,通常会将Clutch工具拖到/usr/bin目录下(建议给下载下来的Clutch后缀版本号去掉)。如果登录到手机后,在终端敲入Clutch出现权限不足的问题,可以给其添加可执行的权限chmod +x /usr/bin/Clutch即可。

    Clutch操作.png

    如上图箭头所指,成功脱壳后,会自动将文件打包成一个.ipa文件,终端里也会输出这个.ipa文件的具体路径,导出到电脑上即可使用 。这个.ipa里面包含的就是已经解密成功的可执行文件,即脱壳操作完成。我们可以通过前面所说的otool指令来验证一下,查看这个.ipa的crypt值是否真的为0。

    验证脱壳结果.png

    有图有真相,我没有胡说哈😁

    2、dumpdecrypted工具
    dumpdecrypted下载地址

    下载的dumpdecrypted文件.png

    (1)首先将dumpdecrypted.c编译成动态库
    进入dumpdecrypted.c文件所在的目录,终端输入make指令进行编译,会自动执行其目录中的Makefile文件内部的指令,生成对应的动态库文件

    动态库生成.png

    (2)将生成的dumpdecrypted.dylib动态库文件拷贝到iPhone上(如果是root用户,建议放到/var/root目录)

    拷贝动态库文件.png

    (3)终端进入dumpdecrypted.dylib所在的目录,使用环境变量DYLD_INSERT_LIBRARIES将动态库注入到需要脱壳的可执行文件中(可执行文件的路径可以通过ps -A查看获取)
    具体操作命令:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径

    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib "/var/mobile/Containers/Bundle/Application/5A97A551-4E9B-4E57-B065-E1DC913B1FC9/Jiu_Kuai_Jiu copy.app/Jiu_Kuai_Jiu copy"
    

    当前文件/var/root下新生成的Jiu_Kuai_Jiu copy.decrypted文件就是脱壳后的可执行文件,用otool指令验证一下就知道了。

    相关文章

      网友评论

        本文标题:可执行文件的脱壳

        本文链接:https://www.haomeiwen.com/subject/ffjfwhtx.html