sudo chmod 777 /usr/local/bin/class-dump
② 使用
在终端通过命令可以导出文本格式头文件,可以导出 text 文件格式:
class-dump -H iQiYiPhoneVideo -o IQIY
如需帮助则在终端输入:
class-dump --help
五、Hopper Disassembler
Hopper Disassembler Mac 版是一个强大的 Mac 反编译神器,可以反汇编,反编译和调试应用程序,而且支持 iOS 逆向,可以把 Mach-O 文件的机器语言代码反编译成汇编代码、OC 或 Swift 的伪代码。Hopper Disassembler 支持分解 Mach-O、ARM 和 Windows 二进制文件,是程序员进行拆开代码进行调试或学习的神器。Hopper Disassembler 官方下载地址:Hopper。
六、Cycript 安装和环境配置
① 安装
Cycript 是 Objective-C++、ES6(JavaScript)、Java 等语法的混合物,使用 Cycript 可以动态调试 App。Cycript 官方下载地址:Cycript。Cycript 官方学习文档:Cycript 官方文档。从 Cycript 下载 SDK,下载完成后解压文件夹放到 /opt 目录下。
② 配置环境变量
打开终端输入:
open -e .bash_profile
在打开的 .bash_profile 文件内添加 Cycript 环境变量地址:
export PATH=/opt/cycript_0.9.594/:$PATH
Cycript 需要依赖低版本的 ruby2.0:
dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
Referenced from: /opt/cycript_0.9.594/./Cycript.lib/cycript-apl
Reason: image not found
zsh: abort ./cycript -r 10.19.80.176:6666
查找到 ruby 安装所在目录:拷贝出 libruby.2.4.10.dylib ,并将动态库改成 libruby.2.0.0.dylib,粘贴到 /opt/cycript_0.9.594/Cycript.lib/ 目录下:
③ 使用
打开终端进入 cycript_0.9.594 目录:cd /opt/cycript_0.9.594;在终端输入电脑与真机必须同一局域网内的IP地址:./cycript -r 10.19.80.176:6666按 enter 键出现 cy# 表示成功连接。日志内也可以查到可运行的 IP 地址:
Download cycript(https://cydia.saurik.com/api/latest/3) then run: ./cycript -r 10.19.80.176:6666
control +D 退出查看,在 cy# 后面输入:
[[UIApp keyWindow]recursiveDescription].toString()
可以查看 UI 整体布局结构。查找根视图:
cy# UIApp.keyWindow.rootViewController
#""
获取对象的所有成员变量,使用(*对象):
cy# *UIApp.keyWindow.rootViewController
筛选出某种类型对象:
choose(UIViewController) choose(UITableViewCell)
使用遇到的问题:
*** _syscall(connect(socket_, info->ai_addr, info->ai_addrlen)):../Console.cpp(306):CYSocketRemote [errno=61]
MDCycriptManager.h 中的端口值换一下,#define PORT 6666 换成端口为 6688。
七、代码注入
@interface MyViewController
@end
%hook MyViewController
\- (void)showLoginPopup{
NSLog(@"hook viewDidLoad method");
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"我的第一个tweak工程创建成功" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
[alertView show];
UITableView *p = MSHookIvar<UITableView*>(self,"_tableView");
p.backgroundColor=[UIColor purpleColor];
}
\- (void)toLogin{
%orig;
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"你过来呀!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
[alertView show];
}
%end
iOS 逆向之路有坑有惊喜,需要了解并使用逆向中的各种工具,要求对汇编语言了解,熟悉各种脚本语言,对系统的底层知识的了解要求更高,越狱环境下的逆向自由度更高,非越狱环境下逆向依然充满挑战。在逆向别人 App 时候,也在提醒我们,开发项目中涉及的核心代码安全性很重要,避免被泄漏出去。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)