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); 进行原来的调用,不影响程序运行

    }

使用cydia substrate 来进行android native hook的更多相关文章

  1. Android Native Hook技术(二)

    Hook技术应用 已经介绍了安卓 Native hook 原理,这里介绍 hook 技术的应用,及 Cyida Substrate 框架. 分析某APP,发现其POST请求数据经过加密,我们希望还原其 ...

  2. Android Native Hook技术(一)

    原理分析 ADBI是一个著名的安卓平台hook框架,基于 动态库注入 与 inline hook 技术实现.该框架主要由2个模块构成:1)hijack负责将so注入到目标进程空间,2)libbase是 ...

  3. 使用Cydia Substrate 从Native Hook Android Native世界

    同系列文章: 使用Cydia Substrate 从Native Hook Android Java世界 使用Cydia Substrate Hook Android Java世界 一.建立工程 手机 ...

  4. 使用Cydia Substrate 从Native Hook Android Java世界

    这里介绍了如何使用Cydia Substrate Hook安卓Java世界.这篇文章介绍如何从Native中Hook 安卓Java世界. 手机端配置见之前文章. 一.建立工程 建立一个Android工 ...

  5. Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解

    一.前言 在之前已经介绍过了Android中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点.需要逆向分析app即可.不 ...

  6. 利用Cydia Substrate进行Android HOOK(二)

    在前面关于Substrate的介绍中我们已经讲了用Substrate hook java代码,现在我们讲下怎么用它hook native代码.hook native代码我们需要编写Substrate ...

  7. 利用Cydia Substrate进行Android HOOK

    Cydia Substrate是一个代码修改平台.它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的.而Xposed只支持HOOK app_process中的java ...

  8. Android HOOK工具Cydia Substrate使用详解

    目录(?)[+] Substrate几个重要API介绍 MShookClassLoad MShookMethod 使用方法 短信监控实例   Cydia Substrate是一个代码修改平台.它可以修 ...

  9. Android上玩玩Hook:Cydia Substrate实战

    作者简介:周圣韬,百度高级Android开发工程师,博客地址:http://blog.csdn.net/yzzst 了解Hook 还没有接触过Hook技术读者一定会对Hook一词感觉到特别的陌生,Ho ...

随机推荐

  1. 自定义mysql函数时报错,[Err] 1418 - This function has none of DETERMINISTIC......

    今天在我执行自定义mysql函数的SQL时发生了错误,SQL如下: /** 自定义mysql函数 getChildList */delimiter //CREATE FUNCTION `pengwif ...

  2. Linux驱动 - 多线程之 完成量

    Linux 系统提供了一种比信号量更好的同步机制,即完成量(completion ,它用于一个执行单元等待另一个执行单元执行完某事. Linux 系统中与 completion 相关的操作主要有以下 ...

  3. PhoneGap打Android包报错

    1.下载AndroidSDK,安装 2.下载Phonegap,解压,为以后打包用 3.下载Node.js,安装 4.下载并安装Ant工具 5.配置环境变量 ANT_HOME=ANT主目录路径 PATH ...

  4. .Net Memory Profiler入门

    简介:http://www.cnblogs.com/wmlunge/archive/2013/01/08/2850809.html 实践: http://www.cnblogs.com/eaglet/ ...

  5. 图解JVM和Tomcat类加载机制

    说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷. 之前实习的时候学习javaMelody的源码,但是它是一个Maven的项目,与我们自己的web项目整合后无法直接断点调试.后来同 ...

  6. 问题:oracle case when;结果:Oracle CASE WHEN 用法介绍

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  7. 问题:C# TrimEnd 去掉最后的逗号;结果: C#中 TrimEnd()用法

    C#中 TrimEnd()用法 ①去除最后的逗号 string str=ab,cd,ef,; str=str.TrimEnd(new char[] { ',' }); 返回结果则是:ab,cd,ef ...

  8. 用JS,打印99乘法表

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. WKWebView的15条应用指南

    1.让一个web view充满屏幕 有时候你会看到有人向viewDidLoad()中添加代码,创建一个web view并让它充满整个可用区域.但这样效率很低,用起来很麻烦. 一个简单的方法是在你的视图 ...

  10. 一段PHP异常

    这是我写的一段代码,里面通过PHP异常功能,实现报错时显示出错代码所在行.当使用者操作出错时,截图给我,我可以很快得去追踪和排查错误! public function added_business_s ...