试图窥探别人的隐私 -> Java 注入技术

来源:互联网 发布:windows版本有哪些 编辑:程序博客网 时间:2024/05/20 09:44

之前介绍了简单的注入方法,现在介绍 GUI的注入

一、使用包含技术修改GUI元素

        假设有一个窗体类 Ex1 extends JFrame   , 其标题为 Example #1 (Eval Version) , 现在想去掉不想要的内容,要求不使用反编译器,不重新编译源代码的情况下,我们可以使用包含技术(定义一个新类,调用Ex1的方)

定义类 Ex1

import java.awt.*;
import java.awt.evet.*;
import javax.swing.*;

public class Ex1 extends JFrame implements ActionListener
{
 private JButton btnExit;

 public Ex1()
 {
  super("Example #1 (Eval Version)");
  Container c = getContentPane();
  btnExit = new JButton("Exit");
  btnExit.addActionListener(this);
  c.add(btnExit);
  pack();
  setVisible(true);
 }

 public void actionPerformed(ActionEvent ae)
 {
  setVisible(false);
  System.exit(0);
 }
}

 

下面制作我们的注入类 Helper

import java.awt.*;
import java.awt.evet.*;
import javax.swing.*;

public class Helper implements ActionListener
{
 private static Ex1 ex = null;

 public void setTitle(String title) // 设置窗口标题
 {
  ex.setTitle(title);
 }

 public void setButtonText(String text)  // 获取按钮控件 并且设置文本以及事件监听程序
 {
  Container c = ex.getContentPane();
  int size = c.getComponentCount();
  for(int i=0;i<size;i++)
  {
   Component cc = c.getComponent(i);
   if( cc instanceof JButton )
   {
    ((JButton)cc).setText(text);
    ((JButton)cc).addActionListener(this);
    break;
   }
  }
 }

 public void actionPerformed(ActionEvent ae)
 {
  JOptionPane.showMessage(ex,"真的要退出吗?","Really?",0);
  setVisible(false);  
  System.exit(0);
 }

 public static void main(String args[])
 {
  Helper hp = new Helper();
  ex = new Ex1();
  ex.setVisible(false);
  // add my code
  hp.setTitle("Example #1");
  hp.setButtonText("Shit is good");
  // end my code
  ex.setVisible(true);
 }
}

 

原创粉丝点击