水木:java进程 代码注入 (Powered by zms)

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

http://www.btsmth.com/show_topic.php?en_name=Java&gid=277398
楼主 zms (小美)
此代码注入非依赖注入,是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


回复 删除
推荐帖
做个调查显摆个,我在做个scm平台
请教,用什么工具写xml文件能换行和自动缩进。zip压缩docx文件,解压后有问题
Java学习Java与模式这本书,有人转手吗
做高级XXX需要了解应用到什么程度真实的ITer薪资水平来了!!!
关于泛型求教大家,java程序中怎么把字符串作为关键字调用现有的搜索引擎返回结果?
2011-09-29 17:33:49
广东省广州市电信ADSL
在本版活跃指数 29.6

canper (洗衣粉)

 拜,我记得你之前贴在水木的博客上
【 在 zms (小美) 的大作中提到: 】
: 此代码注入非依赖注入,是hack里的 代码注入
: 场景是这样滴:
: 机器上有一个java进程,我不想停止它,但我想把一段代码植入进去,干
: ...................
支持 回复 删除
2011-09-29 17:35:24
在本版活跃指数 23.7
blog:   http://blog.wsdd.org/
  每天都有更新

本人可以帮忙解决您的任何和Java有关的技术问题,任何方向均可,难度越大越好
其它方向如 Flash/Flex/Web/数据库/UI/算法/Hack/调优/搜索/Script/Win32等也均可胜任
可以免费提供指导咨询和给出技术方向


楼主 zms (小美)
嗯,水木blog挂了,文件下不下来了。源代码也找不到了。。
只好再研究一遍。
那个工具是动态更新代码的。(程序不停机,不用调试模式)

和这个本质是一样的。

【 在 canper (洗衣粉) 的大作中提到: 】
:  拜,我记得你之前贴在水木的博客上

支持 回复 删除
2011-09-29 17:39:16
中国
在本版活跃指数 19.4
软件变慢的速度要快于硬件变快的速度


modico ().net()
能移走吗?能移走自己吗?能移走别的吗?
 移走前,println("byebye!")

【 在 zms (小美) 的大作中提到: 】
: 此代码注入非依赖注入,是hack里的 代码注入
: 场景是这样滴:
: 机器上有一个java进程,我不想停止它,但我想把一段代码植入进去,干
: ...................
支持 回复 删除
2011-09-29 17:41:18
在本版活跃指数 23.7
blog:   http://blog.wsdd.org/
  每天都有更新

本人可以帮忙解决您的任何和Java有关的技术问题,任何方向均可,难度越大越好
其它方向如 Flash/Flex/Web/数据库/UI/算法/Hack/调优/搜索/Script/Win32等也均可胜任
可以免费提供指导咨询和给出技术方向


楼主 zms (小美)
一切皆有可能

【 在 modico ().net() 的大作中提到: 】
:  能移走吗?能移走自己吗?能移走别的吗?
:  移走前,println("byebye!")

支持 回复 删除
2011-09-29 17:41:33
中国
在本版活跃指数 19.4
珍爱生命,远离IDE


modico ().net()
上,代码

【 在 zms (小美) 的大作中提到: 】
: 一切皆有可能

支持 回复 删除
2011-09-29 17:46:10
北京市联通ADSL
在本版活跃指数 18.4

Apache9 ()()
这个是不是靠security设置可以不让你这么干?
【 在 zms (小美) 的大作中提到: 】
: 一切皆有可能

支持 回复 删除
2011-09-29 17:47:47
在本版活跃指数 23.7
blog:   http://blog.wsdd.org/
  每天都有更新

本人可以帮忙解决您的任何和Java有关的技术问题,任何方向均可,难度越大越好
其它方向如 Flash/Flex/Web/数据库/UI/算法/Hack/调优/搜索/Script/Win32等也均可胜任
可以免费提供指导咨询和给出技术方向


楼主 zms (小美)
很简单,做一个基本的agent。
它工作起来大概是:

根据传入的一个url
new 一个URLClassLoader,载入那个url对应的jar
load出来class来,真正的执行。
执行完后,所有实例干掉,gc,把所有的class都gc掉,最后把classloader也gc掉
除了屏幕上的hello world,不留下任何痕迹
就ok了。

【 在 modico ().net() 的大作中提到: 】
:  上,代码

支持 回复 删除
2011-09-29 17:48:01
中国
在本版活跃指数 19.4
软件变慢的速度要快于硬件变快的速度


modico ().net()
谁不让干就先搞谁

【 在 Apache9 ()() 的大作中提到: 】
: 这个是不是靠security设置可以不让你这么干?

支持 回复 删除
2011-09-29 17:48:25
中国
在本版活跃指数 23.7
blog:   http://blog.wsdd.org/
  每天都有更新

本人可以帮忙解决您的任何和Java有关的技术问题,任何方向均可,难度越大越好
其它方向如 Flash/Flex/Web/数据库/UI/算法/Hack/调优/搜索/Script/Win32等也均可胜任
可以免费提供指导咨询和给出技术方向


楼主 zms (小美)
木哈哈哈

靠人类是阻止不了的

【 在 modico ().net() 的大作中提到: 】
: 标  题: Re: java进程 代码注入 (Powered by zms)
: 发信站: 水木社区 (Thu Sep 29 17:48:01 2011), 站内
:
:  谁不让干就先搞谁
:
: 【 在 Apache9 ()() 的大作中提到: 】
: : 这个是不是靠security设置可以不让你这么干?
:
:
: --
: 软件变慢的速度要快于硬件变快的速度
:
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 1.202.91.*]

支持 回复 删除
2011-09-29 17:50:27
中国
在本版活跃指数 19.4
天暖花开不做工
将来哪里好过冬


modico ().net()
小美上代码就像翠花上酸菜

【 在 zms (小美) 的大作中提到: 】
: 很简单,做一个基本的agent。
: 它工作起来大概是:
: 根据传入的一个url
: ...................
支持 回复 删除
2011-09-29 18:16:47
北京市光环新网
在本版活跃指数 18.9

memory166 (司机加油,必须夺冠)
难道可以随便载入类?而不受范围的控制?
直接可以调用别人的private方法么?
【 在 zms (小美) 的大作中提到: 】
: 此代码注入非依赖注入,是hack里的 代码注入
: 场景是这样滴:
: 机器上有一个java进程,我不想停止它,但我想把一段代码植入进去,干
: ...................
支持 回复 删除
2011-09-29 18:24:56
在本版活跃指数 23.7
blog:   http://blog.wsdd.org/
  每天都有更新

本人可以帮忙解决您的任何和Java有关的技术问题,任何方向均可,难度越大越好
其它方向如 Flash/Flex/Web/数据库/UI/算法/Hack/调优/搜索/Script/Win32等也均可胜任
可以免费提供指导咨询和给出技术方向


楼主 zms (小美)
Keep Your Mind Wide Open,一切皆有可能:

你本来写了一个desktop的记事本程序,运行以后,我注入我的代码,关掉你的窗体,从远端下载我的jar,偷偷下载一个jetty,启动,下载war,部署。进程还是那个进程,结果变成了一个app serve可以提供服务


【 在 memory166 (司机加油,必须夺冠) 的大作中提到: 】
: 难道可以随便载入类?而不受范围的控制?
: 直接可以调用别人的private方法么?

支持 回复 删除
2011-09-29 18:29:54
在本版活跃指数 23.7
blog:   http://blog.wsdd.org/
  每天都有更新

本人可以帮忙解决您的任何和Java有关的技术问题,任何方向均可,难度越大越好
其它方向如 Flash/Flex/Web/数据库/UI/算法/Hack/调优/搜索/Script/Win32等也均可胜任
可以免费提供指导咨询和给出技术方向


楼主 zms (小美)
如果安全措施做的不好的话,甚至可以跨越机器注入

【 在 memory166 (司机加油,必须夺冠) 的大作中提到: 】
: 难道可以随便载入类?而不受范围的控制?
: 直接可以调用别人的private方法么?

支持 回复 删除
2011-09-29 20:16:54
北京市光环新网
在本版活跃指数 18.9

memory166 (司机加油,必须夺冠)
明白鸟~这是为你的程序找了个宿主!
【 在 zms (小美) 的大作中提到: 】
: Keep Your Mind Wide Open,一切皆有可能:
: 你本来写了一个desktop的记事本程序,运行以后,我注入我的代码,关掉你的窗体,从远端下载我的jar,偷偷下载一个jetty,启动,下载war,部署。进程还是那个进程,结果变成了一个app serve可以提供服务
支持 回复 删除
2011-09-29 20:19:32
北京市光环新网
在本版活跃指数 18.9

memory166 (司机加油,必须夺冠)
只能运行你自己注入的代码,运行不了你宿主jvm进程里面的那些代码。
我的意思是,比如进入alipay进程,运行它的充值方法,然后,就没有然后了……
【 在 zms (小美) 的大作中提到: 】
: 如果安全措施做的不好的话,甚至可以跨越机器注入
支持 回复 删除
2011-09-29 20:24:30
在本版活跃指数 23.7
blog:   http://blog.wsdd.org/
  每天都有更新

本人可以帮忙解决您的任何和Java有关的技术问题,任何方向均可,难度越大越好
其它方向如 Flash/Flex/Web/数据库/UI/算法/Hack/调优/搜索/Script/Win32等也均可胜任
可以免费提供指导咨询和给出技术方向


楼主 zms (小美)
当然可以啊, 一个进程内啊。
【 在 memory166 (司机加油,必须夺冠) 的大作中提到: 】
: 只能运行你自己注入的代码,运行不了你宿主jvm进程里面的那些代码。
: 我的意思是,比如进入alipay进程,运行它的充值方法,然后,就没有然后了……

支持 回复 删除
2011-09-29 23:37:14
美国北达科他州立大学
在本版活跃指数 19.2



qblyy (十年先も君に恋して·情何以堪)


【 在 zms (小美) 的大作中提到: 】
: 此代码注入非依赖注入,是hack里的 代码注入
: 场景是这样滴:
: 机器上有一个java进程,我不想停止它,但我想把一段代码植入进去,干
: ...................
支持 回复 删除
2011-09-30 00:39:12
美国/加拿大
在本版活跃指数 20.7
男子汉,大丈夫,生又何忧,死又何欢?

我出了门,干咳两声,袖了手,施施然而去......

那一刻被电光照亮的这个身姿,千万年后仍凝固在传说之中。


muser (负尽千重罪,练就不死心)
THIS tech shown here is more like a DLL injection--MS used it for debugging but left a big door for virus--rather than code instrument.

you may search "java bytecode instrument" for your need.

【 在 memory166 的大作中提到: 】
: 难道可以随便载入类?而不受范围的控制?
: 直接可以调用别人的private方法么?
: 【 在 zms (小美) 的大作中提到: 】
: ...................
支持 回复 删除
2011-09-30 00:40:45
北京市西城区联通ADSL
在本版活跃指数 11.8
【 在 KCN (毒中之毒~strongest) 的大作中提到: 】
: 标  题: Re: 搜水木,上奇虎 (转载)
: 发信站: 水木社区 (Wed Jul 15 10:13:10 2009), 站内
:
:   太不像话了,真流氓阿!
: 【 在 PKubuntu (Your Emacs Is Mine) 的大作中提到: 】


PKubuntu (Your Emacs Is Mine)
i总前两天还在python版发了一个python的

         https://fedorahosted.org/pyrasite/

看来所有语言的终极目标都是向lisp靠拢阿

【 在 zms (小美) 的大作中提到: 】
: 此代码注入非依赖注入,是hack里的 代码注入
: 场景是这样滴:
: 机器上有一个java进程,我不想停止它,但我想把一段代码植入进去,干
: ...................
支持 回复 删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.tarena.dingdang.filter; 02 03 import java.io.IOException; 04 import java.util.Enumeration; 05 06 import javax.servlet.Filter; 07 import javax.servlet.FilterChain; 08 import javax.servlet.FilterConfig; 09 import javax.servlet.ServletException; 10 import javax.servlet.ServletRequest; 11 import javax.servlet.ServletResponse; 12 import javax.servlet.http.HttpServletRequest; 13 14 public class AntiSqlInjectionfilter implements Filter { 15 16 public void destroy() { 17 // TODO Auto-generated method stub 18 } 19 20 public void init(FilterConfig arg0) throws ServletException { 21 // TODO Auto-generated method stub 22 } 23 24 public void doFilter(ServletRequest args0, ServletResponse args1, 25 FilterChain chain) throws IOException, ServletException { 26 HttpServletRequest req=(HttpServletRequest)args0; 27 HttpServletRequest res=(HttpServletRequest)args1; 28 //获得所有请求参数名 29 Enumeration params = req.getParameterNames(); 30 String sql = ""; 31 while (params.hasMoreElements()) { 32 //得到参数名 33 String name = params.nextElement().toString(); 34 //System.out.println("name===========================" + name + "--"); 35 //得到参数对应值 36 String[] value = req.getParameterValues(name); 37 for (int i = 0; i < value.length; i++) { 38 sql = sql + value[i]; 39 } 40 } 41 //System.out.println("============================SQL"+sql); 42 //有sql关键字,跳转到error.html 43 if (sqlValidate(sql)) { 44 throw new IOException("您发送请求中的参数中含有非法字符"); 45 //String ip = req.getRemoteAddr(); 46 } else { 47 chain.doFilter(args0,args1); 48 } 49 } 50 51 //效验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值