eclipse工程基于Xposed的一个简单Hook

Home / Android 百晓生 2018-12-14 5867

自从用了AS2.0之后就很久没有用到eclipse了(我主要用E做Android开发),今天准备写个小测试项目刚好发现电脑上还装有eclipse,于是还是用eclipse来做,因为小项目开发用eclipse还是很快的,创建项目也不需要下载一大夫组件,库啥的,点了finish马上就可以coding了。

使用Xposed模块需要两个条件:

1.手机必须root (Xposed需要往/system里写入东西)root成功主界面会显示框架86版已激活

2.安装Xposed Installer 


创建Xposed项目

1.在eclipse中新建一个普通的Android 项目,activity选择为空(xposed不需要界面支持),SDK我用的是最低22,编译23

<uses-sdk
        android:minSdkVersion="22"
        android:targetSdkVersion="23" />

2.加入Xposed模块。

 1)AndroidManifest.xml

需在Application Node中添加三个Meta(xposedmodule,xposedminversion和xposeddescription)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lee.xposedtest"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="22"
        android:targetSdkVersion="23" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <meta-data
            android:name="xposeddescription"
            android:value="测试服务端" />
        <meta-data
            android:name="xposedminversion"
            android:value="54" />
    </application>
</manifest>

2)导入XposedBridge.jar.

 下载XposedBridgeApi-(版本号).jar,放到工程下的lib目录下(需要新建lib文件夹,注意是lib,不是libs),之后添加到Build Path中(Build Path->Add to Build Path).

3).声明加载入口

在工程目录下的assets目录下新建一个xposed_init文件,这个文件声明了需要加载的XposedInstaller入口类

例如我的工程包名为com.example.xposedtest,实现hook的类名为XposedTest,那么在xpose_init中添加如下:

com.example.xposedtest.XposedTest

OK,配置完成后就开始Coding了,这里引用网上一个"Hook状态栏显示时间"的Demo,代码如下

package com.lee.xposedtest;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
import android.graphics.Color;
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.callbacks.XC_LoadPackage.LoadPackageParam;
public class Main implements IXposedHookLoadPackage { // 实现IXposedHookLoadPackage接口
	public void handleLoadPackage(final LoadPackageParam lpparam)
			throws Throwable {
		XposedBridge.log("Main handleLoadPackage");
		// 判断Hook的包是否正确
		if (!lpparam.packageName.equals("com.android.systemui")) {
			XposedBridge.log("not found package");
			return;
		}
		// 找到要Hook的类名和函数,创建自己的类
		findAndHookMethod("com.android.systemui.statusbar.policy.Clock",
				lpparam.classLoader, "updateClock", new XC_MethodHook() {
					@Override
					protected void beforeHookedMethod(MethodHookParam param)
							throws Throwable {
						// 这里的调用在正常函数调用之前执行,由于本例是Hook时间显示,需要在显示之后调用,所以省略
					}
					@Override
					protected void afterHookedMethod(MethodHookParam param)
							throws Throwable {
						// 这里的调用在正常函数调用之后执行
						XposedBridge.log("XPose" + lpparam.packageName);
						TextView tv = (TextView) param.thisObject;
						String text = tv.getText().toString();
						tv.setText(text + ":)");
						tv.setTextColor(Color.RED);
					}
				});
	}
}

完成代码后编译项目,生成apk安装到手机。

注意:到这里还不能完全实现Hook,还需要在手机上运行之前安装的XposedInstaller,在“Module(模块)”选项中激活要Hook的apk,然后重启手机。


框架在下面附件下载,XP框架是必须的,XposedBridgeAPI-89.jar 是eclipse必须要加的,XposeDemo.7z 是Android Studio工程,不需要用到XposedBridgeAPI-89.jar,gradle会自己在jcenter中下载。

本文链接:https://www.it72.com/12450.htm

上传的附件:
推荐阅读
最新回复 (0)
返回