你有没有想过自己写一个Xposed模块?教程来了~(三)

简介: 在互联网上,关于Xposed模块编写的教程可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化等)也正因此,网上的教程往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹……种种错误或者落伍的教程对新手产生了很大的误导。

0×04 迈开第三步,实现hook操作的具体代码

4、在“施展刀法”(编写hook代码)之前,我们先要立一个靶子。在界面上画一个按钮,并在MainAcitiviy里写代码如下:

package com.example.root.xposd_hook_new;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {undefined
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {undefined
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {undefined
public void onClick(View v) {undefined
Toast.makeText(MainActivity.this, toastMessage(), Toast.LENGTH_SHORT).show();
}
});
}
public String toastMessage() {undefined
return "我未被劫持";
}
}

1dd92d16c038b790203183ac3807b020.jpg

2164260aa537c4ddaf49bacc7e452150.jpg

这个靶子很简单:MainActivity界面有个按钮,点击按钮后会弹出一个toast提示,该提示的内容由 toastMessage() 方法提供,而toastMessage()的返回值为“我未被劫持”:

ae7798ad05bacfb09c41949bc8dedd18.jpg

下面我们正式开始“施展刀法”(编写hook代码) 来hook我们的MainActivity并修改这个类的toastMessage()方法,让它的返回值为“你已被劫持”:

5、在MainActivity的同级路径下新建一个类“HookTest.java”,代码如下:

package com.example.root.xposd_hook_new;
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 {undefined
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {undefined
if (loadPackageParam.packageName.equals("com.example.root.xposd_hook_new")) {undefined
XposedBridge.log(" has Hooked!");
Class clazz = loadPackageParam.classLoader.loadClass(
"com.example.root.xposd_hook_new.MainActivity");
XposedHelpers.findAndHookMethod(clazz, "toastMessage", new XC_MethodHook() {undefined
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {undefined
super.beforeHookedMethod(param);
//XposedBridge.log(" has Hooked!");
}
protected void afterHookedMethod(MethodHookParam param) throws Throwable {undefined
param.setResult("你已被劫持");
}
});
}
}
}

25f588534c4689e8be0e0caac3a1e348.jpg


由代码可知,我们是通过IXposedHookLoadPackage接口中的handleLoadPackage方法来实现Hook并篡改程序的输出结果的。代码中“com.example.root.xposd_hook_new ”是目标程序的包名,”com.example.root.xposd_hook_new.MainActivity” 是想要Hook的类, “toastMessage”是想要Hook的方法。我们在afterHookedMethod方法(用来定义Hook了目标方法之后的操作)中,修改了toastMessage()方法的返回值为“你已被劫持”。

OK,以上用来hook的代码编写完毕,让我们进行下一步操作。



目录
相关文章
|
Python
python使用pip镜像源加速安装包(清华、阿里、中科大)
python使用pip镜像源加速安装包(清华、阿里、中科大)
8695 0
python使用pip镜像源加速安装包(清华、阿里、中科大)
|
Ubuntu 开发工具
Ubuntu更换阿里云软件源
Ubuntu更换阿里云软件源
142387 0
|
4月前
|
JSON API 数据格式
实时外汇行情接口接入教程
本教程将指导您如何通过简单的几步接入实时外汇行情接口,获取您所需的外汇数据。
|
Linux 数据安全/隐私保护 Windows
更换(Pypi)pip源到国内镜像
pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.
247448 2
|
Java API Android开发
你有没有想过自己写一个Xposed模块?教程来了~(一)
在互联网上,关于Xposed模块编写的教程可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化等)也正因此,网上的教程往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹……种种错误或者落伍的教程对新手产生了很大的误导。
625 0
|
应用服务中间件 nginx
Nginx 出现403 Forbidden 的几种解决方案【已解决】
Nginx 出现403 Forbidden 的几种解决方案【已解决】
10927 3
|
存储 JavaScript 前端开发
操作document.cookie存储和读取Cookies
操作document.cookie存储和读取Cookies
|
Java Maven
maven配置阿里云镜像源
maven配置阿里云镜像源
41172 1
|
Web App开发 Linux Android开发
常见浏览器User-Agent大全
下面是工作中需要用到的常见浏览器User-Agent字符串的收集整理,不断更新中。 OperaMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.
12690 2