文章目录

  • 环境
    • 夜神(Android5.1)
    • XposedInstaller(这里我用的是夜神软件商店下载的)
      • 下载后直接点击version进行install
    • 插件(i春秋教程教导)
  • 过程
    • 导入(注意这里不是libs,而是新建的lib)lib文件XposedBridgeApi-54.jar(把implemention改为provided模式,也就是不参与编译到最终文件中)
      • 原来:
      • 更改:
    • AndroidManifest.xml文件编写
    • 入口类编写
    • 回调函数编写
    • 设置启动入口
    • 安装激活插件,重启即看到插件效果
  • 实战
    • times类
    • hook掉times类中的test函数,让它不再调用
  • hook前(无这行代码param.setResult(null);)
  • hook后(有这行代码param.setResult(null);)
  • classLoader

环境

夜神(Android5.1)

XposedInstaller(这里我用的是夜神软件商店下载的)


点击立即安装就行,切记:不要再去稀奇古怪找一些其它版本的,那样没办法激活的(即使有,也得费半天劲),自带的直接双击式安装

下载后直接点击version进行install


然后就会显示已激活

插件(i春秋教程教导)

过程

导入(注意这里不是libs,而是新建的lib)lib文件XposedBridgeApi-54.jar(把implemention改为provided模式,也就是不参与编译到最终文件中)

原来:

更改:

AndroidManifest.xml文件编写

         <meta-data android:name="xposedmodule" android:value="true"/><meta-data android:name="xposeddescription" android:value="模块说明"/><meta-data android:name="xposedminversion" android:value="54"/>

<meta-data android:name="xposedmodule" android:value="true"/>

true的话,xposed尝试去加载apk作为插件的一部分

 <meta-data android:name="xposeddescription" android:value="模块说明"/>

<meta-data android:name="xposedminversion" android:value="54"/>


或者在assets目录下的version文件里

入口类编写

package com.example.xposed;
import android.app.Application;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.callbacks.XC_LoadPackage;import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;public class XposedEntry implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam Param) throws Throwable {findAndHookMethod("com.example.xposed.times",Param.classLoader,"test", Application.class,new myget_times());}
}class myget_times extends XC_MethodHook{protected void beforeHookedMethod(MethodHookParam param) throws Throwable {param.setResult(null);}protected void afterHookedMethod(MethodHookParam param) throws Throwable {}}

创建一个类继承IXposedHookLoadPackage,然后把接口函数handleLoadPackage进行相应的重写

 findAndHookMethod("com.example.xposed.times",Param.classLoader,"test", Application.class,new myget_times());

hook函数的思路是先找到类,然后再近一步找到函数, findAndHookMethod的第一个参数是函数所在的类名(包名+类名),第二个参数Param.classLoader类装载器,第三个参数是函数名,第四个参数是函数所需要的参数(参数类型+class),第五个参数是回调函数(还需近一步实现)

回调函数编写

class myget_times extends XC_MethodHook{protected void beforeHookedMethod(MethodHookParam param) throws Throwable {param.setResult(null);}protected void afterHookedMethod(MethodHookParam param) throws Throwable {}}

创建一个类,继承XC_MethodHook,然后对beforeHookedMethod(函数调用前操作,举例 :直接让它别调这个函数)和afterHookedMethod(函数调用后操作,举例:直接把返回值(返回值在param中)更改再进行返回)

设置启动入口

创建assests文件,在文件夹中,新建xposed_init文件,写入入口类的信息


安装激活插件,重启即看到插件效果

可以看到,xp是在程序启动的时候同时加载的,因此它的钩子函数是区分进程的。如果有想对特定进程下钩的话可以很方便使用xposed。而挂钩函数方面可能没有Cydia那样容易写,不过有一个优点是,对于程序的类和参数,可以通过名字来进行下构。比如说,对于String类,类名是java.lang.String,那么传递的参数可以使“java.lang.String”,与传递String.class效果是一样的

xp的Hook分为函数执行前,和执行后两个位置,可以分别进行参数修改和结果修改。如果不想进行调用的话,可以在执行前使用setResult(NULL)参数

实战

times类

package com.example.xposed;
import android.app.Application;
import android.widget.Toast;import static android.widget.Toast.LENGTH_LONG;public class times {public   void test(Application a){Toast.makeText(a, "点击成功",LENGTH_LONG).show();}}

hook掉times类中的test函数,让它不再调用

package com.example.xposed;import android.app.Application;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.callbacks.XC_LoadPackage;import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;public class XposedEntry implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam Param) throws Throwable {findAndHookMethod("com.example.xposed.times",Param.classLoader,"test", Application.class,new myget_times());}
}class myget_times extends XC_MethodHook{protected void beforeHookedMethod(MethodHookParam param) throws Throwable {param.setResult(null);}protected void afterHookedMethod(MethodHookParam param) throws Throwable {}

hook前(无这行代码param.setResult(null);)


hook后(有这行代码param.setResult(null);)

classLoader

与java上的类似,就是一个类装载器,与java不同的是,classLoader所加载的就是dex文件本身,所以通过程序的classLoader,可以取得程序的classLoader,可以取得程序的dex中所定义的所有类以及成员函数。同理,如果一个程序有多个dex,那么则会对应着多个classLoader,特别是使用动态加载的dex,则需要传递想要的classLoader才可以进行数据获取,这点请注意。

Xposed框架实战相关推荐

  1. vivo7.0系统机器(亲测有效)激活Xposed框架的教程

    对于喜欢搞机的机友来说,常常会使用到Xposed框架和种种功能牛逼的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活Xposed框架是异常轻松的,但随着系统版本的升级,5.0以后 ...

  2. java ee核心框架实战 pdf_Java EE核心框架实战 高洪岩 中文PDF

    资源名称:Java EE核心框架实战 高洪岩 中文PDF 第1章 MyBatis 3操作数据库 第2章 MyBatis 3常用技能 第3章 Struts 2必备开发技能 第4章 Struts 2文件的 ...

  3. 7.0系统设备xposed框架激活经验

    XPOSED框架基本介绍 xposed框架是基于Android系统平台的神器,大伙能够通过安装框架对应的功能模块来达到各种神奇的功能以及对系统各种底层的修改. 如何在Android系统上安装激活xpo ...

  4. 8.0系统安装Xposed框架失败Xposed framework version XX is installed

    在使用xposed框架的时候,对于新用户来说,会通常遇到这个问题,即下载完xposed Installer之后,点击框架的时候,会跳出如下警告: The Xposed framework is not ...

  5. 华为9.0以上系统如何没root激活XPOSED框架的流程

    在大多运行室的引流或者业务操作中,理论上需要使用安卓的高端技术XPOSED框架,最近我们运行室买来了一批新的华为9.0以上系统,理论上都是基于7.0以上系统版本,理论上不能够获取Root的su权限,即 ...

  6. 三星6.0系统手机最简单激活XPOSED框架的教程

    对于喜欢玩手机的朋友来说,经常会接触到Xposed框架及其种种功能强悍的模块,对于5.0以下的系统版本,只要手机能获得root权限,安装和激活Xposed框架是比较简单的,但随着系统版本的不断更新,5 ...

  7. vivo系统如何没root激活Xposed框架的经验

    在非常多公司的引流,或业务操作中,基本上都需要使用安卓的大神级xposed框架,近期,我们公司购买了一批新的vivo系统,基本上都都是基于7.0以上系统版本,基本上都不能够刷入ROOT超级权限,即使有 ...

  8. 《Java EE核心框架实战》—— 2.3 resultMap 标签

    本节书摘来异步社区<Java EE核心框架实战>一书中的第2章,第2.3节,作者: 高洪岩,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.3 < re ...

  9. 华为9.0系统机器一键激活xposed框架的流程

    对于喜欢钻研手机的小伙伴而言,经常会使用到Xposed框架及其种类繁多功能彪悍的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活Xposed框架是非常简易的,但随着系统版本的不断 ...

最新文章

  1. Shell脚本的调试技术
  2. HTML, CSS, Javascript, jQuery之间的关系
  3. Maven项目在pom文件中引入lib下的第三方jar包并打包进去
  4. 什么是Zero-Copy?
  5. linux svn 常用命令
  6. Python实现人脸识别 + 手机推送功能,老板来了你就会收到短信提示
  7. 精通CSS高级Web标准解决方案(第2版)学习笔记
  8. 医疗护理与监测 智能可穿戴发展的另一个方向
  9. python数据框拼接_pandas数据拼接的实现示例
  10. vue页面回显数据_解决vue表单回显数据无法修改的问题
  11. Android图片处理神器BitmapFun源码分析
  12. Python collections模块总结
  13. 静态库和动态库的区别
  14. 一般物体检测--Binarized Normed Gradients for Objectness Estimation at 300fps
  15. 四、Sensor组成
  16. 国企直招,内推! 科陆电子--嵌入式工程师/C# 工程师
  17. 系统内存占用率高导致电脑卡顿的解决方案
  18. odoo:开源 ERP/CRM 入门与实践
  19. [转载]常用自动挂机APP下载
  20. ZZ,春晚零点报时出错揭密

热门文章

  1. 海峡两岸消防专家论坛台湾举行
  2. 成功解决_catboost.CatBoostError: Bad value for num_feature: Cannot convert ‘b‘\x8f\x91‘‘ to float
  3. Py之Seaborn:数据可视化Seaborn库的柱状图、箱线图(置信区间图)、散点图/折线图、核密度图/等高线图、盒形图/小提琴图/LV多框图的组合图/矩阵图实现
  4. 成功解决ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any(
  5. ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析、特征工程、科学预测等)的简介、流程、案例应用执行详细攻略
  6. 成功解决Git Bash运行脚本命令下载文件到默认C盘路径的问题
  7. Python封装发送信息到钉钉群
  8. (转载)虚幻引擎3--【UnrealScript教程】章节一:8.Enums
  9. 将可执行程序的内存空间扩展到3GB(windows)
  10. Android直播app用什么技术可以做到延迟小一些?