第十章 Hook 与注入(四)(动态注入)

本文详细介绍了Android平台上的动态注入技术,包括SO动态库注入和DEX注入。SO动态库注入涉及编写Native代码,利用ptrace系统接口进行进程调试,将.so文件注入目标进程并执行特定函数。DEX注入则是在.so文件中使用JNI调用DexClassLoader加载DEX或APK。整个过程涉及目标进程的寄存器信息修改、内存分配和函数调用等操作。
摘要由CSDN通过智能技术生成

动态注入

  • 指将一段程序或一个完整的可执行文件加载到目标程序中
  • 和 Hook 的异同
    • 同:
      • 都会修改目标程序的运行时行为
    • 异:
      • Hook:用 Hook 框架对程序 Hook 后,会修改原方法或原函数的指针,让其转去执行 Hook 的方法
      • 动态注入:通过进程读写技术将一段代码或程序写进目标程序的内存空间,然后修改目标程序的指令指针,让加载的代码执行

so 动态库注入

  • 指将 so 动态库注入目标 APK,然后执行 so 动态库中的某个函数的技术

  • 步骤:

    • 编写 Native 代码,定义 so 加载后要执行的函数,将其编译为 so 文件。这一步用 AS 配合 Android NDK 完成
    • 编写注入程序,实现远程进程注入。注入程序用 Native 代码编写,要用到 ptrace 系统的进程调试接口函数
    • 将 so 文件注入目标进程
    • 运行 so 文件中指定的函数
  • 以下代码演示了 so 动态库注入的完整过程:

    int inject_remote_process(pid_t target_pid,
                              const char* library_path,
                              const char* function_name,
                              void* param, size_t param_size)
    {
         
    	...
    	if (ptrace_attach(target_pid) == -1)
    		return EXIT_SUCCESS;
    	if (ptrace_getregs(target_pid, &regs) == -1)
    		goto exit;
    	
    	// save original registers
    	memcpy(&old_regs, &regs, sizeof(regs));
    	
    	mmap_addr = get_romete_addr(target_pid,
                                    libc_path,
                                    (void
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值