debugger.java

来自「一个功能强大的聊天程序.....基本实现所有功能....强烈推荐下载」· Java 代码 · 共 1,422 行 · 第 1/4 页

JAVA
1,422
字号
        miAgentKey.setText("Encrypt with File Agent Key");
        miAgentKey.addSelectionListener(new SelectionAdapter() {
        	public void widgetSelected(SelectionEvent e) {
        		encryptInput(user.getFileAgentKey());
        	}
        });
        // 用未知密钥03加密
        final MenuItem mi03Key = new MenuItem(encryptMenu, SWT.PUSH);
        mi03Key.setText("Encrypt with Unknown Key 03");
        mi03Key.addSelectionListener(new SelectionAdapter() {
        	public void widgetSelected(SelectionEvent e) {
        		encryptInput(user.getUnknown03Key());
        	}
        });
        // 用未知密钥06加密
        final MenuItem mi06Key = new MenuItem(encryptMenu, SWT.PUSH);
        mi06Key.setText("Encrypt with Unknown Key 06");
        mi06Key.addSelectionListener(new SelectionAdapter() {
        	public void widgetSelected(SelectionEvent e) {
        		encryptInput(user.getUnknown06Key());
        	}
        });
        // 用未知密钥07加密
        final MenuItem mi07Key = new MenuItem(encryptMenu, SWT.PUSH);
        mi07Key.setText("Encrypt with Unknown Key 07");
        mi07Key.addSelectionListener(new SelectionAdapter() {
        	public void widgetSelected(SelectionEvent e) {
        		encryptInput(user.getUnknown07Key());
        	}
        });
        // 用未知密钥08加密
        final MenuItem mi08Key = new MenuItem(encryptMenu, SWT.PUSH);
        mi08Key.setText("Encrypt with Unknown Key 08");
        mi08Key.addSelectionListener(new SelectionAdapter() {
        	public void widgetSelected(SelectionEvent e) {
        		encryptInput(user.getUnknown08Key());
        	}
        });
        // 用用户输入的内容做为密钥加密
        mi = new MenuItem(encryptMenu, SWT.PUSH);
        mi.setText("Encrypt with User Input Key...");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                String s = getInput("Input a KEY and the content of the input textbox will be decrypted with it");
                if(s == null)
                    showMessage("Your input is invalid!");
                else {
                    byte[] key = Util.convertHexStringToByte(s);
                    if(key == null || key.length != QQ.QQ_LENGTH_KEY)
                        showMessage("The key is invalid!");
                    else
                    	encryptInput(key);
                }                    
            }
        });
        // 用用户输入的密码的密码密钥加密
        mi = new MenuItem(encryptMenu, SWT.PUSH);
        mi.setText("Encrypt with Key of User Input Password...");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                String s = getInput("Input a password and the content of the input textbox will be decrypted with its password key");
                if(s == null)
                    showMessage("Your input is empty");
                else {
                    byte[] key = md5(md5(s.getBytes()));
                    encryptInput(key);
                }                    
            }
        });
        // 菜单事件
        encryptMenu.addMenuListener(new MenuAdapter() {
        	@Override
        	public void menuShown(MenuEvent e) {
        		boolean userNull = user == null;
        		miAgentKey.setEnabled(!userNull && user.getFileAgentKey() != null);
        		mi03Key.setEnabled(!userNull && user.getUnknown03Key() != null);
        		mi06Key.setEnabled(!userNull && user.getUnknown06Key() != null);
        		mi07Key.setEnabled(!userNull && user.getUnknown07Key() != null);
        		mi08Key.setEnabled(!userNull && user.getUnknown08Key() != null);
        		miInitKey.setEnabled(main != null);
        		miFileSessionKey.setEnabled(!userNull && user.getFileSessionKey() != null);
        		miSessionKey.setEnabled(!userNull && user.getSessionKey() != null);
        		miPasswordKey.setEnabled(!userNull && user.getPasswordKey() != null);
        	}
        });
	}

	private void initPacketMenu() {
		/* 包列表右键菜单 */
        final Table packetTable = packetViewer.getTable();
        packetMenu = new Menu(packetTable);
        // 删除一个包
        MenuItem mi = new MenuItem(packetMenu, SWT.PUSH);
        mi.setText("Remove");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                int[] index = packetTable.getSelectionIndices();
                for(int i = index.length - 1; i >= 0; i--)
                    removeDebugObject(index[i]);
            }
        });
        // 删除所有包
        mi = new MenuItem(packetMenu, SWT.PUSH);
        mi.setText("Remove All");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                removeAllPackets();
            }
        });
        
        // 添加菜单事件
        packetMenu.addMenuListener(new MenuAdapter() {
            public void menuShown(MenuEvent e) {
                packetMenu.getItem(0).setEnabled(packetTable.getSelectionIndex() != -1);
                packetMenu.getItem(1).setEnabled(packetTable.getItemCount() > 0);
            }
        });
	}

	private void initTextMenu() {
		MenuItem mi;
		// body窗口右键菜单
        textMenu = new Menu(getShell());
        // copy
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Copy");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                byte[] b = Util.convertHexStringToByte(getSelectionText());
                if(b != null) {
	                Clipboard clipboard = new Clipboard(display);
	                clipboard.setContents(new Object[] { textBytes.getSelectionText() }, new Transfer[] { TextTransfer.getInstance() });
	                clipboard.dispose();  
                }
            }
        });
        // copy as string
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Copy As String");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                byte[] b = Util.convertHexStringToByte(getSelectionText());
                if(b != null) {
	                Clipboard clipboard = new Clipboard(display);
	                clipboard.setContents(new Object[] { Util.getString(b) }, new Transfer[] { TextTransfer.getInstance() });
	                clipboard.dispose();  
                }
            }
        });
        // separator
        mi = new MenuItem(textMenu, SWT.SEPARATOR);
        // As Text
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Show as Text");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                byte[] b = Util.convertHexStringToByte(getSelectionText());
                if(b != null) {
                    String msg = Util.getString(b);
	                showMessage(msg);
                }
            }
        });
        // get ip
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Show as IP");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                StringTokenizer st = new StringTokenizer(getSelectionText(), " ");
                int len = st.countTokens();
                if(len != 4)
                    showWarning("To show an IP, you should selected 4 bytes.");
                else {
                    byte[] ip = Util.convertHexStringToByte(getSelectionText());
                    showMessage(edu.tsinghua.lumaqq.qq.Util.getIpStringFromBytes(ip));
                }
            }
        });
        // get port
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Show as Port");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                StringTokenizer st = new StringTokenizer(getSelectionText(), " ");
                int len = st.countTokens();
                if(len != 2)
                    showWarning("To show a port, you should selected 2 bytes.");
                else {
                    byte[] ip = Util.convertHexStringToByte(getSelectionText());
                    int port = (ip[0] << 8) & 0xFF00 | ip[1] & 0xFF;
                    showMessage(String.valueOf(port));
                }
            }
        });
        // get integer
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Show as Integer");
        mi.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
                StringTokenizer st = new StringTokenizer(getSelectionText(), " ");
                int len = st.countTokens();
                if(len > 4)
                    showWarning("To show a integer, you should selected no more than 4 bytes.");
                else {
                	String s = getSelectionText().replaceAll(" ", "");
                	int i = Util.getInt(s, 16, 0);
                    showMessage(String.valueOf(i));
                }
			}
        });
        // get long
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Show as Long");
        mi.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
                StringTokenizer st = new StringTokenizer(getSelectionText(), " ");
                int len = st.countTokens();
                if(len > 8)
                    showWarning("To show a integer, you should selected no more than 8 bytes.");
                else {
                	String s = getSelectionText().replaceAll(" ", "");
                	long l = Util.getLong(s, 16, 0);
                    showMessage(String.valueOf(l));
                }
			}
        });
        // get time
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Show as Time");
        mi.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
                StringTokenizer st = new StringTokenizer(getSelectionText(), " ");
                int len = st.countTokens();
                if(len > 4)
                    showWarning("To show a integer, you should selected no more than 4 bytes.");
                else {
                	String s = getSelectionText().replaceAll(" ", "");
                	long t = Util.getLong(s, 16, 0) * 1000L;
                    showMessage(new Date(t).toString());
                }
			}
        });
        // separator
        mi = new MenuItem(textMenu, SWT.SEPARATOR);   
        // Go to
        mi = new MenuItem(textMenu, SWT.PUSH);
        mi.setText("Go To...");
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                String s = getInput("Which byte you want to locate");
                if(s == null)
                    showWarning("You Should Input a Integer");
                else {
                    int index = Util.getInt(s, -1);
                    if(index == -1)
                        return;
                    textBytes.setSelection(index * 3, index * 3 + 2);
                }
            }
        });      
        // menu listener
        textMenu.addMenuListener(new MenuAdapter() {
            public void menuShown(MenuEvent e) {
                textMenu.getItem(0).setEnabled(getSelectionText().length() > 0);
            }
        });
	}

	private void initSendMenu() {
		MenuItem mi;
		// 发送菜单
        if(main != null) {
        	sendMenu = new Menu(getShell());
        	// 发送为基本协议族包
        	mi = new MenuItem(sendMenu, SWT.PUSH);
        	mi.setText("As Basic Family");
        	mi.addSelectionListener(new SelectionAdapter() {
        		@Override
        		public void widgetSelected(SelectionEvent e) {
        			char command = inputCommand();
        			if(command == QQ.QQ_CMD_UNKNOWN)
        				return;
                    byte[] b = Util.convertHexStringToByte(textSend.getText().trim());
                    if(b == null)
                        showWarning("The content you input can't parsed as a byte array");
                    else {
                        BasicDebugPacket packet = new BasicDebugPacket(command, user);
                        packet.setBody(b);
                        main.getClient().sendPacket(packet);                            
                    }
        		}
        	});
        	// Advanced...
        	mi = new MenuItem(sendMenu, SWT.PUSH);
        	mi.setText("Advanced...");
        	mi.addSelectionListener(new SelectionAdapter() {
        		@Override
        		public void widgetSelected(SelectionEvent e) {
        			PortDialog dialog = new PortDialog(getShell(), main.getClient());
        			if(dialog.open() == IDialogConstants.OK_ID) {
        				String id = dialog.getConnectionId();
        				IConnection con = main.getClient().getConnectionPool().getConnection(id);
        				if(con == null)
        					return;
        				int family = dialog.getSelectedFamily();
        				if(family == 0)
        					return;
        				
            			char command = inputCommand();
            			if(command == QQ.QQ_CMD_UNKNOWN)
            				return;
                        byte[] b = Util.convertHexStringToByte(textSend.getText().trim());
                        if(b == null)
                            showWarning("The content you input can't parsed as a byte array");
                        else {
                        	switch(family) {
                        		case QQ.QQ_PROTOCOL_FAMILY_BASIC:
                                    BasicDebugPacket packet = new BasicDebugPacket(command, user);
                                    packet.setBody(b);
                                    main.getClient().sendPacket(packet, id);   
                                    break;
                        		case QQ.QQ_PROTOCOL_FAMILY_03:
                        			_03DebugPacket _03packet = new _03DebugPacket(command, user);
                        			_03packet.setBody(b);
                        			main.getClient().sendPacket(_03packet, id);
                        			break;
                        		case QQ.QQ_PROTOCOL_FAMILY_05:
                        			_05DebugPacket _05packet = new _05DebugPacket(command, user);
                        			_05packet.setBody(b);
                        			main.getClient().sendPacket(_05packet, id);
                        			break;
                        		case QQ.QQ_PROTOCOL_FAMILY_DISK:
                        			DiskDebugPacket diskPacket = new DiskDebugPacket(command, user);
                        			diskPacket.setBody(b);
                        			main.getClient().sendPacket(diskPacket, id);
                        			break;
                        	}
                        }
        			}
        		}
        	});
        }
	}

	private void initParseMenu() {
		MenuItem mi;
		// 解析菜单
        parseMenu = new Menu(getShell());
        // 解析为输入包
        mi = new MenuItem(parseMenu, SWT.PUSH);
        mi.setText("Incoming Packet");
        mi.addSelectionListener(new SelectionAdapter() {
        	@Override
            public void widgetSelected(SelectionEvent e) {
                byte[] b = Util.convertHexStringToByte(textInput.getText());
                if(b == null) {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?