从来没接触过Android的HOOK,在看雪上找到了一篇HOOK 的文章,但是太复杂了,应该是本地环境问题,测试不成功。

后来搜到Cydia Substrate,看了几篇文章,进入官网查看了一下文档,简直是神器,HOOK过程简洁,总共就几个关键API,使用起来特别方便。

于是在blog记录一下。

一、手机端配置

1.手机必须Root,我这里使用的是模拟器。(安利一波Genymotion模拟器,太好用了)

2.下载cydiasubstrate APK。(官网下载地址

二、测试代码

使用官网提供的例子。字少图多,我就不重述了。写下几个我遇到的错误:

1.新建安卓工程时不要默认添加的Activity。

2.Manifest文件application段的meta-data必须填写。

3.manifest节点需要填写package(官网没填写package,可能是eclipse版本问题,我装的eclipse默认填写了package,并且不可删除),主函数所在文件必须在这个package下,否则代码不会执行。

4.无论更新HOOK,还是卸载HOOK,最好都重启一下手机。(再次安利一波Genymotion模拟器,重启速度太快了)

三、效果图

四、附件

Manifest文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.cydiahookjava"
android:versionCode="1"
android:versionName="1.0" > <application android:label="@string/app_name" >
<meta-data
android:name="com.saurik.substrate.main"
android:value=".Main" />
</application> <uses-permission android:name="cydia.permission.SUBSTRATE" /> </manifest>

Java文件

package com.example.cydiahookjava;

import java.lang.reflect.Method;

import com.saurik.substrate.MS;

public class Main {
static void initialize() {
MS.hookClassLoad("android.content.res.Resources", new MS.ClassLoadHook() {
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);
}
}
});
}
}

测试工程下载地址

最新文章

  1. python 筛选股票
  2. CMD:在当前文件夹下打开cmd命令
  3. [学习笔记]lca-倍增
  4. Python开发程序:选课系统
  5. Quartus中添加时序约束
  6. 解决IE下jquery ajax无法获得最新数据的问题(IE缓存)
  7. Codeforces 296C Greg and Array
  8. windows下体验Redis
  9. 7 RandomAccessFile读取文件内容保存--简单例子(需要验证)
  10. android 上传文件
  11. 多个超链接a 选中的和不选中的两种样式
  12. 用git上传本地文件到github
  13. 从CentOS安装完成到生成词云python学习日记
  14. HDU [P1281]棋盘游戏
  15. JavaScript 常见错误
  16. CSS 隐藏页面元素的 几 种方法总结
  17. Confluence 6 Windows 中以服务方式自动重启为服务手动安装 Confluence 分发包
  18. mysql 主从模式总结(一)
  19. LOJ2537 PKUWC2018 Minimax 树形DP、线段树合并
  20. Java知多少(14)数组

热门文章

  1. doppia代码结构
  2. WPF学习笔记(7):DataGrid中数字自定义格式显示
  3. 商城管理系统项目(前台+后台+管理员+用户+html+jsp)
  4. vim 操作手册
  5. oracle 基本语法(一)
  6. java常见验证邮箱、电话号码、日期等格式
  7. override render 方法
  8. div鼠标悬停,子元素上移,鼠标移出,子元素下移动画。
  9. django-auth认证模块
  10. 只包含因子2 3 5的数(51NOD 1010)