MobieSubstrate三个模块(作用)

MobileHooker

作用是替代函数实现,也就是hook. Theos就是根据这个来实现的

MobileLoader

作用是加载第三方动态链接库,也就是tweak。
在 iOS 启动时,由 launchd 将 MobileLoader 载入内存,然后 MobileLoader 会 dlopen 所有 /Library/MobileSubstrate/DynamicLibraries/ 目录下的动态链接库。另外我们需要为编写的 tweak 同时编写一个跟 tweak 同名的 plist 文件,指定 tweak 的作用范围

#####Safe Mode
如果tweak有bug导致app崩溃。Safe Mode 会捕获 SIGTRAP, SIGABRT, SIGILL, SIGBUS, SIGSEGV, SIGSYS 这6种信号。然后进入安全模式

砸壳. Appstore中下载的app都是加过壳的。不能进行反编译操作

  • Clutch
  • dumpdecrypted.dylib

使用theos nic.pl来创建一个新工程

插件安装到手机上

make && make package & make package install

基本命令与语法

theo语法。
基本上就是对照下面的命令去写,剩下都是objective-c的语法。

1
2
3
4
5
6
7
%hook: 指定需要 hook 的 class
%log: 这个指令在 %hook 内部使用,可以将 log 的内容写入 syslog(/var/log/syslog)。这种是将 log 写入文件的方法。在 iOS9.3 这个文件没有自动生成,如果需要以这种方式查看 log,则需要配置一下,配置方法可以参考 wiki 中的 1.3 内容。而我使用的是 1.1 的方法,利用 socat 这个命令行工具,可以在 cydia 中安装,按照 wiki 的方法实时查看 log
%orig: 在 %hook 内部使用,执行被 hook 的函数的原始代码。还可以利用它以 C++ 函数的调用方式改变原始函数传入的参数
%group: 用于将 %hook 分组,与 %init 配合使用,在按条件初始化 hook 代码时非常有用
%ctor: 用于系统自动初始化默认的未分组 hook 代码
%new: %hook内部使用,用于给现有的 class 添加新的方法
%c: %hook内部使用,动态获取一个类的定义

调试

  • 可以连接到越狱手机上,通过socat来查看日志:http://sunhongyi.com/2016/12/09/iOSReverseTool-socat/
  • 其他打log的方法,可以参照https://www.theiphonewiki.com/wiki/System_Log

使用lldb调试app

前几天下了iOSRe官方提供的微信机器人的例子https://github.com/iosre/WeChatRobotForExample/。改了改,基本可以跑起来,但是我想要另外一个功能,就是发送名片给其他人,但是他的代码有点老。所以需要尝试一下用lldb看能不能断到,然后发messagewrap出去
过程与书中基本相似http://bbs.iosre.com/t/debugserver-lldb-gdb/65只不过我看了下我的debugserver在 /usr/bin/目录下。与书中略有区别

  • 环境设置好之后,使用px -aux |grep Wechat可以看到进程名字,用debugserver *:1234 -a "WeChat" 就可以attach到进程中
  • 启用mac的lldb,用process connect connect://192.168.10.224:1234即可以打断点进行调试