您的位置:首页 > 其它

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



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(不是最新的,适合新手练手)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Xposed