Java逆向基礎之AspectJ的擷取成員變數的值

來源:互聯網
上載者:User

標籤: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的值,由於這個成員是數群組類型,遍曆這個數組列印值


Java逆向基礎之AspectJ的擷取成員變數的值

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.