Android 逆向ART 函数抽取加壳 ③ ( 禁用 dex2oat 操作 HOOK 点介绍 | 集成 InLineHook )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向ART 函数抽取加壳 ③ ( 禁用 dex2oat 操作 HOOK 点介绍 | 集成 InLineHook )相关的知识,希望对你有一定的参考价值。

文章目录


两篇博客中 , 简单介绍了 禁用 dex2oat 机制 的原理 , 下面开始 实现 dex2oat 禁用功能 ;





一、禁用 dex2oat 操作 HOOK 点介绍



dex2oat 机制 的实现流程中 , 其中需要调用 exec_utils.cc 源码中的 ExecAndReturnCode 函数 , 在 ExecAndReturnCode 函数 中调用了 execve 函数 , 源码片段如下 :

int ExecAndReturnCode(std::vector<std::string>& arg_vector, std::string* error_msg) 
    if (envp == nullptr) 
      execv(program, &args[0]);
     else 
      execve(program, &args[0], envp);
    
    return -1;

源码地址 : http://aospxref.com/android-8.0.0_r36/xref/art/runtime/exec_utils.cc#ExecAndReturnCode ;





二、集成 InLineHook



在上个章节介绍的 exec_utils.cc 源码 编译后的二进制代码被封装到了 libc 库 中 ;


禁用 dex2oat 机制 , 需要 HOOK libc 库中的 execve 函数 , HOOK Java 代码 , 使用静态代理 或 动态代理 模式即可 , HOOK C 语言中的代码需要使用 InLineHook , 这里先集成 InLineHook ;

将 相关源码拷贝到 app\\src\\main\\cpp\\ 目录下 , 主要源码结构如下 :

CMakeLists.txt
│  native-lib.cpp
│
└─hook
    │  inlineHook.c
    │  relocate.c
    │  relocate.h
    │  TKHooklib.h
    │
    ├─dlfcn
    │      dlfcn_compat.c
    │      dlfcn_compat.h
    │      dlfcn_nougat.c
    │      dlfcn_nougat.h
    │
    └─include
            inlineHook.h

在 CMakeLists.txt 构建脚本中 , 进行如下配置 :

add_library( 
		# 设置函数库名称
        native-lib
        # 设置函数库类型 , 动态库
        SHARED
        # 指定 InLineHook 涉及到的 .c 源码
        hook/relocate.c
        hook/inlineHook.c
        hook/dlfcn/dlfcn_nougat.c
        hook/dlfcn/dlfcn_compat.c
        # 核心功能源码
        native-lib.cpp)

集成了 InLineHook 库之后 , 在 native-lib.cpp 中导入 inlineHook.h 头文件 , 就可以调用如下 内联钩子 InLineHook 函数 , 如 :

enum ele7en_status registerInlineHook(uint32_t target_addr, uint32_t new_addr, uint32_t **proto_addr);
enum ele7en_status inlineUnHook(uint32_t target_addr);
void inlineUnHookAll();
enum ele7en_status inlineHook(uint32_t target_addr);
void inlineHookAll();

以上是关于Android 逆向ART 函数抽取加壳 ③ ( 禁用 dex2oat 操作 HOOK 点介绍 | 集成 InLineHook )的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向ART 函数抽取加壳 ④ ( 对 libc.so#execve 函数进行内联 HOOK 操作 )

Android 逆向ART 函数抽取加壳 ⑤ ( unistd.h#execve 函数分析 | 使用自定义的 myexecve 函数替换 libc.so#execve 函数 )

Android 逆向ART 函数抽取加壳 ( ART 下的函数抽取恢复时机 | 禁用 dex2oat 机制源码分析 )

Android 逆向ART 函数抽取加壳 ② ( 禁用 dex2oat 简介 | TurboDex 中禁用 dex2oat 参考示例 )

Android 逆向加壳技术识别 ( 函数抽取 与 Native 化加壳的区分 | VMP 加壳与 Dex2C 加壳的区分 )

Android 逆向脱壳解决方案 ( DEX 整体加壳 | 函数抽取加壳 | VMP 加壳 | Dex2C 加壳 | Android 应用加固防护级别 )