越狱调试(23)
2021-06-07 本文已影响0人
为了自由的白菜
越狱环境中Cycript的使用
- 手机安装Cycript
- USB链接手机
- clear -> 清理手机的终端 -> 需要该插件支持adv-cmds
- adv-cmds -> 让手机的终端更多命令
- ps -A -> 获取手机进程
- ps -A | grep WeChat -> 找到WeChat的进程
- cycript -p 13379 ->
- 13379 -> 程序进程 -> 用ps -A 获取
- cycript -p <应用名> 也可以
- ctrl d -> 退出cycript
- 导入自定义.cy
- cd /usr/lib/cycript0.9/
- pwd -> 输出路径
- scp -P 12345 ./hank.cy root@localhost:/usr/lib/cycript0.9/
- scp -P 12345 ./hank.cy root@localhost:/usr/lib/cycript0.9/com/Logic -> 注意最后的文件夹命名 -> 学习参考
- 此时再cycript -p AlipayWallet -> @import hank -> 就可以使用了
- cycript -p AlipayWallet
- cycript0.9该目录下 -> com/saurik/substrate/MS.cy
- @import com.saurik.substrate.MS -> 可正确导入MS文件
- 学习别人的文件放置方法 -> 目的防止cycript0.9文件下太多冲突
- mkdir Logic -> 创建文件夹
- mv hank.cy ./com/Logic/ -> @import com.Logic.hank
- 查资料 看cycript的文档怎么一次性导入多个.cy文件
theos
- 查看MonkeyDev的Git -> theos -> 安装ldid
- sudo git clone --recursive https://github.com/theos/theos.git /opt/theos
- --recursive -> 循环安装theos需要的依赖库
- 最后的/opt/theos -> 安装位置
- ldid -> 签名工具 -> 针对越狱插件的一个签名
- codesign -> iOS系统的一个签名工具
- sudo git clone --recursive https://github.com/theos/theos.git /opt/theos
- echo $THEOS -> 打印./zchrc里的该定义的路径
- 主要是使用theos/bin/nic.pl脚本来制作插件
- nic.pl
分析支付宝登录密码
- 链接手机
- ps -A | grep Ali -> 找到支付宝进程
- cycript -p AlipayWallet
- @import com.Logic.hack
- HKCurrentVC()
- #0x10xfasdf(上一步获取的VC地址).view.recursiveDescription().toString() -> 打印界面视图 -> 找刚才输入的密码字符串
- 找界面中文汉字 -> 新开终端 -> 进入python环境
- str = u"登录"
- str -> 就找到该字符串对应的编码 -> copy去搜索
- 找到该按钮的对象 -> #(按钮对象地址).allTargets
- #(按钮对象地址).allControlEvents -> 64 -> touchUpInside
- 1 << 6 位 -> 2的6次方 -> 64
- 可进入python环境验证 -> 2**5 2的5次方
- 2**6 -> 2的6次方 -> 64
- exit() -> 退出python环境
- [#(按钮对象地址) actionsForTarget: #(上层容器地址 在第6步可以获取) forControlEvent: 64] -> 可以打印出方法名 @["onNext"]
- ctrl d -> 退出cycript环境
- dump.cy 支付宝 -> 砸壳支付宝
- class-dump -H AlipayWallet -o headers/ -> 导出头文件
- Sublime Text -> 打开头文件夹
- command shift f -> 对应类名 @interface ALUAccuratePWDView
- 找到ALUAccuratePWDView文件 -> 看是否有onNext方法
- 根据动静态分析找到可能与密码有关的类 aluLoginBox
- 找到该类aluLoginBox -> aluInputBox
- /#(ALUAccuratePWDView对象地址)->_loginBox->_passwordInputBox
- 上面的->也是命令 -> 可以打印_passwordInputBox的地址
- /#(ALUAccuratePWDView对象地址)->_loginBox->_passwordInputBox->_textField -> 打印_textField的对象地址
theos使用
-
nic.pl -> 15 -> 代表插件
-
插件工程设置 -> 此处注意包名称(类似于Build ID)统一都是小写
image.png
- Bundld filter -> 要附加的进程id(Build ID)
- cycript -p AlipayWallet -> APPID -> 拿到Build ID
- 最后一项是插件安装之后要杀掉的进程 -> 默认是桌面进程SpringBoard
- 此处多写了支付宝AlipayWallet
-
上一步生成的文件夹用Sublime Text打开
- Makefile的配置 image.png
- Tweak.x -> Logos语法文件 image.png
-
cd alipaypwddemo/
-
make -> Makefile有这个文件就可以执行编译
- 路径有中文 -> 编译失败 -> 拷贝整个文件到桌面
- make -> 报错因为NSLog没有导入Foundtion框架
- 导入头文件后 make -> 成功
- make package -> 打包
- make install
- 因为上面有安装成功时有要杀掉进程的,此时按理来说应该杀掉的
- 如果hook失败
- 检查hook代码
- make clean -> 上面的3-6流程
- Xcode -> window -> Devices -> Open Console
完整hook代码
此时记得要将Tweak.x -> Tweak.xm
#import <UIKit/UIKit.h>
%hook ALUAccuratePWDView
-(void)onNext{
UIView * v1 = MSHookIvar <UIView *>(self,"_loginBox");
UIView * v2 = MSHookIvar <UIView *>(v1,"_passwordInputBox");
UITextField * pwd = MSHookIvar <UITextField *>(v2,"_textField");
NSLog(@"密码是%@",pwd.text);
}
%end
theos注意点
- theos跟Xcode有关系的,如果多个Xcode,要指定默认Xcode
- xcode-select -p -> 打印默认Xcode路径
- xcode-select --switch (路径) -> 指定Xcode
Reveal Loader
Reveal Loader 安装该插件
- 链接手机
- cd /usr/lib/
- cd /Library/
- 手机安装Reveal Loader插件(来源BigBoss)
- 设置里面开启Reveal的权限
- 电脑安装Reveal
- help -> Show Reveal Library -> ios
- 链接手机
- cd /Library/
- mkdir RHRevealLoader
- 电脑端 scp -P 12345 RevealServer root@localhost:/Library/RHRevealLoader/libReveal.dylib
- scp -r -P 12345 RevealServer.framework root@localhost:/Library/Frameworks/RevealServer.framework -> 低版本的用8的命令就行, -r 是针对文件夹的移动方法
- rm -rf (文件夹) -> -rf 移出文件夹(包括文件夹里面的文件)
LLDB
发送请求之前, 修改数据
- Xcode -> Debug -> Attach to Process
- 链接手机查看相应的进程 -> ps -A | grep WeChat
- pviews
- view debug 都可以
LLDB原理
- debugserver
- 找到相应的手机版本的镜像文件 -> 双击打开
- 镜像文件 -> usr/bin/debugserver
- 链接手机
- cd /usr/bin/
- cd /Developer/usr/bin/
- ls -> 可以发现手机里面的debugserver
- md5比较手机里的和我们Xcode里的(手机的可以拷贝出来)
- scp -P 12345 root@localhost:(pwd路径) ./debugserver
- md5比较 -> 一毛毛一样样
debugserver
- 端口映射 python tcprelay.py -t 22:12345 12346:12346
- 电脑端 lldb -> 进入lldb环境
- 进入手机环境 cd /Developer/usr/bin/ -> 手机里找到debugserver -> ./debugserver 运行有启动提示
- 手机环境 ps -A | grep WeChat -> 找到微信进程
- 手机环境 ./debugserver localhost:12346 -a (进程数字)
- 电脑端lldb
- process connect connect://localhost:12346
- pvc
- pviews
- c
- process interrupt
- methods 类名