基于Xposed的Android Hook测试
程序员文章站
2022-05-12 14:02:05
...
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
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
含自定义类的引用↑的调用方式
上一篇: 了解下局部变量表槽位的复用
下一篇: Hook框架xposed的简单demo
推荐阅读
-
基于android startActivityForResult的学习心得总结
-
android基于SwipeRefreshLayout实现类QQ的侧滑删除
-
Android基于zxing的二维码(网格)扫描 仿支付宝网格扫描
-
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
-
Android基于Aidl的跨进程间双向通信管理中心
-
Android基于Xposed修改微信运动步数实例
-
Android编程基于距离传感器控制手机屏幕熄灭的方法详解
-
基于android样式与主题(style&theme)的详解
-
基于android背景选择器selector的用法汇总
-
解析libcurl在android下的移植、编译与测试