hook in native

作者: 渣空格 | 来源:发表于2021-01-07 16:04 被阅读0次

hook in native

  • 找so的模块var base_myjni = Module.findBaseAddress("libmyjni.so");返回的是地址

  • 获取模块的导出函数 var n2 = Module.findExportByName("libmyjni.so", "n2");

  • thumb格式的地址需要+1

  • 附加函数Interceptor.attach

  • 打印so的内容

    • var module_libart = Process.findModuleByName("libart.so");
      var symbols = module_libart.enumerateSymbols();     //枚举模块的符号
      for (var i = 0; i < symbols.length; i++) {
          var name = symbols[i].name;
                  
      }
      
  • 将const char* 打印成string: prt(value).readCString()

  • hook libc的内容

    • function hook_libc() {
          //hook libc的函数
          var strcmp = Module.findExportByName("libc.so", "strcmp");
          console.log("strcmp:", strcmp);
          Interceptor.attach(strcmp, {
              onEnter: function (args) {
                  var str_2 = ptr(args[1]).readCString();
                  if (str_2 == "EoPAoY62@ElRD") {
                      console.log("strcmp:", ptr(args[0]).readCString(),
                          ptr(args[1]).readCString());
                  }
              }, onLeave: function (retval) {
              }
          });
      
      }
      
  • Frida api来写文件, 如果是要多次写的话 要先flush一下

    • 
      function write_reg_dat() {
      
          //frida 的api来写文件
          var file = new File("/sdcard/reg.dat", "w");
          file.write("EoPAoY62@ElRD");
          file.flush();
          file.close();
      }
      
  • 把c函数定义为NativeFunction来写文件

    • function write_reg_dat2() {
      
          //把C函数定义为NativeFunction来写文件
          var addr_fopen = Module.findExportByName("libc.so", "fopen");
          var addr_fputs = Module.findExportByName("libc.so", "fputs");
          var addr_fclose = Module.findExportByName("libc.so", "fclose");
      
          console.log("addr_fopen:", addr_fopen, "addr_fputs:", addr_fputs, "addr_fclose:", addr_fclose);
          var fopen = new NativeFunction(addr_fopen, "pointer", ["pointer", "pointer"]);
          var fputs = new NativeFunction(addr_fputs, "int", ["pointer", "pointer"]);
          var fclose = new NativeFunction(addr_fclose, "int", ["pointer"]);
      
          var filename = Memory.allocUtf8String("/sdcard/reg.dat");
          var open_mode = Memory.allocUtf8String("w+");
          var file = fopen(filename, open_mode);
          console.log("fopen file:", file);
      
          var buffer = Memory.allocUtf8String("EoPAoY62@ElRD");
          var ret = fputs(buffer, file);
          console.log("fputs ret:", ret);
      
          fclose(file);
      }
      

相关文章

  • frida native hook

    本篇介绍 frida 也支持hook native,本篇看下如何hook native hook native函数...

  • 热修复实现原理(二)

    热修复实现原理——native hook 一、native hook简介 直接在native层进行方法的结构体信息...

  • frida的几个常用工具

    1、hook native so的工具:frida_hook_libart https://github.com/...

  • Android Native Hook 检测

    通用Android Native Hook 检测 前言 Hook技术运用很广泛,从应用安全角度来看,Hook也是动...

  • hook in native

    hook in native 找so的模块var base_myjni = Module.findBaseAddr...

  • Cydia Substrate 使用

    前言 我们以前介绍过Xposed,这个只可以Hook java层,如果要hook native层就要使用Inlin...

  • Frida Hook

    - Hook Dlopen - Java堆栈打印 - Native堆栈打印 - HookJava中的loadLib...

  • Android Inline Hook详解

    Hook Hook在Android系统的应用根据框架层次可以分为两类,Java层和Native层,常见的实现方式如...

  • java层和native层

    java层的hook用java.use native层用interceptor.attach

  • Native Hook方案

    Hook翻译过来就是“钩子”的意思,是指截获进程对某个API函数的调用,使得API的执行流程转向到我们自己实现的代...

网友评论

    本文标题:hook in native

    本文链接:https://www.haomeiwen.com/subject/hxbzoktx.html