亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java逆向基礎之AspectJ的獲取成員變量的值

標簽:
JQuery

注意:由于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的值,由于这个成员是数组类型,遍历这个数组打印值


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消