Java逆向基础之AspectJ的获取成员变量的值
注意:由于JVM优化的原因,方法里面的局部变量是不能通过AspectJ拦截并获取其中的值的,但是成员变量可以
在逆向中,我们经常要跟踪某些类的成员变量的值,这里以获取ZKM9中的qs类的成员变量g为例进行说明
在StackOverFlow上有这么一篇提问:AspectJ: How to get accessed field's value in a get() pointcut
将其中内容改写为qs类的代码如下:
private pointcut qsfiledMethod() :get(* com.zelix.qs.*);after() returning(Object field) :qsfiledMethod(){System.out.println(thisJoinPoint.toLongString());System.out.println(" " + thisJoinPoint.getSignature().getName());System.out.println(" " + field);}
但是这个方法有缺陷,只能获取公共变量,运行之后获取到的都是qs的成员变量j和k
运行结果如下
所以此路不通,那么就需要再找一条路:反射
qs类中的某个方法调用了jj.a方法,所以用call找出调用者,然后通过反射方式获取filed,talk is cheap,show you code?
private pointcut jjaMethod() :call(String com.zelix.jj.a(String, String, String, Object, int));before() : jjaMethod() {System.out.println("> " + thisJoinPoint);if (thisJoinPoint.getThis() != null) {System.out.println("this "+thisJoinPoint.getThis().getClass().getName() + " " + thisJoinPoint.getSourceLocation());Object obj = thisJoinPoint.getThis();Class clazz = obj.getClass();//遍历成员Field[] fileds = clazz.getDeclaredFields();for (Field field : fileds) {System.out.println(field);}try {//获取单个成员private final java.lang.String[] com.zelix.qs.g//并输出它的值Field filed = clazz.getDeclaredField("g");System.out.println(filed);filed.setAccessible(true);String[] g= (String[]) filed.get(obj);for (int i = 0; i < g.length; i++) {System.out.println("g["+i+"] ="+g[i]);}} catch (Exception e) {e.printStackTrace();}}else if (thisJoinPoint.getTarget() != null) {System.out.println("target "+thisJoinPoint.getTarget().getClass().getName() + " " + thisJoinPoint.getSourceLocation());}}
运行结果如下
before方法里的功能如下
1.打印出调用者的名称和位置
2.遍历打印qs类的所有成员名称
3.获取成员g的值,由于这个成员是数组类型,遍历这个数组打印值
转载于:https://blog.51cto.com/7317859/2114892
Java逆向基础之AspectJ的获取成员变量的值相关推荐
- Java逆向基础之AspectJ的Eclipse插件AJDT
AJDT即Eclipse AspectJ Development Tools.是一个Eclipse插件,可以编写AspectJ项目 安装 help-->Install New Software ...
- 通过反射获取成员变量并使用
package cn.learn_03;import java.lang.reflect.Constructor; import java.lang.reflect.Field;/** 通过发生获取成 ...
- Java中反射获取成员变量、构造方法、成员方法及类名
都说反射是框架的灵魂,但是反射到底是啥呢,今天就聊聊反射的基础操作,也是必备操作. 反射机制是在程序运行时,对任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用他的任意一个属性和 ...
- Java反射机制——获取成员变量构造函数
2019独角兽企业重金招聘Python工程师标准>>> Java反射机制--获取成员变量&构造函数 一.成员变量是java.lang.reflect.Field的对象 1.F ...
- java 27 - 4 反射之 通过反射获取成员变量并使用
类Field: 提供有关类或接口的单个字段的信息,以及对它的动态访问权限. A:获得类的成员变量 数组: 1.getFields(公共类的) 2.getDeclaredFields(所有类型的) B: ...
- 反射:通过反射获取成员变量并使用
首先建一个实体类,用于数据访问 package star.july.entity;public class Student {private String name;int age;public St ...
- java 反射 成员变量_java使用反射访问成员变量的值示例
本文实例讲述了java使用反射访问成员变量的值.分享给大家供大家参考,具体如下: 一 代码 import java.lang.reflect.*; class Person { private Str ...
- 反射获取成员变量并改值
package cn.learn.demo1;import java.lang.reflect.Field;/** 反射获取成员变量,并修改值* Person类中的成员String name*/ pu ...
- 反射获取成员变量并使用【应用】
Class类获取成员变量对象的方法 方法分类 方法名 说明 Field[] getFields() 返回所有公共成员变量对象的数组 Field[] getDeclaredFields() 返回所有成员 ...
最新文章
- 中小企业市场 一些超级IT企业的动向
- HTML转义字符 Unicode和CSS伪类介绍
- linux deepin手动升级内核命令
- SAP Fiori Elements 在本地测试模式下如何修改 List Report 里字段标签和图标
- linux 定时备份mysql数据库
- Android之自定义属性
- 虚拟机随服务器启动,VMware Server中虚拟机随宿主机自动启动
- “扎金花FANS”进行了改进
- EMLOG复制网站文字提醒弹窗源码美化版
- 深度学习《Life-Long Learning》
- mc服务器tps优化,LaggRemover——降低延迟/优化TPS/内存
- CKEditor 4 编辑器已与 Vue.js 集成
- Mipmap与可绘制文件夹[重复]
- mac git 冲突工具
- git SourceTree 客户端 安装/使用教程
- Drupal主题开发
- 计算机打字皮肤怎么退出,使用搜狗输入法电脑版中设置快捷键更换皮肤的方法...
- IDEA 在hdfs中创建目录
- VmWare12 遭win11程序兼容性助手阻止运行的解决方法
- CSS3中颜色渐变色彩
热门文章
- 一个很好的自学网站~推荐一下
- 已知一个掺杂了多个数字字符的中文名拼音,去掉所有数字字符之后,形式为“名”+空格+“姓”;并且名和姓的首字母大写,其他小写,要求输出姓名全拼,且全为小写。(后附详细样例说明)
- 如何创建Java程序
- python网页爬虫例子_Python网络爬虫 - 一个简单的爬虫例子
- 计算机里的东西不小心删除如何恢复,原先在电脑界面上的文件不小心删除了怎么恢复,谢谢了...
- Qt使用invokeMethod反射机制实现进程间的通信
- html css 核心设计理念
- Makefile用法链接
- 大厂首发:2021年Java工作或更难找
- CSS的三种基础选择器,面试必问