此代码注入非依赖注入,是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
分享到:
相关推荐
灭火机器人设计zms.pdf
ZMS-08:应用媒体处理器.pdf
ZMS-15T型湿式煤电钻维护保养规程.docx
ZliLABS推出首款1080p蓝光品质掌上型应用媒体处理器ZMS-08.pdf
ZiiLABS公司ZMS-08媒体处理器为低功耗设备提供1080p蓝光品质.pdf
ZiiLABS推出全球首款1080p蓝光品质掌上型应用媒体处理器ZMS-08.pdf
ZiiLABS推出全球首款1080p蓝光品质掌上型应用媒体处理器ZMS-08 (2).pdf
ZiiLABS推出全球首款1080p蓝光品质掌上型应用媒体处理器ZMS-08 (1).pdf
微捷码帮助ziiLABS实现双倍性能和减半功耗的100核心ZMS-40处理器.pdf
ZMS 什么是ZMS? ZMS是ZTO Message Service的缩写,使用方与累解分解,屏蔽各消息发生差异,可以将消息进行进行安装,管理,监控,重置管理的平台。 ZMS能做什么? 客户端快速收发 屏蔽消息接收方使用不同类型互换...
zMS是一个开放源代码游戏,它将推进RPG游戏。 我们将提供带有某些FPS零件的RPG游戏,并且类型可以随时切换。 您会惊讶于游戏玩法。
In this completely up-to-date volume, Herb Schildt, the world's leading programming author, shows you everything you need to know to develop, compile, debug, and run Java applications and applets....
ZMS表格 ZMS(基于 Zope 的 CMS)的简易配方表格 2015 年 Niels Dettenbach / Syndicat IT & Internet GPLv2 许可 ZMSForms(又名 KForms)允许最终用户兼容处理 HTML 表单、联系表单,包括 ZMS 网站中的表单逻辑。 ...
ZMS5:在Python 3.7、3.8上运行
jQuery Mobile是一个框架,用于交付具有统一界面的跨平台移动Web应用程序。jQuery Mobile将响应式布局与渐进式增强结合起来,从而通过一个代码库来呈现最佳的用尸体验。
通过压缩 sms 文本内容,这个 midlet (MIDP 2.0) 允许传输超过 160 个字符的文本
ZMS3:在Python 2.7上运行(稳定,可用于生产环境)
就是一些通用java集合知识点整理,ArrayList LinkedList,HashMap,HashTable ,ConcurrentHashMap,HashSet,LinkedHashSet类通过线程安全否: 底层: 初始值: 扩容 : 区别(对比优势) 图解