请问Theos在写tweak时,如何针对指定地址来hook?

例如指定 地址 0x0000000100c97a0c ,如何针对此地址进行写tweak呢?

?hook啥东西,那个地址的函数还是什么

1 个赞

那是一个sub_xxxx函数,我利用frida hook修改里面的返回值,但是用theos tweak不知道怎么针对地址进行修改返回值。。。

需要找到这个函数的偏移量

void (*origin_method)(void);

void hook_method(void) {
    NSLog(@"hook success");
}

%ctor
{
    unsigned long address = _dyld_get_image_vmaddr_slide(0) + 偏移量;
    MSHookFunction((void *)address, (void *)&origin_method, (void **)&hook_method);
}

好的,非常感谢。我要注入指定app的,在frida中用如下实现
var base_addr = Module.findBaseAddress(module);
麻烦问下在Theos怎么写呢?

您好,我用您的代码hook sub_100A238B0(id a1,NSNumber *a2),但是出现了app闪退的情况,请问什么原因?

#import <substrate.h>
#import <mach-o/dyld.h>

void (*origin_method)(void);

void hook_method(void) {
    NSLog(@"hook success");
}

%ctor
{
    unsigned long address = _dyld_get_image_vmaddr_slide(0) + 0x100A238B0;
    MSHookFunction((void *)address, (void *)&origin_method, (void **)&hook_method);
}

origion_method和hook_method换个位置

1 个赞

刚才搞错了,非常抱歉,现在可以了,谢谢

再次感谢大神们的帮助。

正确的应该是:

#import <substrate.h>
#import <mach-o/dyld.h>

void (*origin_method)(void);

void hook_method(void) {
    NSLog(@"hook success");
}

%ctor
{
    unsigned long address = _dyld_get_image_vmaddr_slide(0) + 0x100A238B0;
    MSHookFunction((void *)address, (void *)&hook_method, (void **)&origin_method);
}

1 个赞

抱歉, 我贴错代码了, 之前还因为这个问题我特意问过 :joy:

1 个赞

我已改正,非常感谢您的帮助

1 个赞