HANDLE hFile = CreateFileA(externName.c_str(), GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (INVALID_HANDLE_VALUE != hFile)
{
dwFileSize = GetFileSize(hFile, NULL);
lpBuffer = new(std::nothrow) BYTE[dwFileSize];
if (lpBuffer)
{
if (ReadFile(hFile, lpBuffer, dwFileSize, &dwBytesRead, NULL) != FALSE)
{
srand(GetCurrentTime());
BOOL ret = TRUE;
BYTE key = rand();
ret = randomChangeTimeStamp(lpBuffer, dwFileSize, key);
if (ret)
{
std::string subFileName = “newfile”;
ret = writeFileContent(subFileName, lpBuffer, dwFileSize);
// 将数据还原
randomChangeTimeStamp(lpBuffer, dwFileSize, key);
}
delete [] lpBuffer;
}
CloseHandle(hFile);
}
else
{
printf("打开文件失败,请查看[%s]是否被占用", externName.c_str());
}
BOOL randomChangeTimeStamp(LPBYTE pData, DWORD size, BYTE key)
{
<span style="white-space:pre"> </span>if (PeTypeUnknown != getPeType((LPBYTE)pData, size))
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>PIMAGE_DOS_HEADER pImageDosHeader = (PIMAGE_DOS_HEADER)pData;
<span style="white-space:pre"> </span>PIMAGE_NT_HEADERS32 pImageNtHeadr32 = (PIMAGE_NT_HEADERS32)(pData + pImageDosHeader->e_lfanew);
<span style="white-space:pre"> </span>/*time_t nowTime;
<span style="white-space:pre"> </span>time(&nowTime);
<span style="white-space:pre"> </span>pImageNtHeadr32->FileHeader.TimeDateStamp = nowTime;*/
<span style="white-space:pre"> </span>PBYTE pTimeStamp = (PBYTE)&pImageNtHeadr32->FileHeader.TimeDateStamp;
<span style="white-space:pre"> </span>int size = sizeof(pImageNtHeadr32->FileHeader.TimeDateStamp);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>for (int i = 0; i < size; ++i)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>pTimeStamp[i] ^= key;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return TRUE;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return FALSE;
}
BOOL writeFileContent(std::string subFileName, LPBYTE pData, DWORD size)
{
<span style="white-space:pre"> </span>BOOL ret = FALSE;
<span style="white-space:pre"> </span>HANDLE hFile = CreateFileA(subFileName.c_str(), GENERIC_READ | GENERIC_WRITE,
<span style="white-space:pre"> </span>0,
<span style="white-space:pre"> </span>NULL,
<span style="white-space:pre"> </span>CREATE_ALWAYS,
<span style="white-space:pre"> </span>FILE_ATTRIBUTE_NORMAL,
<span style="white-space:pre"> </span>NULL);
<span style="white-space:pre"> </span>if (INVALID_HANDLE_VALUE != hFile)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>DWORD dwWrite = 0;
<span style="white-space:pre"> </span>ret = WriteFile(hFile, pData, size, &dwWrite, NULL);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>CloseHandle(hFile);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return ret;
}