都知道做免越狱开发的人,都要把App 砸壳。在越狱环境中以插件注入App形式可以忽略。
下面以《小米有品》APP为例做简单阐述。这个是未做过任何处理的App.是从AppStore下载的,选择《小米有品》我是随便找的。
用MachOView 软件打开《小米有品》的的可执行文件 MJYP.

由于我的手机系统是13.23的所以就没有ARMV74 和fatheader 那些多余的东西了。直接就是ARM64了。
要知道一个App有没有加密就看LoadCommands里的LC_ENCRYPTION_INFO这个command就行了。如图。
当CryptID为1时,是加密状态。0是未加密状态。
CryptOffet是偏移地址。如果不是fat格式就不需要ARM64这个格式的偏移量,就是0x6A000.加密大小0x1000.
位置在MachOView里面大概

要到0x6B000 ,这里没截取到这0x6B000。
这里看不出来,直接拖到Hopper 里面看看 这里的位置
大概就这是这样的


反汇编不出来 汇编代码了。
其他位置则不受影响,能正常反汇编出正常的汇编代码:

如果影响不大的,可以拿这个来看汇编代码。
那平时那些插件是怎么解密呢。拿dumpdecrypted来说。
这个插件会先读取App的可执行文件的LC_ENCRYPTION_INFO 这个command字段,判断是否是加密的。获取加密的偏移量和加密的size。然后根据MachO格式计算未加载的出正确的偏移地址。每个App 在执行起来之后,加载到内存中一定是解密好的。
dumpdecrypted会根据app的偏移量算出在内存中的偏移地址。用文件读取的方式,掐头去尾。拿出已经解密的部分,然后拼接在加密地址前的数据的后面。在加上加密地址部分后面的数据,写到本地即可。
基本上这样不用不惯去管什么加密机制和算法。就可以简单导出未加密的可执行文件。
这上面说涉及了一些细节,如何计算偏移地址和是否是fat格式的文件的问题,就不做多余的解释了。主要为了让你能更直观这些appstore加密的部分已经证明和简单了解dumpdecrypted解密的方法。
网友评论