你有没有想过自己写一个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的代码编写完毕,让我们进行下一步操作。



目录
相关文章
|
3月前
|
Python
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
47 1
|
6月前
|
XML Java API
安卓逆向 -- Xposed模块编写
安卓逆向 -- Xposed模块编写
72 0
|
Java API Android开发
你有没有想过自己写一个Xposed模块?教程来了~(一)
在互联网上,关于Xposed模块编写的教程可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化等)也正因此,网上的教程往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹……种种错误或者落伍的教程对新手产生了很大的误导。
374 0
|
6月前
|
JavaScript Unix
mac学习vue被这件事折磨的无路可退(绝了,我通过脚本解决一切)
mac学习vue被这件事折磨的无路可退(绝了,我通过脚本解决一切)
60 0
|
运维 Java Devops
莫慌!阿里人用五个模块讲明白了SpringCloud,可下载
Spring Cloud “微服务”应该是互联网圈内争论很久的一个话题,开发者对此的讨论也一直在继续,近些年,SpringCloud有碾压Dubbo的趋势,你怎么看呢? SpringCloud在近些年来受到国内不少开发人员的广泛关注,也是比较吃香的一个技术技能,如果一个程序员连SpringCloud都没有怎么了解过或者使用过,那么可能会有面临被时代淘汰的危机! SpringCloud是知名的微服务架构,包含了很多组件,每个组件又有各自的分工。那么你对SpringCloud了解有多少呢,知之甚少还是运用自如?
|
Java API Android开发
你有没有想过自己写一个Xposed模块?教程来了~(二)
在互联网上,关于Xposed模块编写的教程可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化等)也正因此,网上的教程往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹……种种错误或者落伍的教程对新手产生了很大的误导。
396 0
|
Java Android开发
你有没有想过自己写一个Xposed模块?教程来了~(四)
在互联网上,关于Xposed模块编写的教程可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化等)也正因此,网上的教程往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹……种种错误或者落伍的教程对新手产生了很大的误导。
118 0
|
安全 Java Linux
手把手教你搭个Frida + Sekiro Rpc框架
手把手教你搭个Frida + Sekiro Rpc框架
手把手教你搭个Frida + Sekiro Rpc框架
|
API
抱歉,Xposed真的可以为所欲为——1.基础知识储备(下)
本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。
748 0
|
Java Linux API
抱歉,Xposed真的可以为所欲为——1.基础知识储备(上)
本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。
441 0