javaagent可以hook字节码处理

java -javaagent:jebloader.jar -jar xxx.jar

结合javassist,可以动态替换方法内容

import java.io.ByteArrayInputStream;
import java.io.PrintStream;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod; public class Loader
{
public static void premain(String agentOps, Instrumentation inst)
{
inst.addTransformer(new ClassFileTransformer()
{
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
throws IllegalClassFormatException
{
className = className.replace("/", ".");
if (className.equals("com.pnfsoftware.jeb.client.Licensing")) {
try
{
ClassPool pool = ClassPool.getDefault();
CtClass ctClass = pool.makeClass(new ByteArrayInputStream(classfileBuffer));
CtMethod a = ctClass.getDeclaredMethod("getExpirationTimestamp", null);
System.out.println("loader��������100%~");
a.setBody("return 2000000000;");
return ctClass.toBytecode();
}
catch (Exception e)
{
e.printStackTrace();
}
} else if (className.equals("com.pnfsoftware.jeb.client.AbstractClientContext")) {
try
{
ClassPool pool = ClassPool.getDefault();
CtClass ctClass = pool.makeClass(new ByteArrayInputStream(classfileBuffer));
CtMethod a = ctClass.getDeclaredMethod("startFloatingClient", null);
System.out.println("loader��������50%~");
a.setBody("return;");
return ctClass.toBytecode();
}
catch (Exception e)
{
e.printStackTrace();
}
}
return new byte[0];
}
});
}
}

其他相关文档
https://bbs.pediy.com/thread-222503.htm

https://jinyu00.github.io/jeb%E7%A0%B4%E8%A7%A3/2017-10-27-%E7%A0%B4%E8%A7%A3-jeb-2-3-7-demo.html

java随手记的更多相关文章

  1. Java小白手记2:一些名词解释

    看到<Java 征途:行者的地图> ,这是一篇有关java学习路径文章.对我等Java小白有指引作用.里面提到了一些基本的名词术语,有些我知道,有些不知道,再补上一些自己曾觉得模糊的,记录 ...

  2. Java学习手记2——多线程

    一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...

  3. Java学习手记1——集合

    一.什么是集合 集合是对象的集合,就像数组是数的集合.集合是一种容器,可以存放对象(可以是不同类型的对象). 二.集合的优点(为什么要用集合) 当然,在java里,可以使用数组来存放一组类型相同的对象 ...

  4. Java自学手记——struts2

    struts2框架 struts2是一种基于MVC模式的框架,是在struts1的基础上融合了xwork的功能. struts2框架预处理了一些功能: >请求数据自动封装, >文件上传的功 ...

  5. Java自学手记——Java中的关键字

    Java中的一些关键字对于初学者来说有时候会比较混乱,在这里整理一下,顺便梳理一下目前掌握的关键字. 权限修饰符 有四个,权限从大到小是public>protected>defaul(无修 ...

  6. Java自学手记——接口

    抽象类 1.当类和对象被abstract修饰符修饰的时候,就变成抽象类或者抽象方法.抽象方法一定要在抽象类中,抽象类不能被创建对象,如果需要使用抽象类中的抽象方法,需要由子类重写抽象类中的方法,然后创 ...

  7. 【Java】Java随手记

    System.out.printf() : System.out.printf("%d",x);               输出整数 System.out.printf(&quo ...

  8. Java小白手记:SSH

    以下内容只是一个小白菜鸟的理解和总结,目的仅在于梳理思路. 13年的时候,我就说要学JAVA,有个C++高手同事赞许地说:"嗯,不错,SSH..."我不禁肃然起敬.SSH!多么高大 ...

  9. Java小白手记:WEB项目等

    机缘巧合之下,工作中得以用一下java.我向来对java很感兴趣,想从.NET转到java久矣,机会难得,久旱逢甘霖. 这次主要是跟web项目有关.在此之前,我了解到JAVA分为三大块:j2se.j2 ...

随机推荐

  1. 报错:numRecords must not be negative

    报错的原因:删除已经使用过的kafka topic,然后新建同名topic 解决方法:把topic名字换一下 (有其他更好的解决方法,可以不修改topic名)

  2. plsql连接oracle数据库

    步骤 (1)线上安装oracle数据库(已配好) (2)本地远程连接.安装oracle客户端(运行时) (3)安装plsql. (4)oracle客户端可以不用配置,直接在plsql中数据访问验证

  3. 【转】线程同步------java synchronized详解

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...

  4. Linux下安卓ndk混合编译调用so方法——QuickStart学习

    转自:http://www.52pojie.cn/thread-313869-1-1.html #注意:.h 和.c中的错误eclipse不会检查,只会调用时在手机或虚拟机中死掉.因此需要仔细检查其中 ...

  5. 【Python3 爬虫】05_安装Scrapy

    Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛.框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容 ...

  6. bootstrap资料链接

    别人的博客,写的还不错 http://www.cnblogs.com/hnnydxgjj/category/879277.html

  7. Android_View_得到Activity

    Context context = view.getContext(); if (context instanceof Activity){ Activity activity = (Activity ...

  8. C# JSON序列化日期格式问题

    默认序列化日期为1970至今的时间戳 需要在json.convert中做一些设置 //JavaScriptSerializer js = new JavaScriptSerializer(); Iso ...

  9. Linux操作系统下/etc/hosts文件配置方法

    1.关于/etc/host,主机名和IP配置文件 Hosts - The static table lookup for host name(主机名查询静态表) hosts文件是Linux系统中一个负 ...

  10. Python内置函数之classmethod()

    函数的参数是一个函数: classmethod(func) 作用是,在外部,类对象能够直接调用类方法. 常用来作为装饰器. >>> class C: ... def f(self): ...