需要帮助实现argv到某些来源

时间:2013-11-06 05:26:15

标签: c++

我有来自互联网的隐形注射器来源

所以这个程序用于将.dll注入.exe

这个程序是由某人制作的,用于在线游戏中作弊

但是我需要在我的私人服务器在线游戏中使用这个程序来告诉游戏客户端.exe服务器IP,它存储在一个dll文件中..

问题是我不希望玩家直接执行这个程序,但他们需要先运行游戏启动器来做补丁..

所以我需要设置一些秘密参数参数来阻止玩家直接执行..

我对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

1 个答案:

答案 0 :(得分:0)

我猜,我发现了问题所在。您有一个Win32应用程序,虽然其中的main是隐式调用的,但如果没有定义,控件通常会传递给执行Windows应用程序的WinMain()函数。

以下是解决方案和修补后的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; 
}