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 + -
显示快捷键?