我有这个来自互联网的 Stealth Injector 源
所以这个程序是为了将.dll注入(inject)到.exe
此程序是某人制作的,用于网络游戏作弊
但我需要在我的私有(private)服务器在线游戏中使用这个程序来告诉游戏客户端.exe服务器IP,它存储在一个dll文件中..
问题是我不希望玩家直接执行这个程序,但是他们需要先运行游戏启动器来打补丁..
所以我需要添加一些 secret 参数参数来阻止玩家直接执行..
我对c++一无所知
我只知道你需要使用 main(int argc, char *argv[])
我试着放这样的东西
int main(int argc, char* argv[]){
stringstream sparam;
string param;
sparam << argv[1];
sparam >> param;
if(argc < 1){
MessageBox(0, "Do not run this program directly, use the Game Launcher!", "Error", MB_ICONEXCLAMATION);
close;
}
if(param != "somesecretargument"){
MessageBox(0, "Do not run this program directly, use the Game Launcher!", "Error", MB_ICONEXCLAMATION);
close;
}
return 0;
}
上面的代码工作正常,但其余代码不会执行,它只是进行参数验证,然后程序关闭..
这是cpp和头文件Source File
最佳答案
我想,我想出了问题所在。你有一个 Win32
应用程序,虽然其中的 main
被隐式调用,但如果没有定义,控制通常传递给 WinMain()
函数,它会执行您的 Windows 应用程序。
这是解决方案,以及一个修补过的 WinMain()
函数:
int __stdcall
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow) {
LPWSTR *szArgList;
int argc;
szArgList = CommandLineToArgvW(GetCommandLine(), &argc);
if(argc < 1){
MessageBox(0, "Do not run this program directly, use the Game Launcher!", "Error", MB_ICONEXCLAMATION);
exit(1);
}
if(wcscmp(szArgList[1],L"somesecretargument") != 0){
MessageBox(0, "Do not run this program directly, use the Game Launcher!", "Error", MB_ICONEXCLAMATION);
exit(1);
}
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DLGPROC(DialogProc), NULL);
return 0;
}
关于c++ - 需要帮助将 argv 实现到某些来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19804747/