ios逆向之工具篇
2018-07-23 17:18
405 查看
Reveal:查看任意app的UI结构
注:1.不越狱的手机,可以用Reveal来查看自己app的UI结构,不能查看其它app的结构。
2.越狱手机上可以查看任意app的UI结构。
IDA:反编译工具
从App Store下载的ipa都是加壳的,加壳的ipa需要先去除壳。可以使用clutch、dumpdecrypted等解密去壳。如果你有越狱手机可以直接从PP助手上下载ipa去壳的包。XCode直接打包的ipa是没有壳的。IDA就是来分析去壳的ipa包。
Hopper Disassembler:反编译工具
MachOView:可视化工具
运行MachOView后,会提示选择文件,来对文件进行分析。
CydiaSubstrate:Hook Api
Clutch:查看手机下的应用目录,并且可以查看破解好的文件位置
Dumpdecrypted:
解密app的可执行文件(后缀为decrypted)
Theos:
Theos是越狱开发工具的首先
GDB、LLDB:
调试
OpenSSH:
提供一个ssh服务,可以通过无线方式由电脑登录到手机,去访问手机的资源。
class-dump:
用来dump目标文件的类信息工具,利用runtime特性将存储在mach-O文件中的@interface和@protocol信息提取出来并生成对应的.h文件。
Cycript:
测试一些函数的功能,去窥探一些程序的结构,动态调试程序。
Frida:
一款基于python+js的hook与调试框架。允许将js的部分代码或者自己的库注入到windows、macos、linux、iOS、android以及QNX的原声应用中,同事能完全访问内存和功能。
iOSOpenDev:
使用Xcode开发,生成,scp到设备上,killall SpringBoard等一系列操作一次性完成。
MonkeyDev工具:
这是自动给第三方应用集成Reveal、Cycript和注入dylib的模块,支持调试dylib和第三方应用,支持Pod给第三放应用集成SDK,只需要准备一个砸壳后的ipa或者app文件即可。
MonkeyDev主要包含四个模块:
logos tweak
使用theos提供的logify.pl工具将.xm文件转成.mm文件进行编译,集成了CydiaSubstrate,可以使用MSHookMessageEx和MSHookFunction来Hook OC函数和指定地址。
CaptainHook Tweak
使用CaptainHook提供的头文件进行OC 函数的Hook以及属性的获取。
Command-line Tool
可以直接创建运行于越狱设备的命令行工具。
CaptainHook:
CHConstructor在main函数之前执行
CHDeclareClass(ViewController)声明ViewController这个类
CHOptimizedMethod1(self, void, ViewController, fun, NSString*, pa1){ //声明要hook的方法
NSLog(@"%@",pa1);
UIView *view = [(UIViewController*)self view];
view.backgroundColor = [UIColor redColor];
} //第一个是对象,第二个参数是返回值,第三个是要hook的类,第四个是hook的方法,第五个和第六个是hook的方法的参数
CHConstructor{
CHLoadLateClass(ViewController);
CHClassHook1(ViewController, fun); //hook fun这个方法
}
Logos语法:
//先声明要hook的类(方法或者属性)
@interface ViewController
@end
%hook ViewController //hook
- (void)fun:(NSString *)pa1{ //在%hook里面重写函数即可hook相应的函数
NSLog(@"haha");
%orig; //调用原来的方法
}
%end
常用方法:
%new:在本类新增一个方法
%log:该指令在%hook内部使用,将函数的类名、参数等信息写入syslog。
如:%log((NSString *)@"iOSRE",(NSString *)@"Debug"); //每次执行NSLog时会打印iOSRE和Debug字符串
%orig:该指令在%hook内部使用,执行被勾住(hook)的函数的原始代码;还可以利用 %orig 更改原始行数的参数
如:%orig(@"ww",arg) //arg是行参,@"ww"是传入的参数
%group:该指令用于将*%hook 分组,便于代码管理及按条件初始化分组,必须以 %end 结尾;一个 %group 可以包含多个 %hook ;
注意:代码中没有添加到分组中的Hook 代码块全部会自动添加到 _ungrouped 分组中
%init:该指令用于初始化某个 * %group ,必须在 %hook 或 %ctor *内调用;如果带参数,则初始化指定的 group,如果不带参数,则初始化 _ungrouped
切记,只有调用了%init,对应的%group才能起作用!
%cto:构造函数 tweak的constructor,完成初始化工作;如果不显示定义,Theos会自动生成一个%ctor,并在其中调用%init(_ungrouped)
例子:
%hook SpringBoard
- (void)reboot {
NSLog(@"If rebooting doesn't work then I'm screwed.");
%orig;
}
%end
可以成功生效,因为 Theos 隐式定义了如下内容:
%ctor
{
%init(_ungrouped);
}
而
%hook SpringBoard
- (void)reboot{
NSLog(@"If rebooting doesn't work then I'm screwed.");
%orig;
}
%end
%ctor
{
// Need to call %init explicitly!
}
里的 %hook无法生效,因为这里显示定义了 %ctor,却没有调用 %init,%group(_ungrouped)不起作用。%ctor一般可以用来初始化 %group,以及进行 MSHookFunction 等操作。
注意, %ctor不需要以 %end结尾 。
%c
该指令的作用等同于 objc_getClass 或 NSClassFromString,即动态获 一个类的定义,在 %hook 或 %ctor 内使用。
%dtor 析构函数
%subclass 子类化一个类
注:1.不越狱的手机,可以用Reveal来查看自己app的UI结构,不能查看其它app的结构。
2.越狱手机上可以查看任意app的UI结构。
IDA:反编译工具
从App Store下载的ipa都是加壳的,加壳的ipa需要先去除壳。可以使用clutch、dumpdecrypted等解密去壳。如果你有越狱手机可以直接从PP助手上下载ipa去壳的包。XCode直接打包的ipa是没有壳的。IDA就是来分析去壳的ipa包。
Hopper Disassembler:反编译工具
MachOView:可视化工具
运行MachOView后,会提示选择文件,来对文件进行分析。
CydiaSubstrate:Hook Api
Clutch:查看手机下的应用目录,并且可以查看破解好的文件位置
Dumpdecrypted:
解密app的可执行文件(后缀为decrypted)
Theos:
Theos是越狱开发工具的首先
GDB、LLDB:
调试
OpenSSH:
提供一个ssh服务,可以通过无线方式由电脑登录到手机,去访问手机的资源。
class-dump:
用来dump目标文件的类信息工具,利用runtime特性将存储在mach-O文件中的@interface和@protocol信息提取出来并生成对应的.h文件。
Cycript:
测试一些函数的功能,去窥探一些程序的结构,动态调试程序。
Frida:
一款基于python+js的hook与调试框架。允许将js的部分代码或者自己的库注入到windows、macos、linux、iOS、android以及QNX的原声应用中,同事能完全访问内存和功能。
iOSOpenDev:
使用Xcode开发,生成,scp到设备上,killall SpringBoard等一系列操作一次性完成。
MonkeyDev工具:
这是自动给第三方应用集成Reveal、Cycript和注入dylib的模块,支持调试dylib和第三方应用,支持Pod给第三放应用集成SDK,只需要准备一个砸壳后的ipa或者app文件即可。
MonkeyDev主要包含四个模块:
logos tweak
使用theos提供的logify.pl工具将.xm文件转成.mm文件进行编译,集成了CydiaSubstrate,可以使用MSHookMessageEx和MSHookFunction来Hook OC函数和指定地址。
CaptainHook Tweak
使用CaptainHook提供的头文件进行OC 函数的Hook以及属性的获取。
Command-line Tool
可以直接创建运行于越狱设备的命令行工具。
CaptainHook:
CHConstructor在main函数之前执行
CHDeclareClass(ViewController)声明ViewController这个类
CHOptimizedMethod1(self, void, ViewController, fun, NSString*, pa1){ //声明要hook的方法
NSLog(@"%@",pa1);
UIView *view = [(UIViewController*)self view];
view.backgroundColor = [UIColor redColor];
} //第一个是对象,第二个参数是返回值,第三个是要hook的类,第四个是hook的方法,第五个和第六个是hook的方法的参数
CHConstructor{
CHLoadLateClass(ViewController);
CHClassHook1(ViewController, fun); //hook fun这个方法
}
Logos语法:
//先声明要hook的类(方法或者属性)
@interface ViewController
@end
%hook ViewController //hook
- (void)fun:(NSString *)pa1{ //在%hook里面重写函数即可hook相应的函数
NSLog(@"haha");
%orig; //调用原来的方法
}
%end
常用方法:
%new:在本类新增一个方法
%log:该指令在%hook内部使用,将函数的类名、参数等信息写入syslog。
如:%log((NSString *)@"iOSRE",(NSString *)@"Debug"); //每次执行NSLog时会打印iOSRE和Debug字符串
%orig:该指令在%hook内部使用,执行被勾住(hook)的函数的原始代码;还可以利用 %orig 更改原始行数的参数
如:%orig(@"ww",arg) //arg是行参,@"ww"是传入的参数
%group:该指令用于将*%hook 分组,便于代码管理及按条件初始化分组,必须以 %end 结尾;一个 %group 可以包含多个 %hook ;
注意:代码中没有添加到分组中的Hook 代码块全部会自动添加到 _ungrouped 分组中
%init:该指令用于初始化某个 * %group ,必须在 %hook 或 %ctor *内调用;如果带参数,则初始化指定的 group,如果不带参数,则初始化 _ungrouped
切记,只有调用了%init,对应的%group才能起作用!
%cto:构造函数 tweak的constructor,完成初始化工作;如果不显示定义,Theos会自动生成一个%ctor,并在其中调用%init(_ungrouped)
例子:
%hook SpringBoard
- (void)reboot {
NSLog(@"If rebooting doesn't work then I'm screwed.");
%orig;
}
%end
可以成功生效,因为 Theos 隐式定义了如下内容:
%ctor
{
%init(_ungrouped);
}
而
%hook SpringBoard
- (void)reboot{
NSLog(@"If rebooting doesn't work then I'm screwed.");
%orig;
}
%end
%ctor
{
// Need to call %init explicitly!
}
里的 %hook无法生效,因为这里显示定义了 %ctor,却没有调用 %init,%group(_ungrouped)不起作用。%ctor一般可以用来初始化 %group,以及进行 MSHookFunction 等操作。
注意, %ctor不需要以 %end结尾 。
%c
该指令的作用等同于 objc_getClass 或 NSClassFromString,即动态获 一个类的定义,在 %hook 或 %ctor 内使用。
%dtor 析构函数
%subclass 子类化一个类
相关文章推荐
- iOS逆向工程之Reveal工具的安装、配置与使用
- iOS逆向工程之Reveal工具的安装、配置与使用
- iOS逆向 - dumpdecrypted工具砸壳
- IOS逆向--工具和必备知识
- iOS逆向工程---OS工具(Theos)
- iOS逆向工程二:Mac工具集之class-dump的使用
- iOS逆向工程之Reveal工具的安装、配置与使用
- iOS逆向工程-工具篇
- iOS逆向开发基础工具
- iOS逆向工具--usbmuxd使用
- iOS逆向工程工具之Theos
- 关于iOS逆向工程的工具(二)
- iOS逆向之一-工具的安装和使用
- iOS逆向工具汇总
- iOS逆向 开发工具
- [置顶] iOS逆向工程之Reveal工具的安装、配置与使用
- iOS程序逆向Mac下常用工具——Reveal、HopperDisassemble、IDA
- IOS逆向需要的工具
- iOS逆向工具--cycript
- ios逆向教程使用的工具