// 注意下图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文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)的更多相关文章

  1. 手动加入PE文件数字签名信息及格式具体解释图之下(历史代码,贴出学习)

    #include <windows.h> HANDLE hWriteFileHandle = NULL ; HANDLE hReadFileHandle = NULL ; HANDLE h ...

  2. Mp3文件标签信息读取和写入(Kotlin)

    原文:Mp3文件标签信息读取和写入(Kotlin) - Stars-One的杂货小窝 最近准备抽空完善了自己的星之小说下载器(JavaFx应用 ),发现下载下来的mp3文件没有对应的标签 也是了解可以 ...

  3. 创建一个目录info,并在目录中创建一个文件test.txt,把该文件的信息读取出来,并显示出来

    /*4.创建一个目录info,并在目录中创建一个文件test.txt,把该文件的信息读取出来,并显示出来*/ #import <Foundation/Foundation.h>#defin ...

  4. C/C++ 实现PE文件特征码识别

    PE文件就是我们常说的EXE可执行文件,针对文件特征的识别可以清晰的知道该程序是使用何种编程语言实现的,前提是要有特征库,PE特征识别有多种形式,第一种是静态识别,此方法就是只针对磁盘中文件的特征码字 ...

  5. 【学习】Windows PE文件学习(一:导出表)

    今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见 ...

  6. Golang仿云盘项目-2.2 保留文件元信息

    本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16459817.html 目录结构 E:\goproj\FileStorage ...

  7. 打造XP下可运行的微型PE文件

    前几天和朋友交流技术,提到手工打造微型PE文件,他说现在网上流传的大部分版本在XP SP3下都不能运行,于是心血来潮,拍着胸脯说:“你放心,忙完了帮你做一个.”后来花了半天时间,终于打造出一个XP下可 ...

  8. C语言读取PE文件信息(一)

    接下来的内容来源于对该博客文章http://www.pediy.com/kssd/pediy06/pediy7006.htm的解析. 一.打印Sections信息.下面的程序打印出Windows_Gr ...

  9. Swift - .plist文件数据的读取和存储

    每次在Xcode中新建一个iOS项目后,都会自己产生一个.plist文件,里面记录项目的一些配置信息.我们也可以自己创建.plist文件来进行数据的存储和读取. .plist文件其实就是一个XML格式 ...

随机推荐

  1. Web安全测试学习笔记(Cookie&Session)

    一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...

  2. Linux makefile教程之书写规则三[转]

    书写规则———— 规则包含两个部分,一个是依赖关系,一个是生成目标的方法.在 Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来 ...

  3. c# 读取IntPtr 中的数据 z

    c++的写法是这样的: LRESULT CPictureQueryDlg::OnQueryPicNty(WPARAM wp, LPARAM lp) { EnableWindow(TRUE); BYTE ...

  4. Eclipse安装配置PyDev插件

    Eclipse安装配置PyDev插件 关于PyDev PyDev是一个功能强大的 Eclipse插件,使用户可用 Eclipse 来进行 Python 应用程序的开发和调试.PyDev 插件的出现方便 ...

  5. ASP.NET转换人民币大小金额

    public class DecimalToRMB    {        /// <summary>         /// 转换人民币大小金额         /// </sum ...

  6. JNI编程,C++调用Java

    本地代码中使用Java对象 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函 ...

  7. 爬虫技术之——bloom filter(含java代码)

    在爬虫系统中,在内存中维护着两个关于URL的队列,ToDo队列和Visited队列,ToDo队列存放的是爬虫从已经爬取的网页中解析出来的即将爬取的URL,但是网页是互联的,很可能解析出来的URL是已经 ...

  8. Research on Unsupervised Word Alignment Based on Inversion Transduction Grammar

    1.提出了一种基于特征函数和反向转录文法(ITG)的无监督词对齐模型,使用对数线性模型对文法规则的概率建模,先验知识可以通过特征函数的形式加入到模型里面,而模型仍然可以进行无监督训练.2. 在模型的参 ...

  9. 硬盘类型和Linux的分区

    目前硬盘主要分为以下几种:IDE,SCSI,SATA,SAS.其中SAS(Serial Attached SCSI)即串行连接SCSI,属于SCSI的新一代技术. 以下是Linux常见设备的名称: 装 ...

  10. Windows Server 2003单网卡搭建VPN

    Windows Server 2003单网卡搭建VPN   1.打开[控制面板] --> [管理工具] --> [路由和远程访问] 2.鼠标右击你要管理的电脑 在弹出式菜单中选中[配置并启 ...