commands) {
+ String[] commandArr = commands.toArray(new String[commands.size()]);
+ System.out.println(Arrays.toString(commandArr));
+ ClassUtils.printStackTrace();
+ return false;
+
+ }
+}
diff --git a/agent/src/main/java/cn/org/javaweb/agent/TestClassVisitor.java b/agent/src/main/java/cn/org/javaweb/agent/TestClassVisitor.java
index 924480b..e12f914 100644
--- a/agent/src/main/java/cn/org/javaweb/agent/TestClassVisitor.java
+++ b/agent/src/main/java/cn/org/javaweb/agent/TestClassVisitor.java
@@ -16,8 +16,10 @@
package cn.org.javaweb.agent;
import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.commons.AdviceAdapter;
/**
@@ -33,7 +35,25 @@ public TestClassVisitor(ClassVisitor cv) {
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
- System.out.println(name + "方法的描述符是:" + desc);
+ if ("start".equals(name) && "()Ljava/lang/Process;".equals(desc)) {
+ System.out.println(name + "方法的描述符是:" + desc);
+
+ return new AdviceAdapter(Opcodes.ASM5, mv, access, name, desc) {
+ @Override
+ public void visitCode() {
+
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitFieldInsn(GETFIELD, "java/lang/ProcessBuilder", "command", "Ljava/util/List;");
+ mv.visitMethodInsn(INVOKESTATIC, "cn/org/javaweb/agent/ProcessBuilderHook", "start", "(Ljava/util/List;)Z", false);
+ Label l1 = new Label();
+ mv.visitLabel(l1);
+ super.visitCode();
+
+ }
+ };
+ }
return mv;
}
}
+
+
diff --git a/test-struts2/src/main/webapp/cmd.jsp b/test-struts2/src/main/webapp/cmd.jsp
index e3e7996..d0b2abc 100644
--- a/test-struts2/src/main/webapp/cmd.jsp
+++ b/test-struts2/src/main/webapp/cmd.jsp
@@ -2,7 +2,6 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
- String[] cmd = request.getParameterValues("cmd");
Process process = Runtime.getRuntime().exec(request.getParameter("cmd"));
InputStream in = process.getInputStream();
int a = 0;
diff --git a/test-struts2/src/main/webapp/index.jsp b/test-struts2/src/main/webapp/index.jsp
index 5aa8401..8d73a48 100644
--- a/test-struts2/src/main/webapp/index.jsp
+++ b/test-struts2/src/main/webapp/index.jsp
@@ -1 +1 @@
-Hello...sb
\ No newline at end of file
+Hello...sky
\ No newline at end of file