PE文件数字签名信息读取存储及格式详解图之上(历史代码,贴出学习)
2014-07-22 11:20
921 查看
// 注意下图PE文件格式详解图中的
// IMAGE_NT_HEADERS------->OptionalHeader------>DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY]字段
PE文件格式详解图
// IMAGE_NT_HEADERS------->OptionalHeader------>DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY]字段
#include <windows.h> 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 1 typedef struct __DIGITAL_SIGNATURE_DATA_PARAM { DWORD dwVirtulAddress; DWORD dwSize; } SIGNATURE_DATA_PARAM,LPSIGNATURE_DATA_PARAM; #include <iostream> using namespace std; void UsingFuction() { cout<<"----------export cer from exe ------------>>"<<endl; cout<<"--EX:srcpath[*.exe] despath [*.cer]------->>"<<endl; cout<<"------------------------------------------>>"<<endl; } int main( int argc,char **argv) { switch (argc) { case 1: cout<<"help using usage -h"<<endl; break; case 2: { if (strcmp(argv[1],"-h")) { UsingFuction(); return RETURN_FAIL; } } break; case 3: cout<<"all argument is ok"<<endl; break; default: cout<<"argument is error"<<endl; break; } if (argc!=3) { UsingFuction(); return RETURN_FAIL; } TCHAR* lpcerFilePath=argv[2]; TCHAR* lpPeFilePath=argv[1]; hReadFileHandle = CreateFile(lpPeFilePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL ) ; if ( hReadFileHandle==INVALID_HANDLE_VALUE ) return RETURN_FAIL; hFileMapping = CreateFileMapping( hReadFileHandle, NULL , PAGE_READONLY, 0, 0, NULL ) ; if ( ! hFileMapping ) { CloseHandle( hReadFileHandle) ; return RETURN_FAIL; } lpVoidFileBaseAddress = MapViewOfFile( hFileMapping, FILE_MAP_READ, 0, 0, 0) ; if ( ! lpVoidFileBaseAddress ) { CloseHandle( hFileMapping) ; CloseHandle( hReadFileHandle) ; return RETURN_FAIL; } lpidh_Dos_Header = (IMAGE_DOS_HEADER* ) lpVoidFileBaseAddress; if ( lpidh_Dos_Header->e_magic!=IMAGE_DOS_SIGNATURE ) return RETURN_FAIL; lpinh_NTHeader=(IMAGE_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; PBYTE pbBufferSignture=new byte[sdp.dwSize]; DWORD dwReadedSize=0; SetFilePointer(hReadFileHandle,sdp.dwVirtulAddress,0,FILE_BEGIN); ReadFile(hReadFileHandle,pbBufferSignture,sdp.dwSize,&dwReadedSize,NULL); // hWriteFileHandle = CreateFile(lpcerFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL ) ; if ( hWriteFileHandle==INVALID_HANDLE_VALUE ) return RETURN_FAIL; DWORD dwWritedSize=0; WriteFile(hWriteFileHandle,pbBufferSignture,dwReadedSize,&dwWritedSize,NULL); WriteFile(hWriteFileHandle,&sdp.dwSize,sizeof(sdp.dwSize),&dwWritedSize,NULL); delete pbBufferSignture; UnmapViewOfFile( lpVoidFileBaseAddress) ; CloseHandle( hFileMapping); CloseHandle( hReadFileHandle); CloseHandle(hWriteFileHandle); return RETURN_SUCC; }
PE文件格式详解图
相关文章推荐
- PE文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)
- 手动添加PE文件数字签名信息及格式详解图之下(历史代码,贴出学习)
- 手动加入PE文件数字签名信息及格式具体解释图之下(历史代码,贴出学习)
- TensorFlow学习之CNN-Cifar10代码阅读与详解(一):cifar10数据批量读取
- Hadoop RCFile存储格式详解(源码分析、代码示例)
- git学习笔记整理-14-查看历史提交信息:git log详解
- Hadoop RCFile存储格式详解(源码分析、代码示例)
- Hadoop RCFile存储格式详解(源码分析、代码示例)
- C 创建链表并将信息存储在二进制文件中读取的实例代码
- SPSS学习系列之SPSS Statistics导入读取数据(多种格式)(图文详解)
- TensorFlow 学习(二) 制作自己的TFRecord数据集,读取,显示及代码详解
- SharedPreferences详解(存储、读取及代码)
- 个人学习代码保存:例8.在存储过程中使用简单的事务处理
- 个人学习代码保存:例12.读取GridView文件中的数据到Excel文件
- C#中,用注册表存储和读取信息
- 以下代码生成的编号长度为12,前6位为日期信息,格式为YYMMDD,后6位为流水号。
- WMA文件信息格式分析及代码
- [转].net读取硬件信息的参考代码
- 使用GeoTools读取和绘制Shapefile格式 -- (学习GIS【1】)
- 个人学习代码保存:例9.在存储过程中使用cast 类型转换的实例