Xposed 安装
框架
初次运行是点击 安装/更新 就行了,后续在激活模块的时候可以点击 软重启 重启手机(模拟器)
模块
显示已安装的模块,打勾的说明是已经激活的
下载
显示网上已经有的模块,别人开发好的,可以直接拿过来用的那种
设置
日志
显示模块运行时后的日志信息,可用来显示XposedBridge.log(“”);打印出来的消息
关于
第一个模块学习
在build.gradle中添加信息
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
导入框架需要的依赖
AndroidManifest.xml添加如下信息
<meta-data
android:name="xposedmodule" 该程序是否是xposed的模块
android:value="true" />
<meta-data
android:name="xposeddescription" 对本模块的功能的描述,可以自己简单的描述一下可以了
android:value="Module测试" />
<meta-data
android:name="xposedminversion" 是本模块开发时用到的Xposed的jar包最低版本号
android:value="54" />
注意该段代码的放置位置
添加模块的入口函数
新建一个类,为Xposed模块的主类,新建一个assets目录,在目录下创建一个file xposed_init,里面添上模块入口函数的路径
编写模块的主要代码
package com.example.info;
import android.widget.TextView;
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 Main implements IXposedHookLoadPackage {
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if(lpparam.packageName.equals("com.example.helloworld")){
XposedHelpers.findAndHookMethod(TextView.class, "setText",CharSequence.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0] = "isHookedbe";
}
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.args[0] = "isHookedaf";
}
});
}
}
}
作用是HOOK TextView的setText方法
被Hook的程序的MainActivity
package com.example.helloworld;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button b;
private TextView t;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button)findViewById(R.id.button);
t = (TextView)findViewById(R.id.textView);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
t.setText("aaaaaaaaaaaaaaa");
}
});
}
}
在点击程序后本应该会显示aaaaaaaaaaaaaaa,hook之后会显示isHookedbe
看图
总结
先Hook成功一个案例,然后实现各种操作吧,可以看看官方的api
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!