解析PE文件的附加数据
Posted wzjhoutai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析PE文件的附加数据相关的知识,希望对你有一定的参考价值。
解析程序自己的附加数据,将附加数据写入文件里。
主要是解析PE文件头。定位到overlay的地方。写入文件。
常应用的场景是在crackme中,crackme自身有一段加密过的附加数据。在crackme执行的过程中解析自己的附加数据,然后解密这段数据。。
。。
代码留存:
//解析自己的PE文件 TCHAR szModuleFile[MAX_PATH] = {0}; ::GetModuleFileName(NULL, szModuleFile, MAX_PATH); HANDLE hFile = ::CreateFile(szModuleFile, 0X80000000, 0X1, NULL, 0x3, 0x80, NULL ); if (!hFile) { AfxMessageBox("create file error"); return ; } DWORD dwFileSize = 0; dwFileSize = ::GetFileSize(hFile, NULL); if (!dwFileSize) { AfxMessageBox("GetFileSize error"); return ; } TCHAR *pBuffer = new TCHAR[dwFileSize+1]; DWORD dwReadBytes = 0; BOOL bSuc = ::ReadFile(hFile, pBuffer, dwFileSize, &dwReadBytes, NULL); if (!bSuc) { AfxMessageBox("read file error"); return ; } IMAGE_DOS_HEADER *pDosHead =(IMAGE_DOS_HEADER *)pBuffer; IMAGE_NT_HEADERS *pNtHeader; // 得到PE文件头. pNtHeader = (IMAGE_NT_HEADERS*)((char*)pDosHead + pDosHead->e_lfanew); WORD wNumOfSection = pNtHeader->FileHeader.NumberOfSections; //DWORD dwTemp = wNumOfSection * (sizeof(IMAGE_SECTION_HEADER)/sizeof(DWORD)); WORD wSizeOfOptionalHeader = pNtHeader->FileHeader.SizeOfOptionalHeader; DWORD *pOverLay; DWORD *pLastSectionVirualAddress; DWORD *pLastSectionVirualSize; DWORD *pLastSectionPhyAddress, *pLastSectionPhySize; pLastSectionVirualSize = (DWORD*) ((char*)pNtHeader+ sizeof(IMAGE_NT_HEADERS) + (wNumOfSection-1)*sizeof(IMAGE_SECTION_HEADER) + sizeof(BYTE)*IMAGE_SIZEOF_SHORT_NAME ); pLastSectionVirualAddress = pLastSectionVirualSize + 1; pLastSectionPhyAddress = pLastSectionVirualSize + 2; pLastSectionPhySize = pLastSectionVirualSize + 3; DWORD dw1 = *pLastSectionPhyAddress; DWORD dw2 = *pLastSectionPhySize; pOverLay = (DWORD*)(dw1 + dw2 + pBuffer); DWORD dwOverlaySize = dwFileSize - (dw1 + dw2); HANDLE hOutFile = ::CreateFile("C:\\Users\\Administrator\\Desktop\\crackme.exe.overlay", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, NULL, NULL); if (!hOutFile) { return ; } DWORD dwWritten = 0; ::WriteFile(hOutFile, pOverLay, dwOverlaySize, &dwWritten, NULL); ::CloseHandle(hOutFile); if ((char *)pOverLay == 0x0) { AfxMessageBox("附加数据首字节为0"); return ; } ::free(pBuffer); ::CloseHandle(hFile);
以上是关于解析PE文件的附加数据的主要内容,如果未能解决你的问题,请参考以下文章
html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段