• 0
  • 0
分享

Cydia Substrate是一个基于Hook的代码修改框架,其可以在Android、iOS平台使用,并实现修改系统默认代码。这里学习了下Cydia Substrate  hook框架在安卓平台的使用。


  一、原理介绍

  当然Xposed也能实现了对应的功能,但两者实现的技术手段有些不一样,由于Xposed开源,也有不少相关文章分析了实现方式,其主要原理是替换了/system/bin/app_process这个程序,在机子启动时加载自身的XposedBridge.jar完成对虚拟机的劫持。而Cydiasubstratet并不开源但根据比对两者"installer",我猜测Cydiasubstrate应该是采用注入的方式完成hook的: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提供了一个方法用来检测用户感兴趣的类何时被加载。

图1.jpg


  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);

  参数描述

  (一)

 图2.jpg

  (二)

图3.jpg


  建议开发者使用第二种方式,这种方式使用起来简单并且很少出错,不需要一个单独的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为cydia.permission.SUBSTRATE,value为下一步中创建的类名.Main


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

 

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

  1.  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);
}
}

   

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


最后一张图.jpg



作者:搜狗测试 臧亚敬  

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   随着IT行业的不断发展,软件测试人员的薪资待遇也随之增加,如何提升自己的专业技能,拓宽自己的职业发展道路并提升岗位薪资待遇才是每一位测试人员应该考虑的事情,那么这篇文章就来聊聊测试人员的职业发展方向有哪些?  一、技术方向  技术方向就是不断精进技术水平,时刻关注行业最新技术,并将这些知识作为自身将要学习的目标,相对来说,技术水平越高,拿到的薪资待遇也就越高。测试工程师按照技术水平分为功能测试工程师、自动化测试工程师、测试开发工程师。  从招聘网站上看到了企业招聘软件测试工程师的要求,长远来看,走技术路线一定要会编程语言,Java、Python、C/C++,并且数据库以及各种测试工具都要会...
            0 0 852
            分享
          • 读者提问:工作中大家用的比较多的测试用例管理工具有哪些呢 ?阿常回答:1、Excel 2、WPS3、Xmind4、GitMind5、MindMaster6、iMindMap7、MindNode8、MindLine9、zhimap10、Mindjet Maps11、思维简图12、3A 思维导图13、ProcessOn14、用例管理工具:PingCode、TestLink阿常碎碎念:阿常在平时工作中 1、13、14 使用得更多一些。1 用于本地写测试用例;13 用于在线写测试大纲;14 用于做测试用例管理。看完今天的分享对你是不是有所启发呢,有任何想法都欢迎大家后台私信阿常,一...
            0 0 828
            分享
          •   一段声称展示 iPhone 15 Pro 保护壳的新视频清楚地显示了静音开关是如何被"动作"按钮取代的。自 Apple Watch Ultra 推出该功能以来,有关新控制按钮的传言越来越多。继泄露 iPhone 15 普通系列的颜色之后,可靠的泄密者 Sonny Dickson 又在一段新视频中展示了 iPhone 15 Pro。  不过,手机壳上的"操作"按钮非常清晰,位于音量控制上方,取代了原来的静音开关。  早在 2022 年 10 月,分析师郭明錤(Ming-Chi Kuo)就声称,iPhone 15 Pro 上的所有控制按钮(音量和静音)都...
            0 0 528
            分享
          • 一、基本素质要求这里的基本素质包括比如逻辑思维能力、分析问题能力、沟通能力、协作能力、怀疑精神等方面。【软件测试】: 作为一名优秀的测试工程师,需要比较强的综合素质,具体包括比如“五心”,责任心、细心、耐心、专心、信心等,具体这里不阐述了,可以看我以前的相关文章;五大“学问”,逻辑学,很多公司在招聘的过程中会刻意来考察下测试工程师的逻辑思维能力。刑侦学,测试工程师需要通过分析问题的表象,借助专业的工具,良好的知识背景来分析问题背后深层次的根本原因。心理学,测试工程师,需要不仅仅站在用户的角度来测试,也需要清楚开发人员的心理,分析他们的出错模式。统计学,测试报告就是统计学知识很好的展现。经济学,...
            0 0 780
            分享
          • 近日界面新闻了解到,丰巢智能柜小程序已专门辟出“生活服务”专区,为丰巢进军的洗衣业务打起了广告。据丰巢方面透露,目前这一服务已经从深圳拓展至全国市场,但仍处于摸索阶段。快递柜作为物流最后一公里的服务形态之一,正与驿站产生竞争。但无论是快递柜还是驿站,目前都面临服务业态相对单一、投入成本较大的问题,盈利情况并不理想。根据丰巢智能柜小程序的信息,“丰巢洗护”服务内容包括衣物、鞋靴的通用洗护,以及干洗、水洗等专业分类洗护。这一定程度上增加了快递柜使用的场景。在使用“丰巢洗护”这一功能时,用户可以通过丰巢小程序下单,选择通过“投丰巢柜”和“上门取件”任一完成配送,之后等待衣物返还即可。其中“投丰巢柜”...
            0 0 557
            分享
      • 51testing软件测试圈微信