****--苹果移动端app逆向分析技术(一)
0x01 基础准备
关于iphone移动端app逆向程序相关初级基础大家可以自己提前学习。本
文主要给大家分享关于脱壳加密app程序的技术。学习之前大家先搭建系
统环境,准备相应的工具,参考链接教程自行搭建和安装。
1 macOS安装
vmware workstation 12.0 安装macOS 操作系统。
https://jingyan.baidu.com/article/54b6b9c0ec0a1b2d593b4745.html
2 XCODE安装
macOS系统应用商店安装xcode软件。这个就不用多说了,装好系统后打开
登录apple账号,在应用商店直接搜索下载xcode,直接安装完成即可。
3 越狱iphone
一部iphone手机,越狱你的iphone。我这里是一部4s,当然你根据不同系统
版本采用不同工具,方法都类似。http://www.app111.com/yueyu/iphone/02-38/
4 安装插件
越狱必要插件
AppSync
afc2add
OpenSSH
Cydia Substrate
PP助手3.0
5 其它命令
Dumpdecrypted.dylib
Class-dump
Otoollipo
0x02 测试步骤
上面的工作准备好了之后,我们就开始准备逆向测试我们的app程
序了。测试之前,搭建好。我的系统是当前最新版macOS 10.13.2
XCODE版本是
1 FairPlay技术
对于苹果商店的app往往都采用FairPlay(https://en.wikipedia.org/wiki/
FairPlay)这种技术进行发布前加密加密保护。当然有些app本身没有保
护,比如第三方源的发布,不经过苹果应用商店,那么我们直接就可以
直接利用工具进行提取,直接采用开始逆向工具的分析。如果你不确定
有没加壳,我们可以使用otool工具测试一下。
2 otool 查看是否加密
查看是否加密
otool -l 主文件名 | grep crypt
cryptid 1代表加密,cryptid 0代表未加密。
注意出现两个cryptid代表两种架构
分别对应着armv7和arm64,也就是它们都有加密。
不同手机系统对应的架构
iphone4 (armv7)
iphone4s(armv7)
iphone5 (armv7)
iphone5s(arm64)
iphone6 (arm64)
iphone6s(arm64)
3 开始脱壳
我们给手机上安装好我们要逆向的app程序,直接从商店应用安装。同时
记得把手机的wifi连接好,让电脑能够访问到手机。然后打开macOS命令行,
这里采用ssh方式进行连接,当然你可以直接插着数据线进行连接。
这里默认的root账户密码是alpine。我们把之前准备的脱壳工具dumpdecrypted.dylib
上传或者拷贝到手机某个路径下。如果没有这个文件可以根据后面附带的连接,自己
下载然后手动根据命令进行编译,把编译出来的复制到我们越狱的手机下面来。然后
找到我们的安装程序路径,默认的所有iphone安装app程序都存储在var/mobile/App
lications/目录下。
蓝色十六进制字符串就代表不同app安装后的名称。当然很多人说这个看不出是
哪个程序,我们可以随便进到一个目录下看看,
这里是aisiweb.app就是你要找的程序名称,也是我们脱壳的关键所在。
举例那么这里我们要脱壳第一个应用程序,这个是我在应用商店下载的
一个真实在线,目前还在使用的app程序,所以部分进行打码隐私保护。
输入命令入如下
DYLD_INSERT_LIBRARIES=dumpdecrypted_7.dylib /var/mobile/Applications/
16A8DAA8-0BB7-4983-BD91-C712A31F3737/xxx.app/xxx mach-o decryption dumper
然后我们再进行查壳验证。
在此处,我们发现已经脱去了外面的壳。但是发现arm64位架构并没有脱壳,由于我
的手机还是老款armv7架构,所以只能脱去armv7的壳。当然不影响我们的后面使用。
你也可以使用iphone5s以上手机也可脱去它的arm64架构外壳。
4 多架构分离
这里我们还得进行分离,采用lipo xxx -thin armv7 -output yyy
0x03分析步骤
1 文件反编译
到的class-dump工具来解析一下,我们的头文件。看看能不能还原出它的代码呢。
./class-dump –arch rmv7 xxx.decrypted.armv7 -H -o /Users/5t4rk/Desktop/headers
代码如下
2 整体反编译
这里我使用反汇编调试器hopper dissassembler进行逆向分析,大家也可以用别的工具。
比如ida pro之类的。打开加载我们脱壳之后的app程序,显示结果如下:
当然大家可以看到正常解析,反编译完成,出现我们熟悉的函数,数据,字符串。
我跟没有脱壳诚挚直接逆向反汇编对比一下。基本反编译不出任何有价值的信息
0x04 工具列表
http://bbs.feng.com/read-htm-tid-10620016.html
https://github.com/stefanesser/dumpdecrypted
http://www.sdifen.com/hopperdisassembler408.html
http://stevenygard.com/projects/class-dump/