您的位置:首页 > 移动开发 > IOS开发

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 子类化一个类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息