#include HANDLE hWriteFileHandle = NULL ; HANDLE hReadFileHandle = NULL ; HANDLE hFileMapping = NULL ; LPVOID lpVoidFileBaseAddress = NULL ; IMAGE_DOS_HEADER * lpidh_Dos_Header= NULL ; IMAGE_NT_HEADERS * lpinh_NTHeader= NULL ; #define RETURN_FAIL -1#define RETURN_SUCC 1typedef struct __DIGITAL_SIGNATURE_DATA_PARAM{ DWORD dwVirtulAddress; DWORD dwSize;}SIGNATURE_DATA_PARAM,LPSIGNATURE_DATA_PARAM;#include using namespace std;void UsingFuction(){ cout<<"---------import cer to exe---------------->>"< >"< >"< e_magic!=IMAGE_DOS_SIGNATURE ) return RETURN_FAIL; lpinh_NTHeader=(PIMAGE_NT_HEADERS)((char*)lpVoidFileBaseAddress+lpidh_Dos_Header->e_lfanew) ; if ( lpinh_NTHeader->Signature!=IMAGE_NT_SIGNATURE ) return RETURN_FAIL; // SIGNATURE_DATA_PARAM sdp; sdp.dwVirtulAddress=lpinh_NTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress; sdp.dwSize=lpinh_NTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size; //if exist sn if (sdp.dwSize!=0) { // return RETURN_FAIL; } // hReadFileHandle = CreateFile(lpcerFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL ) ; if ( hReadFileHandle==INVALID_HANDLE_VALUE ) return RETURN_FAIL; DWORD dwReadedSize=0; DWORD dwWritedSize=0; SetFilePointer(hReadFileHandle,-4,0,FILE_END); ReadFile(hReadFileHandle,&sdp.dwSize,sizeof(DWORD),&dwReadedSize,NULL); PBYTE pbBufferSignture=new byte[sdp.dwSize]; SetFilePointer(hReadFileHandle,0,0,FILE_BEGIN); ReadFile(hReadFileHandle,pbBufferSignture,sdp.dwSize,&dwReadedSize,NULL); PIMAGE_SECTION_HEADER lppsh_SECTION_HEADER=(PIMAGE_SECTION_HEADER)((DWORD)&lpinh_NTHeader->OptionalHeader+lpinh_NTHeader ->FileHeader.SizeOfOptionalHeader); lppsh_SECTION_HEADER=lppsh_SECTION_HEADER+(lpinh_NTHeader->FileHeader.NumberOfSections-1); sdp.dwVirtulAddress=lppsh_SECTION_HEADER->PointerToRawData+lppsh_SECTION_HEADER->SizeOfRawData; SetFilePointer(hWriteFileHandle,sdp.dwVirtulAddress,0,FILE_BEGIN); WriteFile(hWriteFileHandle,pbBufferSignture,sdp.dwSize,&dwWritedSize,NULL); lpinh_NTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress=sdp.dwVirtulAddress; lpinh_NTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size=sdp.dwSize; delete pbBufferSignture; UnmapViewOfFile( lpVoidFileBaseAddress) ; CloseHandle( hFileMapping); CloseHandle( hReadFileHandle); CloseHandle(hWriteFileHandle); return RETURN_SUCC; }