前提:你的手機裝了xposedinstaller ,已經獲取root權限,否則以下內容不用看了。
參考鏈接:https://blog.csdn.net/mrglaucusss/article/details/50963542
配置準備工作
我的as版本是3.1的。所以基于此版本做操作
新建一個工程包名隨便取。我取了com.notrace
-
MainActivity代碼簡單如下:
package com.notrace; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.buttonPanel).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this,hook(),Toast.LENGTH_SHORT).show(); } }); } public String hook(){ return "未被劫持"; } }
很簡單,一個button點擊彈出toast,顯示hook函數返回值,我的目標就是修改這個hook的返回值
-
修改清單文件,在application節(jié)點下添加
<meta-data android:name="xposedmodule" android:value="true" /> <meta-data android:name="xposeddescription" android:value="你猜猜" /> <meta-data android:name="xposedminversion" android:value="54" />
第一個表示是否是xposed模塊
第二個是描述,隨便你寫
第三個是最低的api版本支持
-
修改app/gradle
repositories { jcenter() } dependencies { compileOnly 'de.robv.android.xposed:api:82' compileOnly 'de.robv.android.xposed:api:82:sources' implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
注意,上面兩個一定要修改為compileOnly 如果你是低版本的as可以改成provided
代碼
- 新建HookTest 類:
package com.notrace;
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 HookTest implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if(loadPackageParam.packageName.equals("com.notrace")){
XposedBridge.log("NOTRACE"+loadPackageParam.packageName);
Class clazz=loadPackageParam.classLoader.loadClass("com.notrace.MainActivity");
XposedHelpers.findAndHookMethod(clazz, "hook", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult("你已經被劫持了");
}
});
}
}
}
-
添加xposed入口,新建assets:微信截圖_20180511182235.png
xposed_init內容如下:
com.notrace.HookTest
- 至此結束,然后如果你沒有禁用instant run 那么你就得打一個帶簽名的安裝包,然后安裝到手機上,然后再xposed installer模塊中勾選你編寫的module,然后手機重啟生效。
