利用Cydia Substrate进行Android HOOK (1)

Android逆向之旅—Hook神器Cydia Substrate使用详解 一、前言 在之前已经介绍过了Android中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点。需要逆向分析app即可。不了解Xposed框架的同学可以查看:Android中hook神器Xposed使用详解;关于hook使用以及原理不多解释了。今天我们再来看另外一个hook神器Cydia Substrate,关于这个神... 阅读详情

Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持HOOK app_process中的java函数,因此Cydia Substrate是一款强大而实用的HOOK工具。

官网地址:http://www.cydiasubstrate.com/

Demo地址:https://github.com/zencodex/cydia-android-hook

官方教程:http://www.cydiasubstrate.com/id/20cf4700-6379-4a14-9bc2-853fde8cc9d1

SDK下载地址:http://asdk.cydiasubstrate.com/zips/cydia_substrate-r2.zip

Substrate几个重要API介绍

MS.hookClassLoad 

函数原型:void hookClassLoad(String name, MS.ClassLoadHook hook);

该方法实现在指定的类被加载的时候发出通知。因为一个类可以在任何时候被加载,所以Substrate提供了一个方法用来检测用户感兴趣的类何时被加载。

     
  

参数

  
  

描述

  

name

包名+类名,使用java的.符号

hook

MS.ClassLoadHook的一个实例,当这个类被加载的时候,它的 classLoaded 方法会被执行。

MS.hookMethod 

该API允许开发者提供一个回调函数替换原来的方法,这个回调函数是一个实现了MS.MethodHook接口的对象,是一个典型的匿名内部类。它包含一个invoked函数。

函数原型:

void hookMethod(Class _class, Member member, MS.MethodHook hook, MS.MethodPointer old);
void hookMethod(Class _class, Member member, MS.MethodAlteration alteration);

参数描述

(一)

参数

描述

_class

加载的目标类,为classLoaded传下来的类参数

member

通过反射得到的需要hook的方法(或构造函数). 注意:不能HOOK字段 (在编译的时候会进行检测).

hook

MS.MethodHook的一个实例,其包含的invoked方法会被调用,用以代替member中的代码

(二)

     

  

参数

  
  

描述

  

_class

加载的目标类,为classLoaded传下来的类参数

member

通过反射得到的需要hook的方法(或构造函数). 注意:不能HOOK字段 (在编译的时候会进行检测).

alteration

An instance of MS.MethodAlteration whose boxedinvoked method will be called instead of member. This instance will also be filled in using information from   the original implementation, allowing you to use invoke to call the original method implementation.

建议开发者使用第二种方式,这种方式使用起来简单并且很少出错,不需要一个单独的MS.MethodPointer类实例。

使用方法

下面以官网的一个实例来说明cydia substrate的使用方法。该实例是实现将多个接口组件颜色修改为紫罗兰色。

需要安装:http://www.cydiasubstrate.com/download/com.saurik.substrate.apk

步骤一:创建一个空的Android工程。由于创建的工程将以插件的形式被加载,所以不需要activity。将SDK中的substrate-api.jar复制到project/libs文件夹中。

步骤二:配置Manifest文件

(1)需要指定权限:cydia.permission.SUBSTRATE

(2)添加meta标签,name为com.saurik.substrate.main,value为下一步中创建的类名(前面加“.”),此处为.Main

复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <meta-data android:name="com.saurik.substrate.main"
            android:value=".Main"/>
    </application>
    <uses-permission android:name="cydia.permission.SUBSTRATE"/>
</manifest>
复制代码

步骤二:创建一个类,类名为Main。类中包含一个static方法initialize,当插件被加载的时候,该方法中的代码就会运行,完成一些必要的初始化工作。

复制代码
import com.saurik.substrate.MS;
 
public class Main {
    static void initialize() { 
        // ... code to run when extension is loaded
    }
}
复制代码

步骤三:为了实现HOOK,达到修改目标类中的代码的目的,我们需要得到目标类的一个实例,如示例中的resources。

复制代码
public class Main {
    static void initialize() {
        MS.hookClassLoad("android.content.res.Resources", new MS.ClassLoadHook() {
            public void classLoaded(Class<?> resources) {
                // ... code to modify the class when loaded
            }
        });
    }
}
复制代码

步骤四:通过MS.MethodHook实例实现原代码的修改。

为了调用原来代码中的方法,我们需要创建一个MS.MethodPointer类的实例,它可以在任何时候运行原来的代码。

在这里我们通过对原代码中resources对象原始代码的调用和修改,将所有绿色修改成了紫罗兰色。

复制代码
public void classLoaded(Class<?> resources) {
Method getColor; 
try {
        getColor = resources.getMethod("getColor", Integer.TYPE);
    } catch (NoSuchMethodException e) {
        getColor = null;
    }
 
    if (getColor != null) {
        final MS.MethodPointer old = new MS.MethodPointer();
 
        MS.hookMethod(resources, getColor, new MS.MethodHook() {
            public Object invoked(Object resources, Object... args)
                throws Throwable
            {
                int color = (Integer) old.invoke(resources, args);
                return color & ~0x0000ff00 | 0x00ff0000;
            }
        }, old);
    }
}
复制代码

安装运行,重启系统后发现很多字体颜色都变了。如下图所示:

                 

示例中MS.hookMethod的代码可以改成:

复制代码
1 MS.hookMethod(resources, getColor, new MS.MethodAlteration<Resources, Integer>() {
2          public Integer invoked(Resources resources, Object... args)
3                  throws Throwable
4          {
5                  int color = invoke(resources, args);
6                  return color & ~0x0000ff00 | 0x00ffee00;
7          }
8 });
复制代码

短信监控实例

在下面的例子中我们实现了短信监听功能,将短信发送人、接收人以及短信内容打印出来:

复制代码
 1 import java.lang.reflect.Method;
 2 import android.app.PendingIntent;
 3 import android.util.Log;
 4 import com.saurik.substrate.MS;
 5  
 6 
 7 public class Main {
 8 
 9     static void initialize() {  
10 
11     MS.hookClassLoad("android.telephony.SmsManager", new MS.ClassLoadHook() {
12            
13 
14             @Override
15 
16             public void classLoaded(Class<?> SmsManager) {
17 
18                 //code to modify the class when loaded
19 
20             Method sendTextMessage;
21 
22             try {
23 
24                     sendTextMessage = SmsManager.getMethod("sendTextMessage",
25 
26                             new Class[]{String.class,String.class,String.class,PendingIntent.class,PendingIntent.class});
27                    
28 
29                 } catch (NoSuchMethodException e) {
30 
31                     sendTextMessage = null;
32 
33                 }
34 
35              MS.hookMethod(SmsManager, sendTextMessage, new MS.MethodAlteration() {
36 
37                  public Object invoked(Object _this,Object... _args) throws Throwable{
38 
39                      Log.i("SMSHOOK","SEND_SMS");
40 
41                      Log.i("SMSHOOK","destination:"+_args[0]);
42 
43                      Log.i("SMSHOOK","source:"+_args[1]);
44 
45                      Log.i("SMSHOOK","text:"+_args[2]);
46 
47                         return invoke(_this, _args);
48 
49                     }
50 
51             });
52            
53 
54             }
55 
56         });
57 
58     }
59 
60 }
复制代码

运行后的结果为:

 


原文地址: http://www.cnblogs.com/goodhacker/p/4014617.html

Cydia Substrate(iOS) 目录Cydia Substrate 简介Cydia Substrate 主要 API 讲解Cydia Substrate 其他注意点 Cydia Substrate 简介 相关链接 Cydia Substrate 官网地址 Cydia Substrate 维基百科(iphonedev) Cydia Substrate 开发者:Jay Freeman(Saurik) 什么是 Cydia Substrate? Cydia Substrate(原名:Mobile Substrate)实际上是一个框架,它允 阅读详情

相关推荐

android cydia使用教程,Android Hook工具Cydia Substrate使用

Hook简介:Hook就是钩子,在安卓中,就是在事件传送到终点前截获并监控事件的传输,像个钩子勾上事件一样,并且能够在勾上事件时,处理一些自己特定的事件。Cydia Substrate的官网定义:The powerful code modification platform behind Cydia.Cydia Substrate是一个代码修改平台,它可以修改任何主进程的代码,不管是用Java还是...

weixin_34624426的博客 1309

利用Cydia Substrate进行Android HOOK

Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持HOOK app_process中的java函数,因此Cydia Substrate是一款强大而实用的HOOK工具。 官网地址:http://www.cydiasubstrate.com/ Demo地址:https://github.com...

weixin_34200628的博客 446

Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解(1)

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 PDF(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。Java语言与原理;大厂,小厂。Android面试先看你熟不熟悉Java语言高级UI与自定义view。

2401_84537540的博客 1058

【iOS安全】Cydia Substrate(MobileSubstrate)介绍

【iOS安全】Cydia Substrate(MobileSubstrate)介绍

Juruo@Security 1802

Cydia Substrate之hook native代码

由于许多公司对APP的安全性越来越重视,因此很多公司的核心业务处理模块一般会采用NDK开发,通过jni机制调用C代码来实现模块功能。这种用C/C++开发出来的代码反编译分析的难度远远大于java开发,因为C/C++反编译过来的汇编语言可读性很差,这给反编译人员带来很大的挑战。 然而对于我这种初入逆向分析的菜鸟来说,每次看到native修饰的方法都觉得心里有道坎,尽管如此,我还是想在里面搞些文章,希望能分析出点成果~

生为码农,死亦码奴 1万+

Android下通过HOOK修改IMEI(基于Cydia substrate)

准备 Motorola MB525 Android 4.0.4 (CyanogenMod version 9-20121116-NIGHTLY-jordan) Android Studio 1.4.1Android SDK Manager  - Android 4.0.3(API15)  - Extras     - Cydia Substrate API Inst

kooder的专栏 5547

Android上玩玩Hook(1):Cydia Substrate初识

转自:http://blog.youkuaiyun.com/fei20121106/article/details/51881289 选自: Android上玩玩Hook?跟着鬼哥学Android java hook (一) 插桩的概念是以静态的方式修改第三方的代码,也就是从编译阶段,对源代码(中间代码)进行编译,而后重新打包,是静态的篡改;  而hook则不需要再编译阶段修改第三

Dijkstra的专栏 1379

Android Java层的hook检测(Cydia Substrate或者Xposed框架)

参考原文 http://d3adend.org/blog/?p=589 参考翻译 http://drops.wooyun.org/tips/16356 注意:原文中第3个方法“检测并不应该native的native方法”没用实现。 检测代码如下: import java.io.BufferedReader; import java.io.FileReader; import

u012131859的博客 7119

android 5.0.1 libdvm.so,Android Cydia Substrate hook用法

如果是exeMSConfig(MSFilterExecutable, "/system/bin/app_process")b. 初始化入口:MSInitialize{//TODO:模块安装后, Cydia会自动调用这里的代码,你可以在这里进行hook,也可以以后手动hookhook();}(3) 进行hook, 以hook libdvm.so里的dvmCallMethodV为例:void hook...

weixin_39669202的博客 218

Android逆向分析之Cydia

最近开始使用Cydia Substrate框架进行逆向分析。 Cydia是什么东东我就不说了,自行百度,这里只是通过一个例子,介绍如何使用Cydia Substrate框架进行hook Android java代码。 相比Xposed框架,Cydia是有一定的优势的,根据我目前使用的情况,暂时有如下两点: 一是,Cydia能hook除了第一个smali文件夹外的第二第三个smali文件夹。

生为码农,死亦码奴 2676

Native层Hook利器Cydia Substrate深度解析与实战

Cydia Substrate 虽然诞生于越狱 iOS 生态,但它所代表的运行时动态插件化思想正在深刻影响着现代 Android 安全与自动化领域。尽管随着 Android 版本升级(尤其是 Scoped Storage、SELinux 强化、dlopen 符号隐藏等机制),传统 Hook 技术面临越来越多限制,但 Substrate 通过以下方式持续进化:Magisk 模块化部署:实现 systemless 注入,无需修改系统分区;多阶段 Hook 时机控制。

weixin_32747681的博客 875

(4.2.33)Android上玩玩Hook(1):Cydia Substrate初识

选自: Android上玩玩Hook? 跟着鬼哥学Android java hook (一) 摘要:Hook的出现为开发者希望通过一个程序改变其他程序的某些行为的想法开拓了解决道路,而作为一款基于Hook的代码修改框架,Cydia Substrate可以修改任何主进程的代码,本文作者以广告注入的实战详细介绍了Hook的过程。 了解Hook还没有接触过Hook技术读者一定会对Hook一词感觉到特别

JAVA成长之路 5188

怎么选?一文读懂12种SPC控制图,从基础到进阶,再到Python代码实现

本文系统介绍了12种常用SPC控制图的应用场景和特点,包括计量型(Xbar-R图、Xbar-s图、I-MR图等)、计数型(P图、NP图、U图等)及进阶控制图(EWMA图、CUSUM图、多元控制图)。文章强调控制图是SPC的核心工具,能有效区分过程变异类型,实现"预防优于检测"的质量管理目标。通过数据示例和Python代码展示了各类控制图的实现方法,为质量管理人员提供了实用参考。

m0_56592100的博客 4115

(4.2.33.1)Android上玩玩Hook(2):Cydia Substrate演练

选自: 跟着鬼哥学android java hook(二) 简单android病毒分析并实现其效果 根据上文的内容,我们基本可以总结出Cydia Substrate的使用步骤,在本章节继续做一些演练 Cydia Substrate的使用一般步骤 AndroidManifest.xml配置使用Cydiasubstrate相关的配置与权限 获取欲勾的第三方包的类名 主类操作,其中initialize(

JAVA成长之路 888

【元宵快乐】猜灯谜吃元宵 元气满满闹元宵~(附猜灯谜小游戏)

导语 元宵节,又称上元节、灯节,是春节之后的第一个重要节日。 相传,汉文帝(前179—前157年)为庆祝周勃于正月十五勘平诸吕之乱,每逢此夜,必出宫游玩,与民 同乐,在古代,夜同宵,正月又称元月,汉文帝就将正月十五定为元宵节。 随着社会和时代的变迁,元宵节的风俗习惯在不断变化,但至今仍是中国的传统节日。2008年, 元宵节选入第二批国家级非物质文化遗产。 对我而言,除了吃元宵、看花灯……还有一件最重要的事情…就是… 猜灯谜!猜灯谜!!猜灯谜!!!猜谜事小,展现聪明才智事大哈哈哈.jpg .

顾木子吖的博客 2097

500道C++面试高频题解析(附答案、实战示例与进阶追问)

本文提供500道C++面试高频题的详细解析,涵盖基础概念到进阶应用,包括面向对象编程、内存管理、现代C++特性、并发编程等核心考点。每道题配有实战示例和进阶追问,帮助开发者突破八股文局限,掌握解决实际问题的能力,适合准备C++技术面试的工程师系统复习。

weixin_29002595的博客 310

Cydia Substrate框架Android so hook分析

最近需要用到Android so hook,于是分析了一下比较流行的Cydia Substrate框架          CydiaSubstrate框架的核心函数是MSHOOKFunction,官方使用说明如下:          现在Android 默认编译出来的都是thumb指令集的,就分析一下这个模式下的HOOK吧。          在使用MSHOOKFun

燕十二的BLOG 4784

基于STM32F407的DDS信号源设计与实现:DAC+DMA+TIM的高精度波形生成

本文详细介绍了基于STM32F407微控制器实现高精度DDS信号源的完整方案。通过结合DAC、DMA和TIM外设,并运用DDS算法,实现了分辨率高达0.001Hz的波形生成。文章深入剖析了相位累加器、波表查表等核心原理,提供了从CubeMX配置到代码实战的完整指南,并探讨了性能优化与高频输出问题的解决方案。

weixin_29193259的博客 501

cydia java_利用Cydia Substrate进行Android JAVA HOOK

简介Cydia Substrate是一个很强大的工具,他提供了很便利的方法帮助你去hook so和java中的方法。另外,Cydia Substrate能hook java的方法和构造函数,但是不能hook字段。在本例中,出于学习的目的,我复用了官网的文档中的例子。主要功能是hook了java.net.InetSocketAddress类的构造函数,然后把6667端口的连接重定向到7001端口。构...

weixin_42375011的博客 243

【电磁场与电磁波课程设计】基于HFSS的双频微带天线仿真及设计

第五代移动通信技术(5G)的商用已经近在眼前,作为移动通信中最为重要的功能组件,面向5G通信应用的手机天线与基站天线的技术研究与设计成为近年来的热点。随着移动通信中“跳频”“扩频”等通信技术发展,为了满足与多个终端的通信要求,实现多系统共用和收发共用等功能,这就要求天线在不同频段下工作。根据国家工信部的最新规定,5G移动通信的中频段被划定在3.3 GHz-3.5 GHz及4.8 GHz-5.0 GH,面向5G移动通信的天线应具有高增益、小型化、宽频段及高隔离度等技术特征,以满足5G通信的高传输速率、波束智能

weixin_44450575的博客 1万+

电力现货交易市场-报价方式

电是一种能源,也是一种商品,既然是商品自然可以在市场中进行自由交易。

qq_38225433的博客 5117

Android编译源码hook,Hook Android C代码(Cydia Substrate)

本帖最后由 PJ头狼 于 2016-9-26 18:00 编辑之前对于Cydia Substrate这个框架的使用及如何hook到Android的Java层,是在学习了鬼哥的Hook Android Java这几天自己开始深入来学习Cydia Substrate这个框架在Hook Android C上的使用,但一开始对Android native的开发不怎么了解,所以直接通过学习这方面的博文容易碰...

weixin_39851872的博客 358

Python编程基础05:运算符与表达式

文章目录一、算术运算符1、分类说明表2、注意事项3、案例演示任务1、计算成绩差与平均成绩课堂练习:编程处理带余除法。任务2、打印购物小票 运算符就是专门用于告诉程序执行特定运算或逻辑操作的符号。表达式是指由常量、变量和运算符组成的一个算式。编写程序对数据进行处理,其实处理就是对数据实施各种各样的运算,搞懂运算符与表达式是我们编写程序的基础性工作,本次讲课笔记通过案例讲解各种运算符的用法以及正确书写Python表达式的注意事项。 一、算术运算符 Python中的算术运算符就是用来处理四则运算的符号,也是

howard2005的专栏 3119

安卓c语言hook,Hook Android C代码(Cydia Substrate)

本帖最后由 PJ头狼 于 2016-9-26 18:00 编辑之前对于Cydia Substrate这个框架的使用及如何hook到Android的Java层,是在学习了鬼哥的Hook Android Java这几天自己开始深入来学习Cydia Substrate这个框架在Hook Android C上的使用,但一开始对Android native的开发不怎么了解,所以直接通过学习这方面的博文容易碰...

weixin_28607671的博客 489

python乘法运算 信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

本文解析了全国青少年信息素养大赛Python编程挑战赛的乘法运算题目。题目要求通过递归算法实现两个自然数的乘法运算,并输出算式。算法分析指出可将乘法转化为累加,使用递归函数实现。程序代码展示了一个自定义函数add(),通过递归调用完成累加运算。文章还分析了考点,包括递归函数、输入处理、分支语句等编程基础知识的应用。最后强调解题方法的多样性,重点在于理解递归原理和实现题目要求。该题目难度适中,主要考查选手对递归算法的理解和编程基础能力。

青少年编程学习指导 787

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

利用Cydia Substrate Hook移动MM支付

关于Cydia Substrate Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持HOOK app_process中的java函数,因此Cydia Substrate是一款强大而实用的HOOK工具。 官网地址:http://www.cydiasubstrate.com/ De

随笔日志 3786

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: “蜥蜴之尾”——长老木马四代分析报告
下一篇: 利用Cydia Substrate进行Android HOOK(2)
Omni-Space
博客等级 码龄11年 2158粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值