Comment on page
13.反HOOK防护(一):基于Fishhook
我们需要防护别人的Hook,但是保留自己的Hook。
- 工程中的
Load
在Framework
里的Load
之后调用 - 别人注入的Hook代码的
Load
在Framework
之后,工程之前- 有点疑问,这里的
Framework
是动态库么?
+ (void)load {
struct rebinding exchange;
exchange.name = "method_exchangeImplementations";
exchange.replacement = my_axchange;
exchange.replaced = (void *)&sysExchangePoint;
struct rebinding bds[] = { exchange };
rebind_symbols(bds, 1);
}
// 保存原函数的指针,这个可以暴露给自己使用
void (*sysExchangePoint)(Method _Nonnull methA, Method _Nonnull methB);
void my_axchange(Method _Nonnull methA, Method _Nonnull methB) {
NSLog(@"⚠️检测到了Hook!");
}
效果:

1
因为我们用到了
method_exchangeImplementations
这样一个字符串,一旦被逆向工程师找到,很容易定位到防护代码。这个防护方案是基于调用时间来进行防护的,如果找到
fishhook
的相关调用,进行相关操作,会被破解掉。Last modified 2yr ago