java随手记

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

转载于:https://www.cnblogs.com/yondy/p/7790057.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值