逆向原理

iOS逆向

iOS目录结构:

Applications :存放所有的系统App和来源自Cydia的App,不包括StoreApp。(重点)
Library:存放了一些提供系统支持的数据。(重点)
User:用户目录,实际指向了/var/mobile。
boot:存放能使系统成功启动的所有文件,iOS中此目录为空。
dev:
lib:存放系统库文件。内核模块及设备驱动等。iOS此目录为空。
private:存放两个目录,分别是/ect和/var。
tmp:临时目录。在iOS中,/tmp是一个符号链接,实际指向/private/var/tmp
var:存放一些经常更改的文件。/var/moblie和/var/root分别存放了mobile用户和root用户的文件,重点。
Developer:如果一台设备连接Xcode后被指定为调试机,xcode就会在iOS中生成这个目录,其中会包含一些调试需要的工具和数据。(重点)
System:./System/Library是iOS文件系统中最重要的目录之一,存放了大量的系统组件。
bin:存放的是提供用户基础功能的二进制文件。
cores:
etc:
mnt:存放临时的文件系统挂载点。iOS此目录为空。
sbin:存放提供系统级基础功能的二进制文件。如reboot。
usr:包含了大多数用户工具和程序。/usr/bin包含哪些/bin和/sbin中未出现的基础功能,如killall。

重点关注
./Developer、./Library、./System/Library/Frameworks、

System/Library/Frameworks 存放公开的framework(Xcode常用的),System/Library/PrivateFrameworks存放私有的framework(待破解)
./System/Library/CoreServices里的SpringBoard.app:iOS桌面管理器。
./var/mobile/Media/DCIM存放照片。
/var/moblie/Containers 存放app。

砸壳取出头文件:砸微信
准备工具

  • 已越狱手机(安装Openssh ,Cycript,usbmuxd)
  • Mac端安装dumpdecrypted砸壳工具,iFunBox, class-dump
    配置环境

一、生成dumpdecrypted.dylib动态库
下载dumpdecrypted,在终端里切到dumpdecrypted所在目录,输入make命令,生成dumpdecrypted.dylib文件,这个文件是砸壳用的,需要复制到app沙盒中的Documents目录中。

二、”砸壳”前的准备工作,获得目标app的Bundle路径和沙盒的Documents路径
使用ssh连接到设备,打开设备中的微信应用。
连接手机:
1.将电脑的端口转发到iOS设备中,使用usbmuxd
电脑连接手机(目录+执行文件+ -t + 端口号) 如./tcprelay.py -t 22:8888
实例:python /Users/yww/usbmuxd/USBSSH/tcprelay.py -t 22:8888(Mac的8888端口转发到iOS设备22端口)

中断连接:ctrl+c
2.手机确定连接
(ssh+身份+@iOSIP)通过网络方式进行。
实例:ssh [email protected] (需要同一个网段)
(ssh +身份+@ilocalhost -p 端口)通过usb方式
实例:= (端口号是上一步设置)
ssh mobile@localhost -p 8888
3.查看iOS设备进程
ps -e 查看所有进程。(需要视力不错)
ps -e |grep /Application/ 查看Application目录下的活动应用
得到Bundle路径:/var/containers/Bundle/Application/CA5C5142-600E-4E16-B14B-E868506CFD58/WeChat.app/WeChat
进入cycript模式查看Documents路径:
1).cycript -p WeChat
2).NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]cd 2.scp命令来,将动态库文件从本地拷贝到iOS设备。
实例:scp /path/localFile root@iOSIP:/remoteFilePath
接着cd到iOS设备目标app的沙盒中的Documents目录下,然后输入:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib +目标app的Bundle文件夹路径,进行砸壳。(以mobile身份连接)

四、砸壳成功
在目标app沙盒中的Documents目录下生成后缀为decrypted文件,这是砸壳后的应用文件,将其文件拷贝到mac中:
1.通过iFunbox软件拷贝。
2.scp命令来,将动态库文件从本地拷贝到iOS设备。
实例:scp [email protected]:/var/mobile/Containers/Data/Application/338B6082-0EF5-44A1-95C6-86AF5AFAA6F5/Documents/WeChat.decrypted /Users/yww/iOSRCode

五、用class-dump工具导出砸壳后的app的头文件
cd 到砸壳后的app所在目录
输入:class-dump -S -s -H WeChat.decrypted -o /Users/yww/iOSRCode/Headers/WeChat

Ps:注意切换终端,指令为su mobile(root)

补充:
Bundle路径和沙盒路径:

Bundle完整路径:/var/containers/Bundle/Application/CA5C5142-600E-4E16-B14B-E868506CFD58/WeChat.apps。
应用的完整打包文件夹,包括资源和运行程序

沙盒完整路径:/var/mobile/Containers/Data/Application/365BB073-D9C1-4AC0-9224-D539FDE94E93。
服务于应用,用于数据分离。

你可能感兴趣的:(逆向原理)