ios逆向工具--class-dump

class-dump,是可以把OC运行时的声明的信息导出来的工具。说白了,就是可以导出.h文件。用class-dump可以把未经加密的app的头文件导出来。废话不多说。 class-dump的下载地址是:

http://stevenygard.com/download/class-dump-3.5.tar.gz

http://www.codethecode.com/projects/class-dump/

将下载好的 class-dump解压后放入usr/local/bin 下,然后赋予其执行权限,即可使用:

adongMacBook-Pro:~ chenzhidong$ sudo chmod 777 /usr/local/bin/class-dump

Password:

adongMacBook-Pro:~ chenzhidong$

class-dump的使用方法

命令格式通常为:

class-dump -S -s -H /path/to/binaryfile -o /path/to/dumpHeader/

ps:有时候一些头文件dump不出来,或dump出后就一个CDStructures.h文件,此时有可能是二进制文件已被 加壳,需要进行砸处理;如果没有加壳,或砸壳后仍是只有CDStructures.h文件,则可能需要指定其指令集(armv7s,armv6...)

命令格式如:

class-dump --arch armv7 -S -s -H /path/to/binaryfile -o /path/to/dumpheader/

ps:

后面从dyld_shared_cache_armv7s里decahe出的库,可以dump,而从iphone5s,9.1系统里dyld_shared_cache_arm64库里decache出来的库,dump不了,提示:

class-dump[20557:1574323] Warning: This file does not contain any Objective -C runtime information.

原因是class-dump依赖于__DATA段下的几个sect里的数据。 iOS9 dyld解包的生成macho不在标准__DATA段,导致某些classdump无法识别。

此时可以用RuntimeBrowser来查看,下载地址:

https://github.com/nst/RuntimeBrowser

下载后,mac端查看私有api,可以编译运行osx文件夹里的工程:

ios逆向工具--class-dumpX

查看ios端的私有api,则可以先编译ios文件夹下的工程,然后安装到ios上;装好后打开如下:

ios逆向工具--class-dump

在About页面底部查看,会有一个http地址,如:http://192.168.0.151:10000/

(PS:请确保ios和mac在同一个wifi下)

然后在mac中浏览器上访问该地址,即可查看ios中相关的私有api了,eg:

ios逆向工具--class-dump

---------------------------------

p.s.

顺便说一下,还有一款非常好用的工具logify.pl,用来配合分析class-dump出来的头文件。

此工具,可以直接把指定的.h头文件,导出成hook插件xm文件。

命令格式:

logify.pl /path/to/headfile>/path/to/tweak.xm

eg:

adongMacBook-Pro:~ chenzhidong$ logify.pl /Users/chenzhidong/AppstoreASO/Header_IOS9/SpringBoardHead/SBIconController.h>/Users/chenzhidong/iosCode/dockviewtweak/Tweak.xm

得到的tweak.xm内容如下:

ios逆向工具--class-dump

如果生成的tweak.xm文件里,缺少对应的定义类型,则可以在tweak.h同目录下,创建.h头文件,然后自行构造对应的类型或方法声明即可。如:

类型定义:

typedef void(^CDUnknownBlockType)(void);

类定义:

@interface SSFamilyCircle

{

}

@end

空的即可,只是让编译器编译通过而已;然后在tweak中引用此头件即可通过编译;

后面发现更简单的方法是:

如果是类定义,直接在tweak.xm的头部写:

@class SSFamilyCircle;

如果常量类型如CDUnknownBlockType,可以直接用id代替即可;

ios逆向工具--class-dump

如果碰到:

Tweak.xm:25:9: error: expected selector for Objective-C method

- (void).cxx_destruct{%log;%orig;}

直接删除此类无意义的方法即可。

你可能感兴趣的:(ios逆向工具--class-dump)