UPX3.96GUI工具主要源码
[C++] 纯文本查看 复制代码 // UPX路径默认检测逻辑
CString GetDefaultUPXPath() {
TCHAR path[MAX_PATH];
GetWindowsDirectory(path, MAX_PATH);
CString strUPX = CString(path) + _T("\\upx.exe");
if (PathFileExists(strUPX)) return strUPX;
if (GetEnvironmentVariable(_T("UPX_HOME"), path, MAX_PATH))
return CString(path) + _T("\\upx.exe");
return _T("upx.exe"); // 尝试系统PATH
}
// 执行UPX命令的核心方法
bool ExecuteUPXCommand(CString cmd) {
SECURITY_ATTRIBUTES sa = { sizeof(sa), NULL, TRUE };
HANDLE hRead, hWrite;
CreatePipe(&hRead, &hWrite, &sa, 0);
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdOutput = hWrite;
si.hStdError = hWrite;
BOOL success = CreateProcess(NULL, cmd.GetBuffer(), NULL, NULL, TRUE,
CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
cmd.ReleaseBuffer();
if (!success) return false;
CloseHandle(hWrite);
WaitForSingleObject(pi.hProcess, INFINITE);
DWORD exitCode;
GetExitCodeProcess(pi.hProcess, &exitCode);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hRead);
return exitCode == 0;
}
void CUPXToolsDlg::OnBnClickedButton1()
{
CString path;
m_editPath.GetWindowTextW(path);
if (path == L"请设置文件路径") {
MessageBox(L"请设置文件路径");
}
if (m_radio1.GetCheck()) {
CString leve;
leve.Format(L"-%d", m_combo.GetCurSel() + 1);
CString cmd;
cmd.Format(_T("%s %s %s"), GetDefaultUPXPath(), leve, path);
BOOL success = ExecuteUPXCommand(cmd);
if (success) {
MessageBox(L"加壳成功");
}
else {
MessageBox(L"加壳失败");
}
}
else{
CString cmd;
cmd.Format(_T("%s -d %s"), GetDefaultUPXPath(),path);
BOOL success = ExecuteUPXCommand(cmd);
if (success) {
MessageBox(L"脱壳成功");
}
else {
MessageBox(L"脱壳失败");
}
}
// TODO: 在此添加控件通知处理程序代码
}
|