// 注意下图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  1typedef 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文件格式具体解释图

转载于:https://www.cnblogs.com/mengfanrong/p/5349251.html

PE文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)相关推荐

  1. 对Windows 平台下PE文件数字签名的一些研究

    Windows平台上PE文件的数字签名有两个作用:确保文件来自指定的发布者和文件被签名后没有被修改过.因此有些软件用数字签名来验证文件是否来自家厂商以及文件的完整性,安全软件也经常通过验证文件是否有数 ...

  2. PE文件数字签名格式

    摘要 Authenticode®是一种数字签名格式,它是用来验证二进制软件的来源和完整性.Authenticode是基于公开密匙加密标准(PKCS) #7 来签名数据,并使用X.509证书来绑定经过数 ...

  3. pe文件签名信息检测技术

    [摘要] 签名信息中包含有很多有用的信息,可以辅助对二进制软件进行安全检测.读者可以从本博客中了解到pe文件中签名信息是如何组织的,如何用python代码从pe文件中获取内嵌的签名信息等知识. **什 ...

  4. matlab编程读取导航文件文件,基于Matlab读取标准RINEX格式的GPS星历数据

    [实例简介] 基于Matlab读取标准RINEX格式的GPS星历数据,采用Matlab直接读取Rinex文件 张妮,等基于 Matlab读取标准 RINEX格式的GPS星历数据 navdata(i). ...

  5. android中读取svg文件,Android如何加载SVG格式的矢量图

    为何要加载SVG图片 相对于.JPG和.PNG甚至.webp的图片来说,SVG的图片有两个优点,第一:省空间,APK瘦身有一个方面就是从图片瘦身,使用SVG图片可以大量减轻程序的大小.第二:省时间,切 ...

  6. Python爬虫数据存储不同格式在excel表中通用代码

    爬虫数据存储在excel表通用代码 一..xls格式 import xlwt #创建workbook对象 workbook = xlwt.Workbook(encoding='utf8') #添加sh ...

  7. [网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)

    本系列虽然叫"网络安全自学篇",但由于系统安全.软件安全与网络安全息息相关,作者同样会分享一些系统安全案例及基础工具用法,也是记录自己的成长史,希望大家喜欢,一起进步.前文 &qu ...

  8. grib1文件解析 python_python读取grib格式数据

    python 读取grib/grib2格式数据 一般利用NCL(NCAR Command Language)读取.利用Python语言的pygrib库也可以读取grib/grib2格式数据 grib/ ...

  9. [系统安全] 四十一.APT系列(6)Python解析PE文件并获取时间戳判断来源区域

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. 任意的android程序,Android任意位置获取应用Context
  2. 高年薪的Web前端工程师经常思考哪些问题?
  3. 小师妹学JVM之:JDK14中JVM的性能优化
  4. coderfoces D. Gourmet choice
  5. python emoji 表情过滤
  6. 怎么判断tcp重组完成_网络工程师(8):TCP为什么可靠
  7. .NET中常见的内存泄露问题——GC、委托事件和弱引用
  8. mysql datetime 对于hbm_mysql 字段datetime Hibernate
  9. 面试官:new Object[5] 一共创建了几个对象?
  10. DELPHI操作INI文件详细讲解
  11. 史上最强的融资方案商业计划书
  12. xp计算机加域找不到网络路径,手把手为您win10系统计算机加域提示错误“找不到网络路径”的方法...
  13. 中国国家气象局天气预报接口
  14. vscode 扩展 本地_使用众包扩展产品本地化
  15. 从一个例子开始体验轻量级类隔离容器 SOFAArk | SOFAChannel#11 直播整理
  16. AD中的机械尺寸定位的使用
  17. Vue源码之渲染watcher
  18. 双通道内存和单通道的区别是什么
  19. 显卡超频linux,Linux 5.12内核将支持Radeon RX 6000系列显卡超频
  20. 35岁程序员:从焦虑到适应

热门文章

  1. JS两种声明函数的方法以及调用顺序
  2. 架构设计系列-前端模式的后端(BFF)翻译PhilCalçado
  3. Extjs4.0 开发笔记-desktop开始菜单动态生成方法
  4. 企消互动广告:网络时代广告活动的创新形式——兼谈杜丽反败为胜对企业的启示...
  5. 学习笔记之Iframe
  6. Ubuntu 使用记录
  7. LeetCode Reverse Linked List II 反置链表2
  8. DELPHI 禁止移动窗体
  9. 清空SQL Server数据库中所有表数据的方法(转)
  10. 书Visual C++.NET应用教程(附光盘)——高等学校计算机语言应用教的评论