Java进程 代码注入 (Powered by zms)

发信人: zms (小美), 信区: Java
标 题: java进程 代码注入 (Powered by zms)
发信站: 水木社区 (Thu Sep 29 17:30:23 2011), 站内

此代码注入非依赖注入,是hack里的 代码注入

场景是这样滴:
机器上有一个java进程,我不想停止它,但我想把一段代码植入进去,干
一些事情(获取一些信息,改变一些值,监控一些东西,或者其它猥琐的事情)
这个进程不能停,而且也没有预料到现在的事情,或者这个进程的代码完全不能修改。

好,这篇文章是要干这个事情,它基于 jvm的 jdi或者jvmti 接口
这里用的jvmti,jdi也可以,麻烦不少
应该jdk1.5 就有,需要用c写。1.6 支持另一种方式,java也可以写
以前做过类似的事情,代码找不到了,现在有实现了一番。

直接上代码:

被注入的代码是这样滴:

while(true) {
System.out.println(System.currentTimeMillis());
Thread.sleep(1000);
}

每隔一秒输出当前时间,只是示意用。不管什么java程序都行


我要注入的类,那个方法是固定的:

package com.zms.inject;

import java.lang.instrument.Instrumentation;

public class MyAgent1 {

public static void premain(String s) {
premain(s, null);
}

public static void premain(String s, Instrumentation instru) {
System.out.println("I'm injected! 木哈哈哈哈哈");
System.out.printf("param: %s\n", s);
}


public static void agentmain(String args, Instrumentation inst) {
premain(args, inst);
}


public static void agentmain(String args) {
premain(args);
}

}

编译,打入jar包

MANIFEST.MF

Manifest-Version: 1.0
Created-By: 1.6.0_26 (Apple Inc.)
Agent-Class: com.zms.inject.MyAgent1
Premain-Class: com.zms.inject.MyAgent1



操作代码:

import com.sun.tools.attach.*;
import com.sun.tools.attach.spi.AttachProvider;


VirtualMachine vm=VirtualMachine.attach("24862"); //target java process pid
System.out.println(vm);
vm.loadAgent("/Users/zms/workspace/mt/out/production/agent1.jar","Powered by zms!");
Thread.sleep(1000);
vm.detach();


目标程序结果:

1317283652520
1317283653520
1317283654521
I'm injected! 木哈哈哈哈哈
param: Powered by zms!
1317283655521
1317283656522



--
blog: http://blog.wsdd.org/
每天都有更新

本人可以帮忙解决您的任何和Java有关的技术问题,任何方向均可,难度越大越好
其它方向如 Flash/Flex/Web/数据库/UI/算法/Hack/调优/搜索/Script/Win32等也均可胜任
可以免费提供指导咨询和给出技术方向
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值