让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

你可能感兴趣的:(visualvm)