Xposed框架的HOOK流程
2018-03-18 16:45
369 查看
1.创建项目后,右键app创建一个目录lib,将XposedBridgeApi-54.jar,拖拽进lib目录,然后右键添加进本地链接库
2.更改app下的build.gradle文件, 在依赖关系dependencies里最后一行加上provided files('lib/XposedBridgeApi-54.jar')3.新建文件夹assets
![](//img-blog.csdn.net/20180318162609373?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L2dpdGh1Yl8zODY0MTc2NQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
4.在assets下创建文件xposed_init文件,hook类方法的入口地址eg:com.example.administrator.xposed.XposedBigBang
5.AndroidManifest.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>
6.确定好入口地址,就创建入口文件即java目录下的com.example.administrator包中新建一个java类文件名为XposedBigBang,对应上面的入口地址
7.package com.example.administrator.xposed; //这里选择自己项目对应的包
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class XposedBigBang implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackag
4000
eParam lpparam) throws Throwable {
// 标记目标app包名
if (!lpparam.packageName.equals("com.example.administrator.helloworld")) //这里选择自己要hook的包
return;
// Log.d("!!!!!!!!","HOOK CONTENT !!"); //输出到android device monitor的日志中
// XposedBridge.log("Loaded app: " + lpparam.packageName); //输出到xposed的日志中
// findAndHookMethod(hook方法的类名,classLoader,hook方法名,hook方法参数...,XC_MethodHook)
XposedHelpers.findAndHookMethod("android.content.ContextWrapper", lpparam.classLoader, "getPackageManager",String.class,
new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// Class clazz = param.thisObject.getClass(); 获取参数对象
// XposedBridge.log("class name:"+clazz.getName());
// XposedBridge.log("BEFORE HOOK SUCCESSFUL");
//// Log.d("BEFORE 参数1",param.args[0].toString()); 可以打印出方法的第一个参数
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
// Class clazz = param.thisObject.getClass();
// Object obj=param.getResult(); 获取方法返回的结果,要注意结果的类型。
// // XposedBridge.log("class name:"+clazz.getName());
// XposedBridge.log("AFTER HOOK SUCCESSFUL");
// Log.d("create file","");
// XposedBridge.log(obj.toString()); 将结果转化成字符打印到日志
}
});
}
}
8.用到的xposed版本:de.robv.android.xposed.installer_v33_36570c.apk(不是最新的,适合新手练手)
2.更改app下的build.gradle文件, 在依赖关系dependencies里最后一行加上provided files('lib/XposedBridgeApi-54.jar')3.新建文件夹assets
4.在assets下创建文件xposed_init文件,hook类方法的入口地址eg:com.example.administrator.xposed.XposedBigBang
5.AndroidManifest.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>
6.确定好入口地址,就创建入口文件即java目录下的com.example.administrator包中新建一个java类文件名为XposedBigBang,对应上面的入口地址
7.package com.example.administrator.xposed; //这里选择自己项目对应的包
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class XposedBigBang implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackag
4000
eParam lpparam) throws Throwable {
// 标记目标app包名
if (!lpparam.packageName.equals("com.example.administrator.helloworld")) //这里选择自己要hook的包
return;
// Log.d("!!!!!!!!","HOOK CONTENT !!"); //输出到android device monitor的日志中
// XposedBridge.log("Loaded app: " + lpparam.packageName); //输出到xposed的日志中
// findAndHookMethod(hook方法的类名,classLoader,hook方法名,hook方法参数...,XC_MethodHook)
XposedHelpers.findAndHookMethod("android.content.ContextWrapper", lpparam.classLoader, "getPackageManager",String.class,
new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// Class clazz = param.thisObject.getClass(); 获取参数对象
// XposedBridge.log("class name:"+clazz.getName());
// XposedBridge.log("BEFORE HOOK SUCCESSFUL");
//// Log.d("BEFORE 参数1",param.args[0].toString()); 可以打印出方法的第一个参数
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
// Class clazz = param.thisObject.getClass();
// Object obj=param.getResult(); 获取方法返回的结果,要注意结果的类型。
// // XposedBridge.log("class name:"+clazz.getName());
// XposedBridge.log("AFTER HOOK SUCCESSFUL");
// Log.d("create file","");
// XposedBridge.log(obj.toString()); 将结果转化成字符打印到日志
}
});
}
}
8.用到的xposed版本:de.robv.android.xposed.installer_v33_36570c.apk(不是最新的,适合新手练手)
相关文章推荐
- Android Java层的hook检测(Cydia Substrate或者Xposed框架)
- 使用Xposed框架HOOK任意函数及API
- 使用 Githook 实现团队 Coding Review 流程
- hook系列——Xposed框架入门(一)
- netfilter各个HOOK的关系简介(笔记中已经总结到函数调用流程中)
- Xposed框架之函数Hook学习
- 使用 Githook 实现团队 Coding Review 流程
- 通过Xposed框架实现禁用手机录音摄像头功能(hook android 底层实现)
- andfix中的java hook流程
- AllHookInOne 中的hook基本流程
- android hook技术-Xposed框架 帮你轻松应对支付宝2016晒账单
- Netfilter NF_HOOK执行流程分析 内核kprobe机制中的Jprobe机制 drop_watch hook_inspector
- Netfilter NF_HOOK执行流程分析一
- Android studio Xposed框架Hook小试
- 使用Xposed框架进行的简单HOOK
- Android XPosed框架 hook 中的IllegalAccessError: Class ref in pre-verified class resolved to unexpected
- Xposed框架之函数Hook学习
- Xposed框架之函数Hook学习
- xposed框架-Hook修改imei imsi
- powershell部署Azure云虚拟机的命令流程