今天犯了个严重的错误,ReafFile之后没有SetFilePointer,就WriteFile
int main(int argc, char* argv[])
{
WSAData wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
char file[MAX_PATH]="c:\\WebGame.dll";
HANDLE hFile=CreateFile(file,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
int filesize=GetFileSize(hFile,0);
BYTE *a=(BYTE*)malloc(filesize);
BYTE *b=a;
DWORD NumberOfBytesRead;
ReadFile(hFile,a,filesize,&NumberOfBytesRead,NULL);
//这里读取完文件之后文件指针会移动到末尾,如果不把文件指针移动到开头的话,WriteFile会在文件末尾写入数据
//SetFilePointer(hFile,0,0,FILE_BEGIN);
Decode((LPVOID)a,filesize,0x07e9);
DWORD NumberOfBytesWritten;
WriteFile(hFile,b,filesize,&NumberOfBytesWritten,NULL);
这段代码是读取一个加密的WebGame.dll(101kb大小),然后调用Decode函数解密,再把解密后的数据写回到WebGame.dll,跑完之后,发现WebGame.dll的大小是203kb,感觉非常奇怪,调试后发现解密的代码也是对啊,b地址处的代码也是正确的解密结果,为什么写进去就不对了呢?猛地灵光一现,忘记SetFilePiinter了啊,ReadFile之后文件指针已经从0移动到了filesize了,所以WriteFile的时候就会出错了。
浙公网安备 33010602011771号