HOOK框架原理实现
来源:互联网 发布:影视播放软件 编辑:程序博客网 时间:2024/06/05 21:54
原理
Xposed替换了/system/bin/app_process可执行文件,在启动Zygote时加载额外的jar文件(/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar),并执行一些初始化操作(执行XposedBridge的main方法)。然后我们就可以在这个Zygote上下文中进行某些hook操作。
安装XposedInstaller
- 下载XposedInstaller
- 安装。安装完会提示重启手机。如果是虚拟机要选择
软重启
,真实手机要选择硬重启
,千万不要搞反。 注:手机启动会比较慢,但如果手机重启时卡在欢迎界面,可以通过连续按电源键来跳过Xposed加载。
开发Xposed项目
1. Xposed module基础
Xposed程序称为module,它是包含一些特殊元数据和文件的android项目。建议使用android SDK 4.0.3 (API 15)进行开发。 一个Xposed module项目结构如下:
其中/assets/xposed_init文件指定了module的入口类,开发者要在这个类中实现需要的hook代码。这个类要实现特定的XposedBridge接口。 /assets/xposed_init内容:
com.example.xmodule.car.XModule
AndroidMannifest.xml内容:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.Xmodule" android:versionName="1.0" android:versionCode="1"> <uses-sdk android:minSdkVersion="15"/> <application android:icon="@drawable/icon" android:label="@string/app_name"> <meta-data android:name="xposedmodule" android:value="true"/> <meta-data android:name="xposeddescription" android:value="Xposed模块示例"/> <meta-data android:name="xposedminversion" android:value="54"/><!-- 对应的XposedBridge版本号 --> </application></manifest>
注意: Xposed module项目在开发时导入了XposedBridge jar文件,但编译时要去掉,否则因为在Zygote中已经导入该jar文件而导致类冲突。
2. 一个简单的示例
开发一个xposed module来修改手机imei,imsi。
- 新建一个普通的android项目,添加依赖XposedBridge.jar(源码下载),scope为Provided。
- 在AndroidManifest.xml中添加Xposed元数据
- 编写 /assets/xposed_init文件
- 编写hook代码
public class XModule implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { //只hook测试app if (lpparam.packageName.equals("com.example.test")) { XposedHelpers.findAndHookMethod(TelephonyManager.class, "getDeviceId", new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { return "this is imei"; } }); XposedHelpers.findAndHookMethod(TelephonyManager.class, "getSubscriberId", new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { return "this is imsi"; } }); } }}
3. 运行module
module的安装与普通app一样,如果没有编写Activity,模块不会显示在launcher中。但可以在XposedInstaller应用中看到安装的module;另外module的启用与停止都需要在XposedInstaller中进行配置,配置完还需要重启才能生效。
4. 运行结果
test app的Activity代码
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView tv1 = (TextView) findViewById(R.id.tv1); final TextView tv2 = (TextView) findViewById(R.id.tv2); TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); tv1.setText("imei: "+tm.getDeviceId()); tv2.setText("imsi: "+tm.getSubscriberId()); }
运行结果如下:
0 0
- HOOK框架原理实现
- 安卓 HOOK框架原理实现
- API HOOK的实现原理
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- RING3代码HOOK的原理实现
- inline hook的原理及实现
- android hook 框架 xposed 如何实现注入
- Android Hook框架Xposed原理与源代码分析
- Android Hook框架Xposed原理与源代码分析
- Android Hook框架Xposed原理与源代码分析
- Android Hook框架Xposed原理与源代码分析
- Android Hook框架Xposed原理与源代码分析
- Android Hook框架Xposed原理与源代码分析
- Android Hook框架Xposed原理与源代码分析
- Android中免root的hook框架Legend原理解析
- AspectJ框架实现原理
- 每周学一点Egret(14) 插件开发列表
- Java与Excel互操作
- linux常用命令个人笔记
- 使用Python 递归合并不同目录下小文件
- 如何调整Odoo 8的中文翻译
- HOOK框架原理实现
- Google Gson简明教程
- js获取表单值的两种方法
- 全面拥抱开源技术,数据实时集成案例分享
- php通过system(),exec(),passthru()调用外部系统命令
- 怎么用leangoo做需求管理及规划?(产品Backlog、用户故事)
- hdoj1260【简单DP】
- response.getWriter().write()与out.print()的区别
- 笔记-基础 jquery select 选中