Xposed快速hook关键点
0x01 导读
工作中,常常需要针对各种app进行快速代码定位,找到代码修改和调试各种功能,就不得不面对xposed来进行一系列快速定位关键代码的问题了。那么问题来了,如何快速找到代码呢?
这里值这针对代码在java层的进行分析,在so中的,目前作者是无能为力的。
0x02 众所周知
我们的一般做法就是通过界面定位到具体的Activity ,执行adb 命令 “adb shell dumpsys activity | findstr "mFocusedActivity"”
就可以快速找到我们当前需要hook页面的Activity功能块,然后通过,XposedHelpers的
findAndHookMethod方法来,监控方法。少量的工作没什么,但是如果代码量很多,很难看,就比较麻烦了。 所以这里介绍一种作者目前使用的,自仍未快速的方式。
0x03 推荐使用
1、安装apk后,可以得到app使用的dex文件。
2、然后解包dex文件得到jar文件。
3、通过xposed读取jar中的所有类,
4、然后hook,然后读取所有方法hook.
5、然后通过关键字,匹配参数,匹配返回值,快速得到操作日志。
注意:如果是多个dex,一样是可以的,多个jar。解压然后覆盖保存到一个里面,然后打包成jar就可以,jar就使用zip打包工具就可以,修改后缀就ok.,
dex文件一般都可以通过apk解压得到,然后用apktool工具得到jar文件,针对某些apk无法apktool解包的可以添加-r等操作,不处理资源文件就OK.
懒加载plugin如何操作呢? 找到不类呢?有一种情况,某些dex是专门存放插件,插件是进入到某些页面才会进行加载的,通过懒hook,进入某某页面,然后再进行hook操作,或者hook文件操作即可。
部分参考代码:
- public static void hook_byJar(final XC_LoadPackage.LoadPackageParam loadPackageParam, String jarFile) throws Exception {
- try {
- //通过将给定路径名字符串转换为抽象路径名来创建一个新File实例
- File f = new File(jarFile);
- URL url1 = f.toURI().toURL();
- URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url1}, Thread.currentThread().getContextClassLoader());
- //通过jarFile和JarEntry得到所有的类
- JarFile jar = new JarFile(jarFile);
- //返回zip文件条目的枚举
- Enumeration<JarEntry> enumFiles = jar.entries();
- JarEntry entry;
- //测试此枚举是否包含更多的元素
- while (enumFiles.hasMoreElements()) {
- entry = (JarEntry) enumFiles.nextElement();
- if (entry.getName().indexOf("META-INF") < 0) {
- String classFullName = entry.getName();
- if (classFullName.indexOf(".class") < 0) {
- classFullName = classFullName.substring(0, classFullName.length() - 1);
- } else {
- Map<String, Object> hashMap = new HashMap<String, Object>();
- // 这里通过包名对部分类进行过滤,方式由于类不存在引起的错误。
- hashMap.put("com/test/test/test/", new ArrayList<String>());
- boolean isOkClass = false;
- for (Map.Entry<String, Object> m : hashMap.entrySet()) {
- String name = m.getKey();
- ArrayList<String> list = (ArrayList<String>) m.getValue();
- if (classFullName.startsWith(name)) {
- isOkClass = true;
- for (String str : list) {
- if (classFullName.startsWith(str)) {
- isOkClass = false;
- }
- }
- break;
- }
- }
- if (isOkClass) {
- //去掉后缀.class
- String className = classFullName.substring(0, classFullName.length() - 6).replace("/", ".");
- // log(classFullName);
- try {
- final Class<?> myclass = myClassLoader.loadClass(className);
- for (final Method method : myclass.getDeclaredMethods()) {
- if (!Modifier.isAbstract(method.getModifiers())) {
- XposedBridge.hookMethod(method, new XC_MethodHook() {
- @Override
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- String before_className = myclass.getName();
- String methodName = param.method.getName();
- super.beforeHookedMethod(param);
- }
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- String before_className = myclass.getName();
- String methodName = param.method.getName();
- super.afterHookedMethod(param);
- }
- });
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
读取jarhook方法和类
0x04 其他方式
1、针对app使用的开源库进行了解然后方便hook注关键代码,因为开源代码都是开源的,不需要看app解包的混淆,羞涩的代码。
2、针对app作者,写入Log的内容进行hook,因为发布的app一般都是把其中的一个true或者false进行注释掉了,方法调用日志本身没有注释掉,所以可以针对写入的日志的地方进行处理。
Xposed快速hook关键点的更多相关文章
- 关于如何使用xposed来hook某支付软件
由于近期有业务上的需要,所以特地花时间去研究了一下如何使用hook技术.但是当我把xposed环境和程序编写完成时,突然发现手机上的某个支付软件无法使用了.这个时候我意识到,应该是该软件的安全机制在起 ...
- Xposed 框架 hook 简介 原理 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Xposed MultiDex Hook
使用Xposed Hook多DEX的应用时,Xposed会抛ClassNotFound的异常,原因是它只会在classes.dex查找类.以下官方不完美解决办法,参考 Github上的 #30 iss ...
- Xposed框架Hook Android应用的所有类方法打印Log日志
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80954759 在进行Android程序的逆向分析的时候,经常需要Android程 ...
- 关于如何使用xposed来hook微信软件
安卓端 难点有两个 收款码的生成和到帐监听 需要源码加 2442982910
- Android Hook神器:XPosed入门与登陆劫持演示
前段时间写了一篇关于Cydia Substrate广告注入的文章,大家都直呼过瘾.但是,真正了解这一方面的同学应该知道,其实还有一个比Cydia Substrate更出名的工具:XPosed. 不是因 ...
- Xposed框架之函数Hook学习
作者:Fly2015 Xposed是Android下Java层的开源Hook框架类似的有cydiasubstrate框架而且据说cydiasubstrate框架能实现Android的Java层和Nat ...
- ART模式下基于Xposed Hook开发脱壳工具
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik ...
- Android apk快速定位、灰色按钮克星--DroidSword
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80994434 在进行Android应用程序的逆向分析时,经常需要对Android ...
随机推荐
- python 元组学习
元组用tuple表示,用,分割开,和列表类似,但是没有排序修改等高级操作.简单地说就是终态的...... >>> tuple1 = (1,2,3)>>> type( ...
- 详解String类中的intern()方法
我们用一个经典的例子来理解 package com.jvm.heap; public class MyTest { public static void main(String[] args) { S ...
- Spark_总结七_troubleshooting
转载标明出处 http://www.cnblogs.com/haozhengfei/p/07ef4bda071b1519f404f26503fcba44.html Spark_总结七_troubles ...
- Yourphp是一款完全开源免费的.核心采用了Thinkphp框架
Yourphp企业网站管理系统,是一款完全开源免费的PHP+MYSQL系统.核心采用了Thinkphp框架,同时也作为开源软件发布.集众多开源项目于一身的特点,使本系统从安全,效率,易用及可扩展性上更 ...
- dede被注入后台提示用户名不存在解决方法
如果已经发现/data,有很长一个txt记事本,说明已经被其他人SQL注入了,或是已经有人进行尝试SQL注入了了. 记事儿本如:75252sdaswfdfsfq538ef2ad3556_safe.tx ...
- 在js中怎样获得checkbox里选中的多个值?
https://zhidao.baidu.com/question/203897221.html 思路:利用name属性值获取checkbox对象,然后循环判断checked属性(true表示被选中, ...
- 常用SQL笔记总结
DDL(data definition language)创建和管理表 1.创建表 1.直接创建 例如: create table emp( name varchar(20), salary int ...
- Docker 创建ubuntu ,ssh,vnc 可连接
**************************************************************************************************** ...
- Ring3句柄表的枚举
由于windows并没有给出枚举所有句柄所用到的API,要获得句柄,我们必须使用未公开的Native API才可以,使用如下函数: NTSTATUS WINAPI NtQuerySystemInfor ...
- Windows10下用Anaconda3安装TensorFlow教程
这是我在自己的笔记本电脑上用Anaconda3安装TensorFlow的教程 1. 安装好Anaconda3版本 (1) 注:可以发现最新版本是Anaconda5了(没关系,下载就是了) (2) 注意 ...