讓VisualVM+BTrace進入unsafe mode


讓VisualVM+BTrace進入unsafe mode

http://kenai.com/projects/btrace/pages/UserGuide

BTrace很強大,但有很多安全限制,比如:

--------------------------------------------------------------------------
can not create new objects.
can not create new arrays.
can not throw exceptions.
can not catch exceptions.
can not make arbitrary instance or static method calls
    only the public static methods of com.sun.btrace.BTraceUtils class or
    methods declared in the same program may be called from a BTrace program.
can not assign to static or instance fields of target program's classes and objects.
can not have outer, inner, nested or local classes.
can not have synchronized blocks or synchronized methods.
can not have loops (for, while, do..while)
can not extend arbitrary class (super class has to be java.lang.Object)
can not implement interfaces.
can not contains assert statements.
can not use class literals.
--------------------------------------------------------------------------

下面是一個測試用例:

--------------------------------------------------------------------------
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
import java.util.Date;

@BTrace
public class TracingScript
{
    @OnMethod
    (
    clazz       = "CrackMeGUI",
    method      = "VerifyHash",
    location    = @Location( Kind.RETURN )
    )
    public static void Trace
    (
    )
    {
        println( "Now : " + new Date() );
    }
}
--------------------------------------------------------------------------
** Compiling the BTrace script ...
來自注釋處理程序 'com.sun.btrace.compiler.Verifier' 的受支持 source 版本 'RELEASE_6' 低於 -source '1.7'
/TracingScript.java:18:+ operator on strings is not allowed, use 'strcat' instead
!!! Error occured
--------------------------------------------------------------------------
** Compiling the BTrace script ...
*** Compiled
com.sun.btrace.VerifierException: object creation is not allowed: java/lang/StringBuilder
        at com.sun.btrace.runtime.Verifier.reportError(Verifier.java:372)
        at com.sun.btrace.runtime.MethodVerifier.reportError(MethodVerifier.java:225)
        at com.sun.btrace.runtime.MethodVerifier.visitTypeInsn(MethodVerifier.java:208)
        at com.sun.btrace.org.objectweb.asm.ClassReader.accept(Unknown Source)
        at com.sun.btrace.org.objectweb.asm.ClassReader.accept(Unknown Source)
        at com.sun.btrace.runtime.InstrumentUtils.accept(InstrumentUtils.java:66)
        at com.sun.btrace.runtime.InstrumentUtils.accept(InstrumentUtils.java:62)
        at com.sun.btrace.agent.Client.verify(Client.java:391)
        at com.sun.btrace.agent.Client.loadClass(Client.java:218)
        at com.sun.btrace.agent.RemoteClient.<init>(RemoteClient.java:59)
        at com.sun.btrace.agent.Main.startServer(Main.java:379)
        at com.sun.btrace.agent.Main.access$000(Main.java:65)
        at com.sun.btrace.agent.Main$3.run(Main.java:166)
        at java.lang.Thread.run(Unknown Source)
!!! Error occured
--------------------------------------------------------------------------

VisualVM+BTrace有很多BUG吧,錯誤信息都不穩定,居然冒出來兩種。

可以用JD-GUI查看:

%appdata%\.visualvm\1.3.4\modules\ext\btrace-client.jar

com.sun.btrace.compiler.VerifierVisitor這個類里定義了很多方法,包括但不限於:

visitAssert
visitTry
visitCatch
visitThrow
visitDoWhileLoop
visitEnhancedForLoop
visitForLoop
visitWhileLoop

還可以用JD-GUI查看:

%appdata%\.visualvm\1.3.4\modules\ext\btrace-agent.jar

com.sun.btrace.runtime.MethodVerifier這個類里定義了類似的方法,包括但不限於:

visitJumpInsn
visitTypeInsn

這些visit*()就是實施BTrace安全限制的函數。

BTrace有一個unsafe mode,進入這個模式后前述安全限制就被取消了。對於那些明確
知道自己在干什么的高級用戶,unsafe mode才能真正發揮BTrace強大威力,比如搞點
hexdump()一類的函數用,比如直接用+號進行字符串拼接。

如果是命令行啟動BTrace,可以修改命令行參數-Dcom.sun.btrace.unsafe=true,以
此進入unsafe mode。

我現在用的是:

    x64/Win7
    32-bits Java
    VisualVM 1.3.4
    BTrace Workbench 0.6.5

本來在BTrace界面上有一個Unsafe復選框,但在我這里死活選不中,也不知是誰的BUG。

最后沒辦法了,決定直接修改.class,將unsafe置為true。以這個系統為例。

解壓%appdata%\.visualvm\1.3.4\modules\ext\btrace-agent.jar,用WinHex修改
Main.class,文件偏移0x2a92:

old 12 3b 2c b6 02 a5
new 00 00 00 00 00 04

以zip格式重新打包出btrace-agent.jar。

解壓%appdata%\.visualvm\1.3.4\modules\ext\btrace-client.jar,用WinHex修改
Compiler.class,文件偏移0x1d64:

old 1c
new 04

以zip格式重新打包出btrace-client.jar。
刪除
推薦帖
EIGamal和ECC是什么關系?    QQ不知道被哪個沒良心的盜了,密碼都改了,求助~~
求教如何寫dota平台改鍵    誰能破解個手機同步軟件Android-Sync
誰懂的軟件匯編(密匙破解)及VC軟件開發-急!!!!!!!!!    求高手解md5的明文
重用key的流加密如何破解?    目前QQ軟件加密技術信得過嗎?
防盜版的光盤如何弄成iso鏡像文件啊    公司屏蔽淘寶網 除了 用不好使的代理 除了用手機 還有好的辦法嗎

似乎本身可以配置的呀
you can edit "btrace" script to change -Dcom.sun.btrace.unsafe=false to -Dcom.sun.btrace.unsafe=true.

https://blogs.oracle.com/sundararajan/entry/btrace_unsafe_mode

【 在 hellguard 的大作中提到: 】
: 參看:
: http://kenai.com/projects/btrace/pages/UserGuide
: BTrace很強大,但有很多安全限制,比如:


我不是寫了么,你沒看吧。

如果是命令行啟動BTrace,可以修改命令行參數-Dcom.sun.btrace.unsafe=true,以
此進入unsafe mode。



【 在 metamatrix (matrix) 的大作中提到: 】
: 似乎本身可以配置的呀
: you can edit "btrace" script to change -Dcom.sun.btrace.unsafe=false to -Dcom.sun.btrace.unsafe=true.
: https://blogs.oracle.com/sundararajan/entry/btrace_unsafe_mode


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM