背景:从App Store下载的iOS应用是经过platform加过壳的,从xx助手等下载的应用大部分是没有经过加密的,在进行脱壳之前需先进行加密判断

环境:Mac、Linux

工具:otool、(---无---)

mac:查看应用包含哪些架构:

> file WeChat.app/WeChat
WeChat.app/WeChat: Mach-O universal binary with 2 architectures
WeChat.app/WeChat (for architecture armv7):    Mach-O executable arm
WeChat.app/WeChat (for architecture arm64):    Mach-O 64-bit executable

可以看到微信包含两个架构,armv7和arm64;理论上只要把最老的架构解密就可以了,因为新的cpu会兼容老的架构。

Armv6、armv7、armv7s、arm64都是arm处理器的指令集,所有指令集原则上都是向下兼容的,如iPhone4S的CPU默认指令集为armv7指令集,但它同时也兼容armv6指令集,只是使用armv6指令集时无法充分发挥其性能,即无法使用armv7指令集中的新特性,同理,iPhone5的处理器标配armv7s指令集,同时也支持armv7指令集,只是无法进行相关的性能优化,从而导致程序的执行效率没那么高。

Architecture : 指你想支持的指令集。Valid architectures : 指即将编译的指令集。Build Active Architecture Only : 是否只编译当前适用的指令集。

输出app的load commands,然后通过查看cryptid这个标志位来判断app是否被加密。1代表加密了,0代表被解密了:

 > otool -l WeChat.app/WeChat | grep -B 2 crypt
          cmd LC_ENCRYPTION_INFO
      cmdsize 20
     cryptoff 16384
    cryptsize 40534016
      cryptid 0
--
          cmd LC_ENCRYPTION_INFO_64
      cmdsize 24
     cryptoff 16384
    cryptsize 43663360
      cryptid 0

可以看到微信已经被解密了,第一个对应的是较老的armv7架构,后者则是arm64架构。
Linux:

(---无---)

开发语言:Python、Java

调研发现,无法在Linux环境下,判断App是否被加密;因此将对应用是否加密的判断放到Redis下发脱壳任务之后在判断,如果应用加密,则继续将其脱壳,并将脱壳后的文件上传到FastDFS,同时将加密标志放在返回结果里一起返回;若应用未加密,则将直接将加密标志和其它结果一起返回。

results matching ""

    No results matching ""