15.Inlinehook:Dobby
一、Dobby
按文档生成一个Xcode工程。获取DobbyX.framework。一个跨平台的用于Hook静态语言的框架。
cd Dobby && mkdir build_for_ios_arm64 && cd build_for_ios_arm64
cmake .. -G Xcode \
-DCMAKE_TOOLCHAIN_FILE=cmake/ios.toolchain.cmake \
-DPLATFORM=OS64 -DARCHS="arm64" -DCMAKE_SYSTEM_PROCESSOR=arm64 \
-DENABLE_BITCODE=0 -DENABLE_ARC=0 -DENABLE_VISIBILITY=1 -DDEPLOYMENT_TARGET=9.3 \
-DDynamicBinaryInstrument=ON -DNearBranch=ON -DPlugin.SymbolResolver=ON -DPlugin.Darwin.HideLibrary=ON -DPlugin.Darwin.ObjectiveC=ON二、将framework集成进工程
将上面获取到的
DobbyX.framework,拖进项目。Build Phases中添加Copy file,添加DobbyX.framework,类型为framework
三、使用
3.1 int DobbyHook(void *address, void *replace_call, void **origin_call);
address
需要hook的函数地址
replace_call
新函数地址
origin_call
原始函数指针的地址
由于静态语言没有符号,直接通过地址来进行hook
3.2 试验一下
下面就是简单的使用方式
控制台输出:
四、流程分析
4.1 汇编分析 test_sum
a. 原始函数的汇编
b. Hook后的汇编
c. 分析
我们可以发现,前面三行指令不一样了。下面我们从调用方法断点开始调试
touchbegin
test_sum
这里发现x17已经编程了
new_sum了!跳到new_sum中了。
在调用原函数指针的时候才会继续执行
->下面的指令
d. 原理
实际上是对一段Text进行了替换(内存中的)!
Text段无法修改!
原始MachO无变化!
五、将符号替换成地址
在实战的时候,更多情况下我们并不能像上面的Demo中一样简单的拿到方法进行替换。
所以我们需要将符号替换城地址!
5.1 定位函数地址
a.函数地址
通过汇编断点我们看到真实的函数地址为:0x1025f1dc4
b.MachO中的偏移量
我们可以通过函数地址定位到它在MachO中的偏移量
ASLR
offset 0x1025f1dc4 - 0x00000001025ec000 = 0x5DC4

通过MachOView验证我们的计算没有问题。
5.2 代码实现上面的逆向流程
a.通过代码获取ASLR
你可能会遇到下面的问题
Implicit declaration of function '_dyld_get_image_vmaddr_slide' is invalid in C99
#import <mach-o/dyld.h> 即可
b.获得函数在MachO中的Offset
通过断点调试计算出偏移量,记录下来
c. 通过地址进行hook
完整HOOK代码:
d. 结果
5.3 注意点
对于自己的工程,每次修改代码,都会导致MachO内的偏移量改变,所以调试的时候需要注意
调整变量内容不会变
对于IPA包,同一个IPA包是不会变的,但是不同版本的会不一样
所以插件的话只能针对某个特定版本
5.4 参考
Last updated
Was this helpful?