plutil
plutil是xcode自带的对.plist文件操作的工具
验证plist文件有效性
plutil -lint example.plist
查看ipa文件的bundle identifier
➜ live4iphone.app plutil -p Info.plist | grep CFBundleIdentifier
输出结果:
"CFBundleIdentifier" => "com.tencent.live4iphone"
查看可执行文件:
➜ live4iphone.app plutil -p Info.plist | grep CFBundleExecutable
"CFBundleExecutable" => "live4iphone"
查看本地化的字符串:
➜ en.lproj plutil -p Localizable.strings
dpkg
deb是越狱开发安装包的标准格式,dpkg-deb是一个用于操作deb文件的工具,用此工具可以打包为deb,或者安装deb包
查看deb包结构
➜ packages dpkg -c com.qding.firsttweak_0.0.1-9+debug_iphoneos-arm.deb
class-dump
1、定位App的可执行文件(进程名)
pwd
/Users/wuhaiwei/Desktop/ipaFile/Payload/qding.app
plutil -p Info.plist | grep CFBundleExecutable
"CFBundleExecutable" => "qding"
2、将Mach-o文件的头文件导入指定路径
class-dump -S -s -H qding -o ~/Desktop/headerFile
3、输出的头文件中包含函数的偏移前地址
➜ WeChatMach_O class-dump -HA WeChat -o ~/Desktop/weChatHeader
Logify (静态分析工具)
Logify是一种实用工具,可以将类的头文件(.h文件)作为输入,并生成MobileSubstrate文件(.xm文件)。
作用:能自动Hook该类所有的方法,并生成打印日志信息代码,方便开发人员看到在使用过程中调用了某些方法。
logify.pl BaseMsgContentViewController.h > Tweak.xm
idevicesyslog (iOS日志查看工具)
是libimobiledevice下的一个子工具,可以实时追踪iOS设备日志。
idevicesyslog | grep "BaseMsgContentViewController"
usbmuxd
由于Mac上只支持4位的端口号,所以需要把iPhone的默认端口22映射到Mac上,相当于建立一个Mac和iPhone之间的通道。打开终端,执行:
iproxy 10088 22
这时终端会显示 waiting for connection 这表示我们已经搭建好Mac和iPhone的通道,现在我们直接和本地的12345端口通信就能和iPhone通信了。保持上一个命令显示的状态,新建个终端执行:
ssh -p 10088 root@127.0.0.1
输入ssh密码即可实现ssh连接
SSH
1、从ios copy文件到mac
scp root@10.39.72.155:/System/Library/CoreServices/SpringBoard.app/SpringBoard Desktop/SpringBoard
2、从mac copy文件到ios
scp -r Desktop/RevealServer.framework root@192.168.0.102:/Library/Frameworks
3、链接SSH
ssh root@10.39.72.155
THEOS
普通情况下安装需要指定手机的ip地址进行安装:
#THEOS_DEVICE_IP = 10.39.72.36
很明显比较低效,尤其是ip地址经常变换的局域网里面。
也可以通过usb的方式进行安装,指定本地ip、端口号即可
export THEOS_DEVICE_IP=127.0.0.1 #本机IP地址
export THEOS_DEVICE_PORT=10088 #本机端口号
然后开启iproxy端口代理:
iproxy 10088 22
具体安装命令都是
make package install
当然也可以将
export THEOS_DEVICE_IP=127.0.0.1 #本机IP地址
export THEOS_DEVICE_PORT=10088 #本机端口号
配置到环境变量里面,就不用每个tweak都复制这两行代码
tweak中包含的资源文件需要放置在特定的路径下,tweak工程下创建layout
目录,如果把资源文件放置layout
目录下,安装后资源文件在iPhone的“/”(根目录)下,
所以资源文件一般放在:
/Library/PreferenceLoader/Preferences/firsttweak
对资源文件的引用需要按路径引用:
[UIImage imageWithContentsOfFile:@"/Library/PreferenceLoader/Preferences/firsttweak/icon.png"]
cycript
cycript官网
Cycript是一个理解Objective-C语法的javascript解释器,它能够挂钩正在运行的进程,能够在运行时修改应用的很多东西。
由于目前 iOS 12.2中cycript不可用,替换用cyrun可用
加载注入cycript
cyrun -n qding -e cyrun -b com.qding.www -e
卸载
cyrun -n qding -d cyrun -b com.qding.www -d
加载和自动卸载,退出cycript时自动杀掉App并卸载
cyrun -x qding -e -d -f
退出cycript
control + D
查看app的层级结构
UIApp.keyWindow.recursiveDescription().toString()
hook类的实例方法
SBUIController.prototype['handleHomeButtonDoublePressDown'] = function(){};
debugserver
LLDB是Xcode内置的动态调试工具。debugserver运行在iOS上,他作为服务端实际执行LLDB传过来的命令,显示给用户,即所谓的”远程调试”
附加进程(接受任意192.168.0.100对端口2222的访问,需要先运行app)
kogatsu:~ root# debugserver 192.168.0.100:2222 -a "qding"
LLDB
进入lldb环境
➜ ~ /Applications/Xcode.app/Contents/Developer/usr/bin/lldb
连接手机
(lldb) process connect connect://192.168.0.102:2222
查看对应进程内的模块儿偏移量、偏移后地址
(lldb) image list -o -f | grep SpringBoard
[ 0] 0x0000000002b2c000 /System/Library/CoreServices/SpringBoard.app/SpringBoard(0x0000000102b2c000)
其中第二列是ASLR偏移量,最后面括号内是偏移后地址
这里需要着重说一下通过usbmuxd进行连接然后进行lldb调试
在iPhone端:
debugserver 127.0.0.1:2222 -a WeChat
在mac端:
首先要另起一个终端进行端口映射:
iproxy 2222 2222
然后进行lldb连接调试
➜ ~ lldb
(lldb) process connect connect://localhost:2222
没有了各种ip地址,简直爽的不要不要的
签名
列出可签名证书, 找到 mac 上面已经安装的证书
$ security find-identity -v -p codesigning
使用本机安装的开发者证书为 dumpecrypted.dylib 签名
➜ dumpdecrypted codesign --force --verify --verbose --sign "iPhone Developer: chunyu zhao (6QGT7NS2J4)" dumpdecrypted.dylib
查看二进制文件是否脱壳
//cryptid 0(砸壳) 1(未砸壳)
otool -l ~/Desktop/ipaFile/Payload/qding.app/qding | grep crypt
cryptoff 16384
cryptsize 19611648
cryptid 0
cryptoff 16384
cryptsize 21921792
cryptid 0
脱壳工具
下载源:apt.wxhbts.com
CrackerXI, 应用未启动状态脱壳
脱壳完成之后文件路径:
/var/mobile/Documents/CrackerXI
tweak安装后路径
/Library/MobileSubstrate/DynamicLibraries/