iOS 逆向常用工具

mac工具

效率工具

代替默认的Terminal,提供了很多高级设置,例如自动补全,高亮等等

自定义主题,git显示,Tab补全等

从finder中打开终端并且自动切换到当前目录

工作流软件,快速打开软件,添加自己的工作流。参见bestswifter的博客

实用工具

MacOS的包管理器,快速安装各种工作

提供了很多能与iOS交付的工具,例如端口映射查看日志,安装程序

逆向工具

查看文件的结构,代码签名

多平台,多架构支持的反汇编框架

将汇编指令转换成Hex机器码

一款开放源代码的逆向工程平台

安装app或者ipa包

查看越狱设备的文件目录

dumpdecrypted 是一个开源的砸壳工具,它会注入可执行文件,动态的从内存中dump出解密后的内容。使用教程请看这里

class-dump 是一个用于从可执行文件中获取类,方法和属性的工具,上述源代码在导出ARMV7架构的时候会出问题,原因是在读取类没有分64和32位系统进行不同的操作,最新的fix bug的源码在AloneMonkey/Class-dump

Reveal 是一个用户动态查看APP UI层级架构的工具,可以在开发过程中动态调试修改程序的样式,也可以注入第三方APP以查看应用的界面结构。
有两种方式可以使用Reveal,第一种是正向开发的时候通过pod的方式加入Reveal

1
2
3
target 'RevealAPP' do
pod 'Reveal-SDK', :configurations=> ['Debug']
end

第二种方式是越狱设备注入Raveal,可以调试所有的APP,在越狱设备,可以将RevealServer重命名为libReveal.dylib,以及新建libReveal.plist文件,里面输入需要调试的APP的BundleID

1
2
3
4
5
6
7
{
Filter = {
Bundles = (
"com.lemon.example",
);
};
}

将以上两个文件复制到越狱设备的 /Library/MobileSubstrate/DynamicLibraries/目录下,这样可以通过Cydia Substrate的MobileLoader在程序运行的时候通过dyld_insert_libraries命令将自己加载到目标APP的Document目录下,然后查找上述路径的所有的plist,找到对应的Bundleid之后,通过dlopen()函数将动态库注入到APP中

越狱设备工具

  • cydia

cydia是一个可以让用户在越狱设备上面安装各种插件的软件管理器,相当于越狱设备的APPStore

  • SSH

SSH是一种网络协议,用于计算机之前的加密登录,他存在多种实现,因为不同系统使用的越狱工具不一样,所以需要根据iOS的版本来进行设置。
iOS8 & iOS9 ,可以通过安装OpenSSH来登录,安装方法:1.在cydia中搜索OpenSSH并且安装,安装完成之后打开Wifi设置界面,打开当前连接的wifi,获取ip地址(假设是192.168.2.21),然后打开终端,输入以下命令后回车: ssh root@192.168.2.21 2.稍等片刻之后输入yes并且回车,然后输入默认密码alpine完成登录。(当远程主机的公钥被接受以后,他会保存到mac的$HOME/.ssh/known_hosts文件中,再次连接这台主机时,系统就会认出他的公钥已经保存到本地,从而跳过警告部分,直接提示用户输入密码。)
iOS10.0 & iOS10.2 ,越狱工具yalu内置了一个相对轻量级的工具dropbear,供用户直接使用。安装方法:1.在cydia中搜索MTerminal和adv-cmds,然后运行ps aux | grep dropbear 命令。如果有输出内容,则代表默认支持usb连接,如果这是要连接,在mac上转发端口即可登录,命令如下:
iproxy 22 2222
ssh root@localhost -p 2222
如果要通过wifi连接,需要在终端设备执行一下命令
/usr/local/bin/dropbear -F -R -p 22
然后在mac上直接SSH登录
ssh root@192.168.2.21

查看越狱设备的文件目录

cydia substrate是一个框架,允许第三方开发者在越狱系统方法里面打一下运行时补丁和扩展一些方法,是开发越狱插件的基石。cydia substrate主要包含三个模块,分别是MobileHooker,MObileLoader,Safe mode。
MobileHooker 用于替换系统或者应用的方法,它提供了MSHookMessageEX 来hook OC的函数,MSHookFunction来hook C函数。
MobileLoader 用于将第三方动态库加载到目标应用里面。首先它会通过dyld_insert_libraries将自己加载到目标程序里面,然后通过查找/Library/MobileSubstrate/DynamicLibraries/目录下的所有plist文件,如果plist文件里面包含有当前应用的BundleID,那么就会通过dlopen()函数打开对应的dylib文件。
safe mode 当插件加载导致了系统奔溃时,mobilesafety会捕捉到这个异常并且让设备进入安全模式。找到最近安装的导致奔溃的插件并且卸载即可退出安全模式。

  • adv-cmds

提供ps命令

  • appsync

让系统不再校验应用的签名

  • scp

对于iOS10以后的版本,使用yalu越狱之后就没有scp这个工具了,可以在网上找到scp的源代码使用iFunBox复制到设备的/usr/bin目录下,然后通过ssh访问该目录,执行以下命令:
cd /usr/bin
ldid -S scp
chmod 777 scp

提供便利的LLDB调试命令
安装教程

  1. brew install chisel
  2. 如果不存在~/.lldbinit文件那就创建一个文件,并且将以下代码放到该文件中
    #~/.lldbinit

    command script import /usr/local/opt/chisel/libexec/fblldb.py
  3. 重启Xcode或者在LLDB中输入 command source ~/.lldbinit命令在加载脚本。

安全工具

该工具是从class-dump fork出来的,用于dump出APP中的类和方法并且生成混淆代码,将生成的混淆的宏定义添加到项目的pch文件中,达到混淆所有的类和方法的作用

-------评论系统采用disqus,如果看不到需要翻墙-------------