Android笔记-Xposed的使用(Hook登录函数获取用户名密码)
如这个APP例子:
点击登录,Xposed打印:
对应的Java代码:
这里可以看到其包名为hfdcxy.com.myapplication
函数为check。
Xposed关键函数如下:
public class HookUtils implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {if(loadPackageParam.packageName.equals("hfdcxy.com.myapplication")){XposedBridge.log("here");XposedHelpers.findAndHookMethod(loadPackageParam.classLoader.loadClass("hfdcxy.com.myapplication.MainActivity"),"check",String.class,String.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);XposedBridge.log("------------beforeHookedMethod start------------");String userName = (String)param.args[0];String password = (String)param.args[1];XposedBridge.log("userName:" + userName + ",password:" + password);XposedBridge.log("------------beforeHookedMethod end------------");}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);XposedBridge.log("------------afterHookedMethod start------------");String userName = (String)param.args[0];String password = (String)param.args[1];XposedBridge.log("userName:" + userName + ",password:" + password);XposedBridge.log("------------afterHookedMethod end------------");}});}}
}
编写Xposed模块的逻辑是这样的。
1. 添加对应Xposed API jar包,修改build.gradle;
2. 继承IXposedHookLoadPackage,设置需要Hook的类名,函数名;
3. 新增资源文件,新建xposed_init,内容为继承IXposedHookLoadPackage的Hook类;
4. AndroidManifest.xml添加xposed相关模块数据。
如下:
其中xpose_init内容为:
com.example.myapplication.HookUtils
HookUtils.java:
package com.example.myapplication;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 HookUtils implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {if(loadPackageParam.packageName.equals("hfdcxy.com.myapplication")){XposedBridge.log("here");XposedHelpers.findAndHookMethod(loadPackageParam.classLoader.loadClass("hfdcxy.com.myapplication.MainActivity"),"check",String.class,String.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);XposedBridge.log("------------beforeHookedMethod start------------");String userName = (String)param.args[0];String password = (String)param.args[1];XposedBridge.log("userName:" + userName + ",password:" + password);XposedBridge.log("------------beforeHookedMethod end------------");}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);XposedBridge.log("------------afterHookedMethod start------------");String userName = (String)param.args[0];String password = (String)param.args[1];XposedBridge.log("userName:" + userName + ",password:" + password);XposedBridge.log("------------afterHookedMethod end------------");}});}}
}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapplication"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><meta-data android:name="xposedmodule" android:value="true"/><meta-data android:name="xposeddescription" android:value="Xposed Demo"/><meta-data android:name="xposedminversion" android:value="89"/></application></manifest>
build.gradle
apply plugin: 'com.android.application'android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {applicationId "com.example.myapplication"minSdkVersion 22targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}sourceSets {main{assets.srcDirs = ['src/assets']}}
}dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')implementation 'androidx.appcompat:appcompat:1.0.2'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test.ext:junit:1.1.0'androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'compileOnly files('lib/XposedBridgeAPI-89.jar')
}
Android笔记-Xposed的使用(Hook登录函数获取用户名密码)相关推荐
- logon oracle 密码 用户名_PLSQL自动登录,记住用户名密码日常使用技巧
配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...
- 史上最简单的Spring Security教程(二十八):CA登录与默认用户名密码登录共存详细实现及配置
在前面的文章中,我们自定义了一些CA登录相关的类,如 CertificateAuthorityAuthenticationToken.CertificateAuthorityAuthenticati ...
- PLSQL自动登录,记住用户名密码日常使用技巧
https://www.cnblogs.com/Chary/p/No00008F.html 配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库, ...
- 微信hook——登录界面的账号密码
Hook方法一: 手机号码登陆,Method跟踪点击登陆事件: 点击事件内容 分析bj方法,有两个string参数,依然最后调用了com.tencent.mm.modelsimple.q,hook这个 ...
- ubuntu16.04登录界面输入用户名密码后又回到登录界面
原因有以下几种: 最好先查看log,即/var/log/Xorg.0.log . 1,磁盘空间不够了. 解决办法:字符界面登录,删除一些文件,腾出一些空间,重启即可. 2,/home/username ...
- mysql命令行远程登录时,用户名密码等连接信息配置正确,出现:ERROR 1045 (HY000): Access denied for user ‘xxx'
1. 现象 使用mysql客户端命令行的方式远程登录mysql服务器时,出现ERROR 1045 (HY000): Access denied for user 'xxx'. 使用mysql客户端远程 ...
- 以管理员身份登录系统 分值: 450 以管理员身份登录即可获取通关密码(重置即可,无需登录)
解密关的第一题. 1.题的来源 昨天做了一个网络安全实验室的一个解密关的第一题. 地址:http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a ...
- FTP登录时指定用户名密码的方法
ftp是网络常用命令,但是使用此命令时都必须根据提示交互式的输入用户名和密码,对于希望程序自动执行或者批处理而言很不方便.下面提供两种ftp登陆时指定用户名密码的方法: 1.使用命令ftp://use ...
- Android之Xposed框架完全使用指南
文章目录 Xposed环境搭建 Xposed简介 Xposed原理 Xposed的安装 Xposed插件开发 Xposed插件编写流程 Xposed开发之Hook构造函数 相关API 无参构造函数的h ...
最新文章
- ORA-39002 ORA-39070 ORA-29283 ORA-06512 ORA-29283
- Objective-C:在类中设置不同协议
- Mybatis-Plus 之 人生中荒废的一下午
- 联想笔记本Win10 F1-F12失效的解决方法
- scala运行包含package文件注意细节
- sklearn数据集操作API
- 格雷码问题:输出当输入为n时的格雷码
- 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python基础简介及入门配置
- Android--使用Camera拍照
- WEBSOCKET协议判断 握手及反馈
- 1470. 重新排列数组
- mschart mysql_在VB mschart里面可以一个MSCHART同时显示曲线和状图吗?
- c语言switch case ppt,C语言-09switch-case多分支开路语句.ppt
- java fail fast_Java集合中的fail-fast(快速失败)机制详解
- goeasy服务器发送(发布)消息,微信小程序中怎么使用GoEasy实现实时通讯
- PHP在线网课问答题库搜索,推荐一个大学mooc网课答案题库在线查询公众号
- Python报错:local variable referenced before assignment
- 团队协作方法之:高效使用任务故事墙
- python提取关键词分类_用Py做文本分析5:关键词提取
- 【FLASK】发送QQ邮件