你的顾客喝醉了吗?在全世界所有疯狂的要求中......
回到我作为梅毒疯子午夜 C++ 程序员的辉煌岁月,我曾经将我的 DLL 作为资源添加到我的 .exe 文件中。然后在启动时我会解压它们并将它们写入 exe 的目录。此时您的程序可以决定 DLL 文件名。真正去做混淆的事情——从一个随机数开始,连接一些爱德华·李尔的诗歌,然后用你最喜欢的德语双管名词异或;无论如何应该为初学者做。然后使用 LoadLibrary() 加载 DLL。
enum ukOverwrite {dontOverwriteAnything = 0, overwriteWhateverPresent = 1};
void unpackResource (ukOverwrite param1, int resourceID, const char* basePath,
const char* endFilename)
{
char* lpName = 0;
lpName += resourceID;
HRSRC MrResource = FindResource (0, lpName, "file");
if (MrResource)
{
HGLOBAL loadedResource = LoadResource (0, MrResource);
if (loadedResource)
{
void* lockedResource = LockResource (loadedResource);
if (lockedResource)
{
DWORD size = SizeofResource (0, MrResource);
if (size)
{
unsigned long creationDisposition = CREATE_NEW;
if (param1 == overwriteWhateverPresent)
creationDisposition = CREATE_ALWAYS;
char filepath [MAX_PATH];
strcpy (filepath, basePath);
strcat (filepath, endFilename);
HANDLE rabbit = CreateFile (filepath, GENERIC_WRITE, 0, 0,
creationDisposition, 0, 0);
if (rabbit != INVALID_HANDLE_VALUE)
{
DWORD numBytesWritten = 0;
int wf = WriteFile (rabbit, lockedResource, size, &numBytesWritten,
0);
CloseHandle (rabbit);
}
}
}
FreeResource (loadedResource);
}
}
}