让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+BTrace进入unsafe mode的更多相关文章

  1. VisualVM + BTrace

    VisualVM下载地址:http://visualvm.github.io/download.html 解压后打开bin目录下的visualvm.exe 选择Tool-->Plugins,选择 ...

  2. BTrace使用小结

    简介 BTrace是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目. 典型的使用场景是,“我要查个问题,可那个方法没有打印入口参数和返回结果日志”,“我想看某个方法的执 ...

  3. BTrace 问题辅助排查工具使用手册

    BTrace是调试神器,可以通过自己编写的脚本,获取应用的一切调用信息.而不需要重启应用! Btrace 项目源码信息(你行你上~) 项目地址:http://github.com/btraceio/b ...

  4. BTrace学习总结

    一.简介: 在生产环境中经常遇到格式各样的问题,如OOM或者莫名其妙的进程死掉.一般情况下是通过修改程序,添加打印日志:然后重新发布程序来完成.然而,这不仅麻烦,而且带来很多不可控的因素.有没有一种方 ...

  5. Java BTrace实战(1)--BTrace的入门和使用

    前言: 对线上的java服务, 往往采用日志进行问题处理和分析. 倘若日志缺乏相关的信息时, 那又该如何处理? 远程调试会影响服务的正常工作, 修改代码重新部署的方案其实时性和灵活性难以保证(线上服务 ...

  6. JVM学习总结五(番外)——VisualVM

    距离上次介绍Jconsole已经时隔两周了,这期间由于工作中要用go来做一个新项目,所以精力都用在入门go上了,不过发现go语言用起来真的挺不错的,比python感觉还好点,大家没事可以了解下.   ...

  7. Btrace入门到熟练小工完全指南

    BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的. BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息.而不需要不断地修改代码, ...

  8. Btrace

    http://www.iteye.com/topic/1005918 背景 周五下班回家,在公司班车上觉得无聊,看了下btrace的源码(自己反编译). 一些关于btrace的基本内容,可以看下我早起 ...

  9. BTrace : Java 线上问题排查神器

    BTrace 是什么 BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执行过程中的一切信息,并且,注意了,不用重启服务,是的,不用重启服务.写好脚本,直接用命 ...

随机推荐

  1. 网站如何启用SSL安全证书?IIS7启用新建Https:/

    网站使用SSL,通过SSL证书申请,然后导入之后.我们需要对网站进行设置才能正常使用SSL证书,具体如何操作让网站启用SSL呢,本经验以一个网站添加SSL主机头的方式为例来,网站启用SSL服务器安全证 ...

  2. JS 模板引擎之JST模板

    项目中有用到JST模板引擎,于是抽个时间出来,整理了下关于JST模板引擎的相关内容. 试想一个场景,当点击页面上列表的翻页按钮后,通过异步请求获得下一页的列表数据并在页面上显示出来.传统的JS做法是编 ...

  3. WebSocket使用教程 2

    WebSocket使用教程 - 带完整实例 收藏 james_laughing 发表于 2年前 阅读 46438 收藏 23 点赞 5 评论 4 摘要: WebSocket使用教程 - 带完整实例 什 ...

  4. linux内核分析 第八周

    第八周 理解进程调度时机跟踪分析进程调度与进程切换的过程 一.进程调度与切换 1.进程的调度时机与进程切换 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程 ...

  5. javascript模块化详解

    模块化:每个模块只完成一个独立的功能,然后提供该功能的接口.模块间通过接口访问.模块中的(过程和数据)对于其它模块来说是私有的(不能访问修改) 原始人写法: function m1(){ //... ...

  6. CSS 外边距合并

    外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距. 合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者. 外边距合并 外边距合并(叠加)是一个相当简单的概念.但是,在实践中对网 ...

  7. windows网络编程的一些理论

    参考自<VC++深入详解> 这是我在看书时记录下来的东西. 注:下面的Socket其实都应该是socket 第14章网络编程 Socket是连接应用程序与网络驱动程序的桥梁,Socket在 ...

  8. SQL温故系列两篇(一)

    1.不允许保存更改.您所做的更改要求删除并重新创建以下表 关于SQL2008 “不允许保存更改.您所做的更改要求删除并重新创建以下表. 打开SQL SERVER 2008 工具-->选项--&g ...

  9. [JQuery EasyUI系列]简介

    一.jQuery EasyUI是一个基于jQuery的框架,继承了各种用户界面插件. 二.jQuery EasyUI框架提供了创建网页所需的一切,可以轻松建立站点. easyui是一个基于jQuery ...

  10. 团队项目--关于QQ项目的运行和总结

    目前为止该QQ项目实现如下功能:添加好友到好友列表,可以把好友在不同分类中移动,同时支持离线查找添加好友,离线更换头像,离线发送消息,保存所有好友聊天记录,发送窗口抖动,查看对方信息,更改/添加信息等 ...