基于Xposed的Android Hook测试

0x01前言

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

准备工具:android studio

                XposedBridgeApi-54.jar

                海马模拟模拟器


0x02 搭建框架

在海马模拟器安装Xposed框架

0x03准备测试样例

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

1.初步界面MainActicity



2.主函数main内声明两个常量


3.写button的click监听事件

4.在主函数Main内自定义判断登录成功与否的函数isOk



5.登录后载入B_Activity


6.登录后显示的B_Acitivity模样



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" />

2.添加jar包
Warning:不可在原本app的libs目录下添加,不然后面会报错,这里的lib自己右键新建一个dictionary即可



3.使刚才添加的jar包被包含


这里点击右边的+号选中刚才导入的jar文件


4.修改build.gradle
【Warnning:这里下面原本是implementation,改成provided,上面注释那个改provided也行】


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]);
}
});

}
}




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



0x05正式HOOK测试

安装完成自己写的HOOK模块后,重启海马模拟器,执行login Demo,发现很好的拦截了isOk()这个自定义函数的点击传递的两个参数,达到了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
含自定义类的引用↑的调用方式

猜你喜欢

转载自blog.csdn.net/guchenjun789/article/details/79430110