gpt4 book ai didi

ios - 为什么我不能用 fishhook Hook 我的私有(private)函数

转载 作者:行者123 更新时间:2023-11-29 12:17:24 25 4
gpt4 key购买 nike

这几天发现iOS应用中hook很难,发现有一个叫“fishhook”的工具,是facebook开发的。我在我的个人项目中导入了该工具,但它不起作用。我错了吗?以下是源代码:

#import <dlfcn.h>
#import <Foundation/Foundation.h>
#import "fishhook.h"

static void (*orig_testABC)(void);

void testABC()
{
NSLog(@"This is main log...");
}

void my_testABC()
{
NSLog(@"This is other log, not main log...");
}

void save_original_symbols()
{
// void *handle = dlopen("/Users/bianyiji/Library/Developer/Xcode/DerivedData/HookTest-ghlgmahvsgfbqeekbrouzdyoxgdw/Build/Intermediates/HookTest.build/Debug/HookTest.build/Objects-normal/x86_64/main.o", RTLD_LAZY);
// printf("%s\n", handle);
orig_testABC = dlsym(RTLD_DEFAULT, "testABC");
}


int main(int argc, const char * argv[]) {
@autoreleasepool {
// save_original_symbols();
int rebind_int = rebind_symbols((struct rebinding[1]){"testABC", my_testABC}, 1);
printf("%d\n", rebind_int);

}
testABC();
return 0;
}

虽然我调用函数“testABC()”,但我之前使用“rebind_symbols”,为什么我不能得到我预期的结果...

最佳答案

fishhook 并不是要挂接到私有(private)函数中,因为 fishhook 通过重新绑定(bind)符号表中存在的符号来工作。

为了 Hook 私有(private)函数,您需要对正在运行的应用程序的可执行内存页面进行读写访问,出于安全原因,这显然是不可能的。

然而,在越狱的 iOS 中,内核有一个补丁允许这样做,因此您可以使用 CydiaSubstrate 或替代品等框架挂接私有(private)函数。但 fishhook 不支持这一点,而且可能永远不会支持,即使支持也永远不会对 AppStore 友好。

来源:我们的开源 SSL 固定库 TrustKit使用鱼钩,我们在 BlackHat 2015 上介绍了它 elaborating an all these topics .

关于ios - 为什么我不能用 fishhook Hook 我的私有(private)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31649581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com