首页 > 其他分享 >xposed是怎么hook的,举个简单详细的例子

xposed是怎么hook的,举个简单详细的例子

时间:2023-11-07 18:56:20浏览次数:37  
标签:Xposed xposed 应用程序 hook 举个 模块 信件 方法 getUserName

Xposed框架通过替换Android系统中的一些关键组件来实现其功能,具体而言,它修改了/system/bin/app_process程序,这是在启动Zygote时用来启动应用程序的系统进程。Xposed的核心组件在系统启动时加载,然后它提供了一个运行时可插拔的基础设施,允许Xposed模块在运行时修改应用程序和系统服务的代码。

 

Xposed工作原理可以分为以下几个步骤:

 

加载Xposed框架:当设备启动时,修改过的app_process加载Xposed框架。

挂钩(Hooking)方法:Xposed框架允许模块钩住(hook)任何应用程序或系统进程中的方法调用。

方法替换:当被钩住的方法被调用时,Xposed允许模块执行自定义代码,甚至完全替换原方法的实现。

执行原方法(可选):在执行自定义代码后,Xposed模块可以选择是否调用原始方法的实现。

一个简单的例子

假设我们有一个应用程序,里面有一个名为getUserName的方法,它返回用户的名称。我们想要创建一个Xposed模块来更改返回的用户名。

 

原始方法:

 

public String getUserName() {

  return "Alice";

}

 

使用Xposed框架,我们可以创建一个模块,该模块"钩住"了getUserName方法,并返回一个不同的名字:

 

@Override

public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {

  if (lpparam.packageName.equals("com.example.app")) {

    findAndHookMethod("com.example.app.MainActivity", lpparam.classLoader, "getUserName", new XC_MethodHook() {

      @Override

      protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

        // 在原方法执行前

      }

 

      @Override

      protected void afterHookedMethod(MethodHookParam param) throws Throwable {

        // 改变原方法的结果

        param.setResult("Bob");

      }

    });

  }

}

 

在这个例子中,当getUserName方法被调用时,原本应该返回"Alice",但是由于Xposed模块的干预,现在返回了"Bob"。

 

比喻

将Xposed的工作原理比作邮局处理邮件可以帮助理解:

 

想象每次你发信(调用方法)时,邮局(Xposed框架)会检查信件(方法调用)。如果信件地址符合特定模式(钩住的方法),邮局工作人员(Xposed模块)会根据一些规则(自定义代码)修改信件内容(方法的返回值或参数),甚至决定不发送原来的信件,而是发送一个全新的信件(完全替换原方法)。整个过程对于发信人(应用程序)来说是透明的,他们并不知道信件在发送过程中已经被修改过了

作者:http://xkrj5.com 纯原创首发,转载保留版权!!!

标签:Xposed,xposed,应用程序,hook,举个,模块,信件,方法,getUserName
From: https://www.cnblogs.com/xkrj5/p/17815662.html

相关文章

  • js怎么向html中的某个标签添加内容?举个简单能动的例子
    在JavaScript中,你可以通过多种方式向HTML元素添加内容。以下是两种常见的方法:innerHTML:这个属性用来获取或替换HTML元素的内容。appendChild():这个方法用来向节点添加最后一个子节点。以下是一个简单的例子,展示了如何使用这两种方法:假设你有这样一个HTML结构:<!DOCTYPEhtml......
  • js设置元素不可见怎么设置,举个简单的例子
    在JavaScript中,你可以通过改变元素的样式属性来设置元素的可见性。通常有两种方法可以设置元素不可见:使用 visibility 属性: 设置为 hidden,元素会变得不可见,但它仍然占据原来的空间。使用 display 属性: 设置为 none,元素不仅不可见,而且不再占据页面布局的空间。下面是......
  • js给元素添加id,动态方式,举个简单例子
    在JavaScript中,如果你想动态地给一个已经存在的元素添加一个id属性,你可以通过获取那个元素的引用,然后设置它的id属性来实现。这里是一个简单的例子,它展示了如何给一个div元素动态添加一个id://假设我们有一个这样的HTML元素://<div>这是一个div</div> //首先,获取那个要添加i......
  • APP攻防--安卓逆向&JEB动态调试&LSPosed模块&算法提取&Hook技术
    JEB环境配置安装java环境变量(最好jdk11)安装adb环境变量设置adb环境变量最好以Android命名启动开发者模式设置-->关于平板电脑-->版本号(单机五次)开启USB调试设置-->系统-->高级-->开发者选项-->USB调试开启USB调试目的是为了后续让JEB能够获取模拟器上的进程......
  • Windows ObjectType Hook 之 SecurityProcedure
    1、背景  ObjectTypeHook是基于ObjectType的一种深入的Hook,比起常用的SSDTHook更为深入。  有关ObjectType的分析见文章《Windows驱动开发学习记录-ObjectTypeHook之ObjectType结构相关分析》。  这里进行的Hook为其中之一的SecurityProcedure。文章实......
  • java实现多线程执行的方法,举个简单的例子
    在Java中实现多线程可以通过以下两种主要方式:继承 Thread 类实现 Runnable 接口下面我将通过这两种方式分别提供一个简单的例子,并解释每一步的执行过程。继承 Thread 类这是通过创建 Thread 类的子类,并覆盖其 run 方法来实现的。//第一步:创建一个扩展自Thread......
  • 如何通过java程序访问数据库,举个简单的例子,提供执行过程
    要通过Java程序访问数据库,你需要使用JDBC(JavaDatabaseConnectivity)API,它是一个用于执行SQL语句的JavaAPI。以下是使用JDBC访问数据库的基本步骤,以及一个简单的示例,该示例连接到数据库并执行一个查询。步骤:加载数据库驱动:这是告诉JVM使用哪个数据库驱动。建立连接:使用数据库......
  • Vue3 中的hook函数和 toRef(toRefs)
    一、自定义hook函数  1、什么是hook?      本质是一个函数,把setup函数中使用的CompositionAPI进行了封装  2、类似于vue2.x中的mixin  3、自定义hook的优势:复用代码,让setup中的逻辑更清楚易懂。二、toRef  1、作用:创建一个ref对象,其valu......
  • '/webhook'​​​是你的服务器上的一个路径,当有人发送POST请求到这个路径时,​​webhoo
    在这段代码中,'/webhook'是你的服务器上的一个路径,当有人发送POST请求到这个路径时,webhook()函数就会被调用。你可以根据你的需求来选择这个路径,只要它在你的服务器上是唯一的。例如,如果你的服务器的URL是http://myserver.com,那么当飞书机器人发送POST请求到http://myserver.com/web......
  • Windows ObjectType Hook 之 OkayToCloseProcedure
    1、背景  ObjectTypeHook是基于ObjectType的一种深入的Hook,比起常用的SSDTHook更为深入。  有关ObjectType的分析见文章《Windows驱动开发学习记录-ObjectTypeHook之ObjectType结构相关分析》。  这里进行的Hook为其中之一的OkayToCloseProcedure。文......