⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debugger.java

📁 java写的qq代码实现qq的部分功能
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        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 = (long)Integer.parseInt(s, 16) * 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);
            }
        });
        
        // 解密菜单
        decryptMenu = new Menu(getShell());
        // 用会话密钥解密
        mi = new MenuItem(decryptMenu, SWT.PUSH);
        mi.setText("Decrypt with Session Key");
        mi.setEnabled(main != null);
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                decryptInput(user.getSessionKey());
            }
        });
        // 用密码密钥解密
        mi = new MenuItem(decryptMenu, SWT.PUSH);
        mi.setText("Decrpty with Password Key");
        mi.setEnabled(main != null);   
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                decryptInput(user.getPasswordKey());
            }
        });
        // 用文件传输会话密钥解密
        mi = new MenuItem(decryptMenu, SWT.PUSH);
        mi.setText("Decrypt with File Session Key");
        mi.setEnabled(main != null);
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                decryptInput(user.getFileSessionKey());
            }
        });
        // 用文件中转密钥解密
        mi = new MenuItem(decryptMenu, SWT.PUSH);
        mi.setText("Decrypt with File Agent Key");
        mi.setEnabled(main != null);
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                decryptInput(user.getFileAgentKey());
            }
        });
        // 用QQ初始密钥解密
        mi = new MenuItem(decryptMenu, SWT.PUSH);
        mi.setText("Decrypt with QQ Initial Key");
        mi.setEnabled(main != null);
        mi.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                decryptInput(user.getInitKey());
            }
        });
        // 用用户输入的内容做为密钥解密
        mi = new MenuItem(decryptMenu, SWT.PUSH);
        mi.setText("Decrypt 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_KEY_LENGTH)
                        showMessage("The key is invalid!");
                    else
                        decryptInput(key);
                }                    
            }
        });
        // 用用户输入的密码的密码密钥解密
        mi = new MenuItem(decryptMenu, SWT.PUSH);
        mi.setText("Decrypt 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 = Util.doMD5(Util.doMD5(s.getBytes()));
                    decryptInput(key);
                }                    
            }
        });
    }
    
    /**
     * 初始化变量
     * 
     * @param shell
     */
    protected void initializeVariables(Shell shell) {
        display = shell.getDisplay();        
        icons = IconHolder.getInstance();
        font = new Font(display, "Courier New", 9, SWT.NORMAL);
        handCursor = display.getSystemCursor(SWT.CURSOR_HAND);
        packets = new ArrayList();
        addPacketRunnable = new AddPacketRunnable();
    }
    
    /**
     * 如果要做为一个独立程序运行,则使用main方法
     * 
     * @param args
     * 			命令行参数
     */
    public static void main(String[] args) {        
        new Debugger(null).open();
    }
    
    /**
     * 打开一个输入对话框,返回用户输入
     * 
     * @param msg
     * 		提示
     * @return
     * 		输入的字符串
     */
    private String getInput(String msg) {
        InputDialog dialog = new InputDialog(getShell(), 
                "Input",
                msg,
                null,
                null);
        if(dialog.open() == IDialogConstants.OK_ID)
            return dialog.getValue();
        else
            return null;
    }
    
    /* (non-Javadoc)
     * @see org.eclipse.jface.window.Window#createContents(org.eclipse.swt.widgets.Composite)
     */
    protected Control createContents(Composite parent) {
        parent.setLayout(new GridLayout());
        Composite control = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginHeight = layout.marginWidth = 0;
        control.setLayout(layout);
        control.setLayoutData(new GridData(GridData.FILL_BOTH));
        
        boolean individual = main == null;
        
        UITool.setDefaultBackground(parent.getBackground());
        
        layout = new GridLayout(2, false);
        layout.marginHeight = layout.marginWidth = 0;
        Composite comp = UITool.createContainer(control, new GridData(GridData.FILL_HORIZONTAL), layout);
        
        lblAgent = UITool.createLink(comp, "Input File Agent Info", null, new GridData());
        lblAgent.addMouseListener(new MouseAdapter() {
            public void mouseDown(MouseEvent e) {
                onAgent();
            }
        });
        lblAgent.setVisible(individual);
        
        lblStart = UITool.createLink(comp, individual ? "Input Initial Argument" : "Start Debug", null, new GridData(GridData.FILL_HORIZONTAL));
        lblStart.addMouseListener(new MouseAdapter() {
            public void mouseDown(MouseEvent e) {
                onStart();
            }
        });        
        
        SashForm hSash = new SashForm(control, SWT.HORIZONTAL);
        hSash.setLayoutData(new GridData(GridData.FILL_BOTH));
        
        CTabFolder tableFolder = new CTabFolder(hSash, SWT.TOP | SWT.BORDER);
        CTabItem packetTab = new CTabItem(tableFolder, SWT.NONE);
        packetTab.setText("Packets");       
        packetTab.setImage(icons.getImage(IconHolder.icoDebugPacket));
        tableFolder.setSelection(0);
        packetViewer = new TableViewer(tableFolder, SWT.MULTI | SWT.FULL_SELECTION | SWT.V_SCROLL);
        packetViewer.setContentProvider(new ListContentProvider(packets));
        packetViewer.setLabelProvider(new DebugObjectLabelProvider());
        packetViewer.setUseHashlookup(true);
        packetViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                onPacketViewerSelectionChanged(event);
            }
        });
        
        Table packetTable = packetViewer.getTable();
        TableColumn tc = new TableColumn(packetTable, SWT.LEFT);
        packetTable.addControlListener(new ControlAdapter() {
            public void controlResized(ControlEvent e) {
                Table t = (Table)e.getSource();
                t.getColumn(0).setWidth(t.getClientArea().width);
            }
        });
        packetTable.addMouseListener(new MouseAdapter() {
            public void mouseUp(MouseEvent e) {
                if(e.button == 3)
                    packetMenu.setVisible(true);
            }
        });
        packetTab.setControl(packetTable);
        packetViewer.setColumnProperties(new String[] { NAME });
        packetViewer.setCellEditors(new CellEditor[] { new TextCellEditor(packetTable) });
        packetViewer.setCellModifier(new PacketNameCellModifier());
        packetViewer.setInput(this);
        
        SashForm vSash = new SashForm(hSash, SWT.VERTICAL);
        
        CTabFolder otherFolder = new CTabFolder(vSash, SWT.TOP | SWT.BORDER);
        CTabItem descTab = new CTabItem(otherFolder, SWT.NONE);
        descTab.setText("Packet Format");
        descTab.setImage(icons.getImage(IconHolder.icoDebugFormat));
        textDesc = new Text(otherFolder, SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);
        textDesc.setFont(font);
        descTab.setControl(textDesc);
        otherFolder.setSelection(0);
        
        viewFolder = new CTabFolder(vSash, SWT.TOP | SWT.BORDER);        
        // 数据字节窗口
        CTabItem byteTab = new CTabItem(viewFolder, SWT.NONE);
        byteTab.setText("Bytes");
        byteTab.setImage(icons.getImage(IconHolder.icoDebugBytes));
        ViewForm byteForm = new ViewForm(viewFolder, SWT.FLAT);
        Composite c = new Composite(byteForm, SWT.NONE);
        c.setLayout(new GridLayout(2, false));
        chkBodyOnly = new Button(c, SWT.CHECK | SWT.FLAT);
        chkBodyOnly.setText("Body Only");
        chkBodyOnly.setLayoutData(new GridData());
        chkBodyOnly.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection selection = (IStructuredSelection)packetViewer.getSelection();
                IDebugObject obj = (IDebugObject)selection.getFirstElement();
                if(obj != null)
                    textBytes.setText(chkBodyOnly.getSelection() ? obj.getBodyHexString() : obj.getHexString());        
            }
        });
        lblSelection = new Label(c, SWT.LEFT);
        lblSelection.setText("Selection: null");
        GridData gd = new GridData();
        gd.widthHint = 200;
        lblSelection.setLayoutData(gd);
        byteForm.setTopLeft(c);                
        textBytes = new StyledText(byteForm, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY | SWT.V_SCROLL);
        textBytes.setFont(font);
        textBytes.addMouseListener(new MouseAdapter() {
            public void mouseUp(MouseEvent e) {
                if(e.button == 3) {
                    textMenu.setLocation(textBytes.toDisplay(e.x, e.y));
                    textMenu.setVisible(true);
                }
            }
        });
        textBytes.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                Point selection = textBytes.getSelectionRange();
                int start = (selection.x + 1) / 3;
                int end = (selection.x + selection.y + 1) / 3;
                lblSelection.setText("Start: " + start + ", Length: " + (end - start) + ", Hex: " + Integer.toHexString(end - start).toUpperCase());
            }
        });
        byteForm.setContent(textBytes);
        byteTab.setControl(byteForm);
        
        // 输入窗口
        CTabItem inputTab = new CTabItem(viewFolder, SWT.NONE);
        inputTab.setText("Input");
        inputTab.setImage(icons.getImage(IconHolder.icoDebugInput));
        ViewForm inputForm = new ViewForm(viewFolder, SWT.FLAT);
        // viewform的工具条
        final ToolBar tb = new ToolBar(inputForm, SWT.FLAT);
        // 解析

⌨️ 快捷键说明

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