欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Xposed的Android Hook测试

程序员文章站 2022-05-12 14:02:05
...

0x01前言

此次测试基于海马模拟器,Xposed框架版本为54,测试内容为安卓apk程序中的函数的传入参数的拦截

准备工具:android studio

                XposedBridgeApi-54.jar

                海马模拟模拟器

基于Xposed的Android Hook测试

0x02 搭建框架

在海马模拟器安装Xposed框架
基于Xposed的Android Hook测试

0x03准备测试样例

用Android Studio写一个简单的测试的安卓程序Demo

1.初步界面MainActicity

基于Xposed的Android Hook测试

2.主函数main内声明两个常量
基于Xposed的Android Hook测试

3.写button的click监听事件
基于Xposed的Android Hook测试
4.在主函数Main内自定义判断登录成功与否的函数isOk

基于Xposed的Android Hook测试

5.登录后载入B_Activity

基于Xposed的Android Hook测试
6.登录后显示的B_Acitivity模样

基于Xposed的Android Hook测试

0x04写HOOK模块

新建Android Studio工程时选择No Activity,准备写Hook的模块

1.在AndroidManifest.xml中添加这三个

<meta-data
    android:name="xposedmodule"
    android:value="true" />
<!-- 模块描述 -->
<meta-data
    android:name="xposeddescription"
    android:value="一个loginDemo的劫持" />
<!-- 最低版本号 -->
<meta-data
    android:name="xposedminversion"
    android:value="30" />
基于Xposed的Android Hook测试
2.添加jar包
Warning:不可在原本app的libs目录下添加,不然后面会报错,这里的lib自己右键新建一个dictionary即可
基于Xposed的Android Hook测试

基于Xposed的Android Hook测试
3.使刚才添加的jar包被包含

基于Xposed的Android Hook测试
这里点击右边的+号选中刚才导入的jar文件

基于Xposed的Android Hook测试
4.修改build.gradle
【Warnning:这里下面原本是implementation,改成provided,上面注释那个改provided也行】

基于Xposed的Android Hook测试
5.新建一个类Tutorial

由于代码过多,我这里直接拷贝了

package com.lostck.myhook;

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;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
public class Tutorial implements IXposedHookLoadPackage{
@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
//XposedBridge.log("Load app:"+loadPackageParam.packageName);
if(!loadPackageParam.packageName.equals("com.lostck.firstdemo")){
return;
}
XposedBridge.log("Load app -->:"+loadPackageParam.packageName+" <--进入了");

findAndHookMethod("com.lostck.firstdemo.MainActivity", loadPackageParam.classLoader, "isOk", String.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//super.beforeHookedMethod(param);
XposedBridge.log("---Hook Start---");
XposedBridge.log("Uname:"+param.args[0]);
XposedBridge.log("Passw:"+param.args[1]);
}

@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//super.afterHookedMethod(param);
XposedBridge.log("---Hook End---");
XposedBridge.log("Uname:"+param.args[0]);
XposedBridge.log("Passw:"+param.args[1]);
}
});

}
}


基于Xposed的Android Hook测试

6.入口assets/xposed_init配置,声明需要加载到XposedInstaller的入口类
这个xposed_init新建的时候类型选File就好了

基于Xposed的Android Hook测试

0x05正式HOOK测试

安装完成自己写的HOOK模块后,重启海马模拟器,执行login Demo,发现很好的拦截了isOk()这个自定义函数的点击传递的两个参数,达到了Hook的效果。
基于Xposed的Android Hook测试

0x06总结

很早就想玩安卓调试了,终于,今天完成了第一次Android Hook,
下午拿小米手机想装Xposed框架,结果root都搞了半天,然后刷机,刷机,刷成搬砖了。后来想想现在PC端的安卓模拟器那么多,功能也强大,不如一试。结果很轻松就装上了Xposed框架,然后就是后面的Hook教程学习,各种百度,各种失败和尝试。

参考:
https://www.52pojie.cn/thread-533120-1-1.html
https://www.csdn.net/article/2015-08-14/2825462

补充:
https://bbs.pediy.com/thread-215039.htm
含自定义类的引用↑的调用方式