iOS-inlineHook-dobby

所谓InlineHook就是直接修改目标函数的头部代码。让它跳转到我们自定义的函数里面执行我们的代码,从而达到Hook的目的。这种Hook技术一般用在静态语言的HOOK上面。fishhook和dobby都是inlinehook。

一、Dobby简介

HookZz的升级版,Dobby 通过 mmap 把整个 Mach-O 文件映射到用户的内存空间,写入完成保存本地。所以 Dobby 并不是在原 Mach-O 上进行操作,而是重新生成并替换。

二、 编译Dobby

由于Dobby是跨平台的,所以项目并不是一个Xcode工程,要使用cmake将这个工程编译成为Xcode工程。

#depth用于指定克隆深度,为1即表示只克隆最近一次commit.
git clone https://github.com/jmpews/Dobby.git --depth=1 
#编译xcode
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

三、 DobbyDemo

核心方法:

// replace instruction
MemoryOperationError CodePatch(void *address, uint8_t *buffer, uint32_t buffer_size);
// replace function
int DobbyHook(void *address, void *replace_call, void **origin_call);
// hook addrsss
int DobbyInstrument(void *address, DBICallTy dbi_call);

demo:

参考:

iOS-逆向-InlineHook
iOS Hook 原理 - InlinehHook (Dobby)

你可能感兴趣的:(iOS-inlineHook-dobby)