cydia java_使用Cydia Substrate 从Native Hook Android Java世界
手机端配置见之前文章。
一、建立工程
建立一个Android工程。不需要创建默认的Activity。修改AndroidManifest.xml如下:
uses-permission必须添加。这告诉Cydia_Substrate核心层,当前工程为Cydia_Substrate HOOK工程(大概就这意思)。
新建jni文件夹,用于编写so文件代码,NDK开发包建议下载版本较高的(低版本的需要cydia),我这里用的是R10。
从官网或者从这里下载cydia_substrate开发包。
将对应平台的libsubstrate-dvm.so和libsubstrate.so文件复制到jni目录。
将substrate.h文件复制到jni目录。
创建一个cpp文件,我这里创建Main.cy.cpp,参考代码如下:
#include MSConfig(MSFilterExecutable,"/system/bin/app_process")static jint (*_Resources$getColor)(JNIEnv *jni, jobject _this, ...);static jint $Resources$getColor(JNIEnv *jni, jobject _this, jint rid) {
jint color=_Resources$getColor(jni, _this, rid);return color & ~0x0000ff00 | 0x00ff0000;
}static void OnResources(JNIEnv *jni, jclass resources, void *data) {
jmethodID method= jni->GetMethodID(resources, "getColor", "(I)I");if (method !=NULL)
MSJavaHookMethod(jni, resources, method,&$Resources$getColor, &_Resources$getColor);
}
MSInitialize {
MSJavaHookClassLoad(NULL,"android/content/res/Resources", &OnResources);
}
简单解释一下:
MSConfig(MSFilterExecutable, "/system/bin/app_process")是告诉cydia_substrate需要HOOK哪个模块
_Resources$getColor是存旧函数地址。
$Resources$getColor是自定义的新的函数地址。HOOK后不会执行旧函数了,而直接进入自定义的新函数。
为了保证功能正确,自定义函数一般会调用旧函数。
jint color =_Resources$getColor(jni, _this, rid);return color & ~0x0000ff00 | 0x00ff0000;
这两句就是先调用旧函数,然后处理函数返回值。
MSInitialize是最初执行处。
MSJavaHookClassLoad(NULL, "android/content/res/Resources", &OnResources);
这句的意思是当加载android/content/res/Resources类时调用OnResources函数。
static void OnResources(JNIEnv *jni, jclass resources, void *data) {
jmethodID method= jni->GetMethodID(resources, "getColor", "(I)I");if (method !=NULL)
MSJavaHookMethod(jni, resources, method,&$Resources$getColor, &_Resources$getColor);
}这里就是当加载android/content/res/Resources时查找getColor函数。然后对其HOOK。
Android.mk文件配置如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= substrate-dvm
LOCAL_SRC_FILES := libsubstrate-dvm.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:=substrate
LOCAL_SRC_FILES :=libsubstrate.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=Main.cy
LOCAL_SRC_FILES := Main.cy.cppLOCAL_LDLIBS := -llog
LOCAL_LDLIBS+= -L$(LOCAL_PATH) -lsubstrate-dvm -lsubstrate
include $(BUILD_SHARED_LIBRARY)
最终jni文件夹内的文件如下:
二、编译代码
ndk环境配置好后,在cmd下进入jni目录。然后输入ndk-build。如果环境配置成功会有如下输出:
工程libs目录下会有对应平台的lib文件。
三、代码效果
四、相关下载
cydia java_使用Cydia Substrate 从Native Hook Android Java世界相关推荐
- cydia java_使用Cydia Substrate Hook Android Java世界
从来没接触过Android的HOOK,在看雪上找到了一篇HOOK 的文章,但是太复杂了,应该是本地环境问题,测试不成功. 后来搜到Cydia Substrate,看了几篇文章,进入官网查看了一下文档, ...
- 使用Cydia Substrate Hook Android Java世界
从来没接触过Android的HOOK,在看雪上找到了一篇HOOK 的文章,但是太复杂了,应该是本地环境问题,测试不成功. 后来搜到Cydia Substrate,看了几篇文章,进入官网查看了一下文档, ...
- Android编译源码hook,Hook Android C代码(Cydia Substrate)
本帖最后由 PJ头狼 于 2016-9-26 18:00 编辑 之前对于Cydia Substrate这个框架的使用及如何hook到Android的Java层,是在学习了鬼哥的Hook Android ...
- Android Native Hook工具
前言 在目前的安卓APP测试中对于Native Hook的需求越来越大,越来越多的APP开始逐渐使用NDK来开发核心或者敏感代码逻辑.个人认为原因如下: 安全的考虑.各大APP越来越注重安全性,NDK ...
- Android Native Hook
Hook 直译过来就是"钩子"的意思,是指截获进程对某个 API 函数的调用,使得 API 的执行流程转向我们实现的代码片段,从而实现我们所需要得功能,这里的功能可以是监控.修复系 ...
- android native hook简介
(一)简介 Android中的 Native Hook是一个非常吸引人的技术节点,诱使开发人员产生绚烂多彩的想法,并带来精彩的体验.在软件调试.逆向.安全等场景中得到采用,各大知名软件公司如byte ...
- hook android api伪造设备信息做刷量
hook android api伪造设备信息做刷量 概述 Android平台上app的统计数据都是基于Android的设备信息的,比如首次使用(激活),活跃(日活跃DAU,月活跃MAU)等都需要根据设 ...
- 注入安卓进程,并hook java世界的方法
说明: 安卓系统的可执行对象有两个世界,一个是Linux Native世界,一个是Java世界.两个世界能够通过jvm产生交互,具体来说就是通过jni技术进行互相干涉.但是在正常情况下,只能在Java ...
- Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...
最新文章
- linux 7 vsftpd 配置,CentOS7 安装并配置使用vsftpd
- 算法学习--Day3
- LeetCode 489. 扫地机器人(DFS)
- php字段验证规则,详解ThinkPHP中自动验证及验证规则
- db2 java驱动下载_IBM DB2 jdbc驱动
- Android 动画分类
- c语言中term,CTerm
- VB编程的RS485通讯操作界面源码 本程序适应各类带RS485通讯的设备,参数可以自由修改,主要是针对各类变频器RS485通讯(RTU)格式!
- System.Configuration.ConfigurationErrorsException:“配置系统未能初始化”
- C#线程 访问资源同步简介
- iOS App添加Spotlight搜索(附Swift Demo)
- 基于 BK 树的中文拼写纠错候选召回
- CSDN博客放阿里妈妈广告代码的方法
- 2022-5-17-验证外星语词典
- 制造业ERP系统如何帮助企业做好生产物料管控?
- android高效虚拟机调试方式
- Java训练work3.Exer3---去重与排序
- Windows 8.1新型启动方式“WIMBoot”基础简介以及初步探索
- UCOSIII---共享资源
- 【Cordova】Cordova第一个插件的创建与使用
热门文章
- 块元素和行内元素(初步)
- java excel api及详细教程_Java Excel Api及详细教程
- java有关物流管理的简历_谁能给我提供一份物流管理专业毕业生的个人模范简历...
- ARM外设 cortex-a8
- 【从0到1搭建LoRa物联网】2、终端设备开发方式
- 【教你区分】TVS二极管和稳压二极管的不同
- java文件损坏_用java下载文件 - 文件损坏
- 【漏洞学习——越权】Mtime时光网越权查看订单
- 软件测试工程师培训大纲(2020版)正式发布
- 不懂算法,还想进大厂?做梦吧(转载自微信公众号 -- 大飞码字)