逆向开发工具
- 可越狱iPhone一台
- 电脑一部
- 诸多软件等
iPhone越狱
设备详情:
- iPhone 5s Version: iOS 9.3.2 13F69
- Mac电脑一台,VMware Fusion, Win7
爱思助手,pp越狱助手 越狱注意点:
- 部分iOS版本并不支持越狱,比如:iOS8.4.1, iOS9.1不支持越狱。所以选择/购买机器时,查询对应机型的版本是否支持越狱
- 注意版本编号,有些版本有beta版,也是不支持越狱,注意对应的系统版本和版本编号的统一。13F69 是iOS9.3.2的一个版本编号
- 选购机器最好选择5s以上的机型,因为32位(armv7, armv7s等)的机型已经停止越狱的支持
- 最初越狱的时候,一直用的爱思,但是用虚拟机一直越狱失败。换了pp越狱助手,虚拟机越狱成功。(pp和爱思都是用的盘古越狱)
- iOS9.3.2是不完全越狱,即:重启手机,越狱失效。需要重新越狱。
逆向环境搭建
使用pp越狱成功后,会自动安装Cydia,通过Cydia可以安装一些越狱的时候使用的工具
通过Cydia安装软件:
OpenSSH 默认登录名和密码:root alpine
- 登录iPhone
ssh root@ipip为iPhone的ip地址 - scp拷贝文件:
1 | scp filename root@ip:/tmp ;将本地文件拷贝到远程tmp文件夹下 |
更改root密码:
1 | passwd ;更改当前登录的用户密码 |
usbmuxd工具
有时候使用ip连接ssh速度会很慢,或者在动态调试的时候,启动debugserver也会很慢。通过usb连接会解决这些问题。
下载连接:https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz
转发iPhone ssh 22号端口到localhost 2222
1 | ./tcprelay.py -t 22:2222 |
iPhone debugserver 9527 转发到到本地9527
1 | ./tcprelay.py -t 9527:9527 |
安装软件管理包apt-
在Cydia中搜索 APT 0.6 Transitional并
命令介绍
1 | apt-get update ;更新所有的源; |
使用apt-get 安装必要安装包
1 | apt-get install ping |
工具使用测试
1 | ping www.baidu.com ;发送icmp报文 |
iOS文件系统结构
UNIX常见系统目录
1 | /:磁盘根目录 |
iOS的独有目录
1 | /Applications:存放所有的系统App和来自于Cydia的App,但不包括AppStore |
文件目录权限
* `rwxr-xr-x ` 每三个分成三组,分别代表:所有者(rwx),所属的用户组(r-x), 其它用户(r-x)
* 每一组三位可以看做三个二进制,每位意义为:是否有读权限(r),是否有写权限(w),是否有执行权限(x);即:所有者拥有权限 rwx = 111 = 7
* 修改权限 : `chmod 777 filename` 给与filename所有的权限即:`rwxrwxrwx`
获取App的目录
获取Bundle目录
1 | ps -e | grep WeChat |
获取沙盒目录
1 | cycript -p WeChat |
Cycript
作者: saurik
官网: http://www.cycript.org/
Cycript是一款脚本语言,可以看作是Objective-JavaScript,它可以帮助我们轻松测试和验证函数效果
- 在越狱手机中可以通过注入方式在第三方应用中运行
- 也可以用静态库的方式把cycript集成到自己的应用(MonkeyDev,可以给非越狱iOS第三方App写插件,但是权限受沙盒限制)
越狱手机安装Cycript
- 在Cydia上搜索Cycript进行安装
apt-get install cycript
注入到第三方进程空间,CMD+D退出cycript
1 | //确认进程名或者进程PID |
注入实例:(代码最好在Xcode里写,然后复制)
1 |
|
##逆向工具
逆向工具大致可分为四类:
- 检测工具。如:Reveal、tcpdump等
- 反编译工具。如:IDA、Hopper Disassembler、classdump等
- 调试工具。如:lldb、Cycript等
- 开发工具。如:Xcode、theos等
classdump 导出没有加密过得头文件,借助于otool。
- 官网: http://stevenygard.com/projects/class-dump/
- 用法:
class-dump -s -S -H WeChat -o ./wechatHeaders将砸壳后的wechat文件的头文件导出到wechatHeaders目录 判断是否加密
otool -l WeChat | grep -B 2 cryptcryptid 0 已经解密1
2
3
4
5
6--
cmd LC_ENCRYPTION_INFO_64
cmdsize 24
cryptoff 16384
cryptsize 52379648
cryptid 0查看某文件夹下文件的个数,包括子文件夹里的:
ls -lR|grep "^-"|wc -l- 查看某文件夹下文件夹的个数,包括子文件夹里的:
ls -lR|grep "^d"|wc -l
dumpdecrypted 砸壳工具
- 下载源码: git clone https://github.com/stefanesser/dumpdecrypted.git
- 编译:make 生成 dumpdecrypted.dylib 文件
用法:将dumpdecrypted.dylib 文件拷贝到越狱iPhone的需要砸壳的App沙盒的Documents文件夹下面
1
2
3
4例如微信:
# cd /var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/
# cp /tmp/dumpdecrypted.dylib .
# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChat
theos 越狱工具开发包
百科:
http://iphonedevwiki.net/index.php/Theos/Setup#For_Mac_OS_X
http://iphonedevwiki.net/index.php/Theos
安装教程: https://github.com/theos/theos/wiki/Installation
安装步骤简介:
sudo mkdir /opt如果没有opt目录则创建,有cd到该目录git clone --recursive https://github.com/theos/theos.gitsudo chown -R $(id -u):$(id -g) theos
设置环境变量:
- 在新建theos工程编译的时候执行:
export THEOS=/opt/theos - 开机启动时候执行
1 | vi ~/.bash_profile |
ldid
越狱iPhone下的签名工具(更改授权entitlements),可以为thos开发的程序进程签名(支持在OS X和iOS上运行)
wiki: http://iphonedevwiki.net/index.php/Ldid
- 安装:
brew install ldid fakeroot 查看WeChat签名信息
codesign -dvvv WeChat1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Executable=/Users/leaf/yy/WeChat
Identifier=com.tencent.xin
Format=Mach-O thin (arm64)
CodeDirectory v=20200 size=511823 flags=0x0(none) hashes=15987+5 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha1=d6e410a862077728c19fb53f6938e1bbbc723202
CandidateCDHash sha256=0925ea0e119b16a34f890d85ad8e8a4781d4d984
Hash choices=sha1,sha256
CDHash=0925ea0e119b16a34f890d85ad8e8a4781d4d984
Signature size=4297
Authority=Apple iPhone OS Application Signing
Authority=Apple iPhone Certification Authority
Authority=Apple Root CA
Info.plist=not bound
TeamIdentifier=88L2Q4487U
Sealed Resources=none
Internal requirements count=1 size=96查看entitlement内容
codesign -d --entitlements - WeChat或ldid -e WeChat- 修改entitlement内容
ldid -Sentitlement.xml WeChat
dpkg工具
安装
1 | brew install --from-bottle https://raw.githubusercontent.com/Homebrew/homebrew-core/7a4dabfc1a2acd9f01a1670fde4f0094c4fb6ffa/Formula/dpkg.rb |
安装/卸载 dpkg -i/-r cc.onezen.demo1_0.0.1-1+debug_iphoneos-arm.deb
查看安装包信息 dpkg -s cc.onezen.demo1
日志功能
注意要想看日志信息,一定要在Makefile里设置DEBUG=1,否则除了NSLog信息可以看到外,其它的信息看不到!
syslog:iOS9.3.2没有配成功
- 安装:在Cydia搜索
syslogd to /var/log/syslog - 查看日志:
tail -f /var/log/syslog - 过滤查看:
tail -f /var/log/syslog | grep WeChat
socat
- 安装:在Cydia搜索
SOcket CAT - 运行:
socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock - 运行起来后,输出help查看用法
1 | help |
- 过滤查看日志(根据bundle id):
* Facility com.apple.springboard - 过滤查看日志(根据进程id):
* PID 123 - 过滤条件
1
2
3
4
5
6
7
8
9ASLMessageID, //asl消息id
Level, //级别
Time, //时间
TimeNanoSec, //时间ns
Sender, //消息的发送者
Facility, //按照Bundle ID来过滤日志
PID, //进程id
Message, //消息内容
ReadUID //读取所使用的用户id

deviceconsole(更喜欢这种日志)
通过usb连接打印iPhone日志。克隆相关源码,然后make编译后,会在mac上自动创建deviceconsole命令。在终端输入deviceconsole,自动输出iphone上的日志。过滤输出: deviceconsole -i -f WeChat
1 | git clone https://github.com/MegaCookie/deviceconsole |
