Dobby icon indicating copy to clipboard operation
Dobby copied to clipboard

macOS x86_x64 InlineHook hook C函数无效果!

Open HOOKDLL opened this issue 3 years ago • 5 comments

经过几天研究,我是 M1 用户 采用 cmake/ios.toolchain.cmake -DPLATFORM=MAC 生成 x86_x64 静态库.a `# build macos x86_64 output_dir_name=auto-build-workspace/darwin-macos-x86_64-build compress_dir_array="$compress_dir_array $output_dir_name" echo "prepare build ${output_dir_name}"

mkdir -p ${CURRENT_DIR}/${output_dir_name} cmake -S . -B ${output_dir_name} -DCMAKE_BUILD_TYPE=Release
-DCMAKE_TOOLCHAIN_FILE=cmake/ios.toolchain.cmake
-DPLATFORM=MAC -DARCHS="x86_64" -DCMAKE_SYSTEM_PROCESSOR=x86_64
-DENABLE_BITCODE=0 -DENABLE_ARC=0 -DENABLE_VISIBILITY=1 -DDEPLOYMENT_TARGET=10.1
-DDOBBY_GENERATE_SHARED=OFF -DGenerateDarwinFramework=OFF -DDOBBY_DEBUG=OFF cmake --build ${output_dir_name} --parallel 4 --target dobby

mkdir -p ${summary_output_dir_name}/darwin/macos_x86_64 cp -r ${output_dir_name}/${darwin_library_name} ${summary_output_dir_name}/darwin/macos_x86_64`

` 测试代码:

static int (*orig_isNGiw32TGSAb)(double a1);

int myisNGiw32TGSAb(double a1){ NSLog(@"[+] hook isNGiw32TGSAb hooked"); return 1; }

intptr_t imageSilde = image_addr("Alf Framework.framework");

if(imageSilde != 0){

    void *mainProgramHandle = dlopen(NULL, RTLD_NOW);

    int64_t *patch_2 = (int64_t *)dlsym(mainProgramHandle , "isNGiw32TGSAb");
    NSLog(@"[+] isNGiw32TGSAb:0x%x ====",patch_2);
            
    int bb = DobbyHook((void *)patch_2,(int*)myisNGiw32TGSAb, (void **)&orig_isNGiw32TGSAb);
    if (bb == 0) {
        NSLog(@"[+] hook myisNGiw32TGSAb success :%d",bb);
    } else {
        NSLog(@"[+] hook myisNGiw32TGSAb fail :%d",bb);
    }
        
}`

导入工程 macOS x86_x64 hook C函数无效果! 同样代码 macOS amd64 架构有效果 请问大佬 Dobby 是支持 macOS x86_x64 架构?还是代码 bug ?

HOOKDLL avatar Apr 22 '21 10:04 HOOKDLL

我这里是没有问题的.

jmpews avatar Apr 22 '21 15:04 jmpews

我这里是没有问题的.

经测试 intel 芯片的 macOS x86_x64 实体机 InlineHook hook C 函数生效了。 之前测试 x86_x64 不通过,我是用 apple Rosetta2 转换运行的 x86_x64, InlineHook hook C 函数确实失败了。 望大佬测试支持一下,Rosetta 转换下 hook C 函数确实失败了! 谢谢。

HOOKDLL avatar Apr 23 '21 04:04 HOOKDLL

ok 好的 我试下 (请问这是什么需求?

jmpews avatar Apr 23 '21 07:04 jmpews

ok 好的 我试下 (请问这是什么需求?

image 这是苹果自家处理器 M1 Rosetta 转换层翻译执行 intel x86_x64 指令,有些老程序没有编绎 arm64 时,是通过 Rosetta 得到执行,有些需求:如果我是hook这老程序,就我所说的 hook C 函数会失效!所以需要你看看,谢谢。

HOOKDLL avatar Apr 23 '21 08:04 HOOKDLL

遇到同样问题,求教如何解决 @jmpews @HOOKDLL

1021811501 avatar Dec 15 '21 07:12 1021811501