1、监测工具
** Reveal**
1、使用framework集成Reveal到项目中。每个项目都需要集成,设置proj,比较啰嗦,上线时,还需要将Reveal.framework删除。
2、使用lldb命令集成Reveal到项目中。无污染,绿色。
这里只介绍2:
第一条命令:
expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)
ps:/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib这个地址为绝对路径,我的Reveal是存放于application目录下的,所以路径就是/Applications/Reveal.app/.....
第二条命令:
expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];
两条命令顺利的话,控制台则会打印INFO:Reveal Server started (Protocol Version 25).
这条信息。(如下图)
直接点击控制台continue
,跳过断点,打开Reveal,左上角点击No Connection,就可以看见自己的app了。接下来就尽情的玩耍吧!
在这里我使用了clang attribute里的
__attribute__((objc_runtime_name("40ea43d7629d01e4b8d6289a132482d0dd5df4fa")))
将这段添加至Appdelegate.h
文件的@interface
之前。举个栗子:
__attribute__((objc_runtime_name("40ea43d7629d01e4b8d6289a132482d0dd5df4fa")))
@interface KSAppDelegate : UIResponder<UIApplicationDelegate>
在第一个命令执行时,会找不见KSAppdelegate
这个类,因为我们使用clang attribute中方法对类名进行了替换。这其实就是一个简单的代码混淆。
.lldbinit里设置别名
每次需要Reveal来审查UI的时候都要输入这两条的命令,命令太长,也不方便我们记忆。我们可以在~/目录下的.lldbinit文件里为我们的LLDB命令添加别名。
.lldbinit是一个隐藏文件,默认是不存在的。而Xcode每次启动的时候,则都会去~/.lldbinit这个目录寻找这个文件里的LLDB命令。所以我们可以在这个文件里进行一些命令的初始化设置或者设置别名等等。
现在,我们打开终端,使用touch ~/.lldbinit
命令来进行创建。
然后vi ~/.lldbinit
,进入shell编辑器,粘贴命令:
command alias jueyingxx_reveal_load_sim expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)
command alias jueyingxx_reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];
然后下次调用Reveal时就可以使用我们自己的命令:jueyingxx_reveal_load_sim
和jueyingxx_reveal_start
来替代上面的两条命令,达到相同的目的。
另外两个监测工具,这里不做介绍:
snoop-it
introspy
2、反汇编工具
IDA
IDA是逆向工程中最常用的利器,作为老牌反汇编工具,支持 Windows 、Linux、 OSX和多种处理器架构。
Hopper
Hopper是一款今年面世的反汇编工具,它主要针对的是Apple操作系统。
3、调试工具
LLDB
4、开发工具
iOSOpenDev:基于Xcode的工具。
Theos:命令行工具。