"隐藏"可执行文件中的文件(C ++)

时间:2017-03-18 09:42:24

标签: c++ file driver hide

有什么方法可以隐藏"可执行文件中的东西? 例如,将dll添加到项目中。 这些文件(如驱动程序,DLL和其他可执行文件)应该以某种方式被提取,之后使用和删除。 我使用VS2015,我试图隐藏x86 c ++应用程序中的文件。

1 个答案:

答案 0 :(得分:1)

好像你可以使用资源。 FindResource是从资源中提取文件的主要功能。我假设您想手动插入资源,而不是以编程方式插入资源。所以:

在c ++中插入二进制资源: 在项目的.rc文件中:

IDR_BIN             BIN      DISCARDABLE     "file.exe"

在c ++中提取二进制资源:

bool ExtractBinResource( std::string strCustomResName, int nResourceId, std::wstring strOutputName )
{
    HGLOBAL hResourceLoaded = NULL;     // handle to loaded resource 
    HRSRC hRes = NULL;                      // handle/ptr. to res. info. 
    char *lpResLock = NULL;             // pointer to resource data 
    DWORD dwSizeRes;

    // find location of the resource and get handle to it
    hRes = FindResourceA( NULL, MAKEINTRESOURCEA(nResourceId), strCustomResName.c_str() );
    if (hRes == NULL) return false;
    // loads the specified resource into global memory. 
    hResourceLoaded = LoadResource( NULL, hRes ); 
    if (hResourceLoaded == NULL) return false;
    // get a pointer to the loaded resource!
    lpResLock = (char*)LockResource( hResourceLoaded ); 
    if (lpResLock == NULL) return false;
    // determine the size of the resource, so we know how much to write out to file!  
    dwSizeRes = SizeofResource( NULL, hRes );

    std::ofstream outputFile(strOutputName.c_str(), std::ios::binary);

    outputFile.write((const char*)lpResLock, dwSizeRes);
    outputFile.close();
    return true;
}

在这种情况下,strCustomResName"BIN"nResourceId是您选择的#define IDR_BIN

的数字

如果通过“隐藏”表示没有人能够看到/了解您的可执行文件中的内容,那么您还应加密您的文件。