zoukankan      html  css  js  c++  java
  • 使用cydia substrate 来进行android native hook

     

    cydia不仅可以hook java代码,同样可以hook native代码,下面举一个例子来进行android native hook

    我是在网上找到的supermathhook这个项目,在他基础上修改的,本来是为了仓促应对阿里的ctf

    这个项目位置:

    这个项目是用来hook jni 代码的,而我是用来hook dvmDexFileOpenPartial这个函数的,所以必须使用

    Mshookfunction这个函数,这个函数在libsubstrate.so中,自己去官网下载就可以了。

    接下来将如何hook。

    首先:

    1. 指明要hook的lib :

    MSConfig(MSFilterLibrary,"/system/lib/libdvm.so")

    1. 在初始化的时候进行hook,具体如下:

      MSInitialize

      {

          

          __android_log_print(ANDROID_LOG_ERROR, TAG, "Substrate initialized.");

          MSImageRef image;

          image = MSGetImageByName("/system/lib/libdvm.so"); 载入lib

          if (image != NULL)

          {

              //注意这个是个c++函数,可以通过objdump来获取

              void * dexload=MSFindSymbol(image,"_Z21dvmDexFileOpenPartialPKviPP6DvmDex");

              if(dexload==NULL)

              {

                  LOGD("error find _Z21dvmDexFileOpenPartialPKviPP6DvmDex ");

              }

              else{

                  MSHookFunction(dexload,(void*)&mydvmdexfileopen,(void **)&olddexfileopen);·

              }

          }

          else{

              LOGD("ERROR FIND LIBDVM");

          }

      }

       

      相关其他的函数:

      int (* olddexfileopen)(const void * addr,int len,void ** dvmdex); 保留原来的地址

      int mydvmdexfileopen(const void * addr,int len,void ** dvmdex) 新的函数

      {

      LOGD("call my dvm dex!!:%d",getpid());

      { //write to file

           char buf[200];

           sprintf(buf,"/sdcard/dex.%d",random()); 导出dex文件

           FILE * f=fopen(buf,"wb");

           if(!f)

           {

               LOGD("error open sdcard file to write");

           }

           else{

               fwrite(addr,1,len,f);

               fclose(f);

           }

       

      }

      return olddexfileopen(addr,len,dvmdex); 进行原来的调用,不影响程序运行

      }

  • 相关阅读:
    vim7.1在windows下的编码设置[转]
    Swashbuckle(6.2.3)【Swagger(3.0)】 第一节
    Git命令集合
    ABP Framework(5.0.0rc) 第一节
    /var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录
    WPF中解决内存泄露的几点提示与解决方法
    用C#读取docx文件
    C#启动单个实例
    WPF学习心得(1):WPF进行动画后不能改变相对应的属性问题的解决
    [转]使WPF程序应用预置的控件风格, 如Aero, Luna, Royale, Classic等
  • 原文地址:https://www.cnblogs.com/baizx/p/4254359.html
Copyright © 2011-2022 走看看