密码登陆
通过插件使用Wifi连接手机:ssh 用户名@手机IP地址,端口默认22
$ ssh root@192.168.1.112
默认密码:alpine
无密码登陆
客户端在~/.ssh/目录下生成公钥
$ ssh-keygen
拷贝公钥给SSH服务器
$ ssh-copy-id 用户名@服务器IP
注意:如果配置了之后,还需要输入密码. 需要给 authorized_keys 上一个 644 或者 777 权限
删掉保存的服务器地址的key
$ ssh-keygen –R 服务器IP地址(当SSH登录手机,手机就是服务器)
know_hosts文件:用于保存SSH登录服务器所接受的key
在系统~/.ssh 目录中保存
ssh_host_rsa_key.pub文件:作为SSH服务器发送给连接者的key
在系统/etc/ssh 目录中保存
别名登陆(方便多台手机登陆)
配置Config文件,在~/.ssh 目录下创建一个config文件。内部可以配置ssh登录的别名。
Host 别名
Hostname IP地址
User 用户名
Port 端口号
USB登陆
Python脚本端口映射
$ python tcprelay.py -t 22:12345
将本地的12345端口映射到设备的TCP端口22(默认22).这样就可以通过本地的12345端口建立连接了。
通过USB进行SSH连接
$ ssh -p 12345 root@127.0.0.1
ssh连接本地的12345,由于做了端口映射,所以会通过usb连接对面设备的22端口。
Iproxy端口映射
homebrew安装libimobiledevice工具
$ brew install libimobiledevice
映射端口命令
$ iproxy 12345 22
ipa瘦身
当我们下载下来的ipa包为fat类型时,可以先瘦身:解压ipa包->在payload里替换macho->再重新打包
//瘦身命令
$ lipo WeChat -thin arm64 -output arm64_wechat
//顺便导出头文件
$ class-dump -H arm64_wechat -o ./Headers/
//打包命令
$ zip -ry WeChat.ipa Payload
砸壳
目前基本全部为动态砸壳,就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。
动态砸壳须满足的条件
- 正在运行(iOS的应用目前均为动态砸壳)
- 依赖库必须加载完毕(全部功能完全使用过)
//查看macho文件是否加密,id为1即为加壳
$ otool -l WeChat | grep cry
1.Clutch
iOS8.0以上可用,GitHub上可下载。
使用方式
- 先将Clutch执行文件(MachO)拷贝到手机上
$ scp -P 12345 Clutch root@localhost:/usr/bin
- 列出可以砸壳的应用
# Clutch -i
- 砸壳,3为列举出来的应用ID
# Clutch -d 3
2. dumpdecrypted
dumpdecrypted是通过越狱注入实现的。GitHub上可下载
越狱注入
越狱手机通过修改DYLD加载流程中_main函数的环境变量DYLD_INSERT_LIBRARIES来达到加载注入动态库的目的
//查看进程,方便查看app路径
# ps -A
//注入命令,只会执行一次,杀掉进程再打开就不会注入了,系统层级不会污染源程序,源程序“本地”防护无效
# DYLD_INSERT_LIBRARIES=注入库的路径 主程序的路径
dumpdecrypted砸壳流程
GitHub下载,通过make来编译砸壳工具,生成动态库dumpdecrypted.dylib->拷贝到手机->然后砸壳
# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 主程序的路径
砸壳后生成 主程序.decrypted 的MachO文件,把后缀去掉就是砸壳后的MachO文件
3. frida(主要使用,非完美越狱可以安装)
该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件。 其实frida是通过连接手机和手机通讯(OpenSSH),然后使用砸壳工具砸壳,拷贝到电脑上,打包等一系列操作,使用python封装起来的一个工具。
frida相对前两种简单方便,Mac和手机均要安装,Mac安装步骤如下:
//查看python版本,因为frida需要使用python脚本
$ python -V
//查看pip版本,pip
$ pip -V
//安装pip,是方便安装和管理python包的工具
$sudo easy_install pip
//安装frida,会自动帮你安装frida
$ sudo pip install frida-tools
如果报错提示:目录不归当前用户所有。请检查该目录的权限和所有者.需要sudo的-H标志,sudo -H意思是 set-home 将 HOME 变量设为目标用户的主目录,加上即可
$ sudo -H pip install frida-tools
Mac配置ios-dump
尽管monkeydev写了frida-ios-dump,但是它并没有依赖frida-ios-dump进去。 首先下载脚本
$ sudo mkdir /opt/dump
$ cd /opt/dump
$ sudo git clone https://github.com/AloneMonkey/frida-ios-dump
安装依赖
$ sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt --upgrade
有可能报版本问题错误。 解决方式: 安装要求版本
$ sudo pip uninstall prompt-toolkit
$ sudo pip install prompt-toolkit==版本号
修改dump.py参数:
vim /opt/dump/frida-ios-dump/dump.py
User ='root'
Password ='alpine'
Host ='localhost'
Port = 1234
手机可添加源 build.frida.re 安装frida,砸壳出来的是ipa包。
dump.py依赖于电脑的frida。可以配置frida砸壳命令成脚本,frida-ios-dump项目文件夹放到脚本同一目录,方便以后调用。
/Users/Jimmy/DJShell/frida-ios-dump/dump.py $1
当连接手机后终端显示不了中文,可以将.inputrc文件设置一下,然后拷贝到手机的home目录下。
frida简单使用
//列举电脑应用进程
$ frida-ps
//列举手机应用进程
$ frida-ps -U
//使用规则(./dump.py 应用名称/Bundle identifier)
$ ./dump.py 微信
其他实用工具:
- adv_cmds是手机的命令工具的一个补充(理解为相对于/usr/bin)
- Vi IMproved 工具想在手机用可以在源里面搜索插件
- Cycript非完美越狱貌似安装不了,非越狱cycript只能附加到一个应用上,越狱环境可以附加多个,包括系统进程
手机上越狱环境使用cycript
//附加命令
# cycript -p WeChat
# cycript -p 进程ID
cycript使用自定义 .cy文件,需要把文件拷贝到 /usr/lib/cycript/中.比较好的做法是参考作者的cy文件,com/saurik/substrate/MS.cy,MS.cy是作者写的好用调试工具。在com文件夹里创建自己的文件夹,有点类似于bundleID的命名规则(唯一性),作用显而易见.使用diyCycript.cy时要加上路径:
@import com.killtime.diyCycript
LLDB手动砸壳(砸壳的原理)
加密后的macho文件大小是不会变的。 其实过程就是:利用otool查看macho加密偏移和加密大小,当app的macho文件加载到内存后(打开app),读取一段内存(offset + cryptsize)覆盖原来加密的macho的内存段,通过machoview等修改crypyid为0(标志为解密)。
//先断住
(lldb) process interrupt
//lldb拷贝指令,./decrypted.bin是拷贝路径(当前电脑路径),--binary二进制形式读取,--count拷贝的大小,0x00000010000d300+16384是image list后主程序在内存上的地址+偏移量
(lldb) memory read --force --outfile ./decrypted.bin --binary --count 1232425 0x00000010000d300+13935
//合并文件,终端的dd命令,意思是指定一个大小的文件写入另外一个文件
//seek是偏移值,bs是一次读多少个字节,conv是用指定的参数转换文件,notrunc是不截取的意思(没有覆盖的地方不截断),if输入文件,of输出文件(这里就是覆盖文件,即未砸壳的macho文件),100M的文件大概10分钟左右。
$ dd seek=13935 bs=1 conv=notrunc if=./decrypted.bin of=./WeChat