CydiaHook实例

  1. 设置权限和入口
<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>
  1. 导入 jar 包 substrate-api.jar 到 app/libs 目录下
  2. 新建一个类实现回调函数
import com.saurik.substrate.MS;
public class Main {
 static void initialize() {
 // ... code to run when extension is loaded
 }
}
  1. Hook 加载类
    使用 MS.hookClassLoad
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
 }
 });
 }
}
  1. 实现 Hook 方法
    使用 MS.hookMethod
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);
 }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,719评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,930评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,854评论 2 59
  • 说句实话,在没有接触到理财前,从没听人提醒过,婚后有意识要理财,刚开始所谓的理财无非是一个字“省”,总觉得省两件新...
    暗香疏影518阅读 157评论 0 0