1. #include <windows.h>
  2. HANDLE hWriteFileHandle = NULL ;
  3. HANDLE hReadFileHandle = NULL ;
  4. HANDLE hFileMapping = NULL ;
  5. LPVOID lpVoidFileBaseAddress = NULL ;
  6. IMAGE_DOS_HEADER * lpidh_Dos_Header= NULL ;
  7. IMAGE_NT_HEADERS * lpinh_NTHeader= NULL ;
  8.  
  9. #define RETURN_FAIL -1
  10. #define RETURN_SUCC 1
  11.  
  12. typedef struct __DIGITAL_SIGNATURE_DATA_PARAM
  13. {
  14. DWORD dwVirtulAddress;
  15. DWORD dwSize;
  16. }
  17.  
  18. SIGNATURE_DATA_PARAM,LPSIGNATURE_DATA_PARAM;
  19.  
  20. #include <iostream>
  21. using namespace std;
  22.  
  23. void UsingFuction()
  24. {
  25. cout<<"---------import cer to exe---------------->>"<<endl;
  26. cout<<"--EX:srcpath[*.cer] despath [*.exe]------->>"<<endl;
  27. cout<<"------------------------------------------>>"<<endl;
  28. }
  29. int main( int argc,char **argv)
  30. {
  31. switch (argc)
  32. {
  33. case 1:
  34. cout<<"help using usage -h"<<endl;
  35. break;
  36. case 2:
  37. {
  38. if (strcmp(argv[1],"-h"))
  39. {
  40. UsingFuction();
  41. return RETURN_FAIL;
  42. }
  43. }
  44. break;
  45. case 3:
  46. cout<<"all argument is ok"<<endl;
  47. break;
  48. default:
  49. cout<<"argument is error"<<endl;
  50. break;
  51. }
  52. if (argc!=3)
  53. {
  54. UsingFuction();
  55. return RETURN_FAIL;
  56. }
  57. TCHAR* lpcerFilePath=argv[1];
  58. TCHAR* lpPeFilePath=argv[2];
  59. hWriteFileHandle = CreateFile(lpPeFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL ,
  60. OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ;
  61. if ( hWriteFileHandle==INVALID_HANDLE_VALUE )
  62. return RETURN_FAIL;
  63. hFileMapping = CreateFileMapping( hWriteFileHandle, NULL , PAGE_READWRITE, 0, 0, NULL ) ;
  64. if ( ! hFileMapping )
  65. {
  66. CloseHandle( hWriteFileHandle) ;
  67. return RETURN_FAIL;
  68. }
  69. lpVoidFileBaseAddress = MapViewOfFile( hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
  70. if ( ! lpVoidFileBaseAddress )
  71. {
  72. CloseHandle( hFileMapping) ;
  73. CloseHandle( hWriteFileHandle) ;
  74. return RETURN_FAIL;
  75. }
  76. lpidh_Dos_Header = (PIMAGE_DOS_HEADER) lpVoidFileBaseAddress;
  77. if ( lpidh_Dos_Header->e_magic!=IMAGE_DOS_SIGNATURE )
  78. return RETURN_FAIL;
  79.  
  80. lpinh_NTHeader=(PIMAGE_NT_HEADERS)((char*)lpVoidFileBaseAddress+lpidh_Dos_Header->e_lfanew) ;
  81. if ( lpinh_NTHeader->Signature!=IMAGE_NT_SIGNATURE )
  82. return RETURN_FAIL;
  83. //
  84.  
  85. SIGNATURE_DATA_PARAM sdp;
  86. sdp.dwVirtulAddress=lpinh_NTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress;
  87. sdp.dwSize=lpinh_NTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size;
  88.  
  89. //if exist sn
  90. if (sdp.dwSize!=0)
  91. {
  92. //
  93. return RETURN_FAIL;
  94. }
  95. //
  96. hReadFileHandle = CreateFile(lpcerFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL ,
  97. OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL ) ;
  98. if ( hReadFileHandle==INVALID_HANDLE_VALUE )
  99. return RETURN_FAIL;
  100. DWORD dwReadedSize=0;
  101. DWORD dwWritedSize=0;
  102.  
  103. SetFilePointer(hReadFileHandle,-4,0,FILE_END);
  104. ReadFile(hReadFileHandle,&sdp.dwSize,sizeof(DWORD),&dwReadedSize,NULL);
  105.  
  106. PBYTE pbBufferSignture=new byte[sdp.dwSize];
  107. SetFilePointer(hReadFileHandle,0,0,FILE_BEGIN);
  108. ReadFile(hReadFileHandle,pbBufferSignture,sdp.dwSize,&dwReadedSize,NULL);
  109.  
  110. PIMAGE_SECTION_HEADER lppsh_SECTION_HEADER=(PIMAGE_SECTION_HEADER)((DWORD)&lpinh_NTHeader->OptionalHeader+lpinh_NTHeader
  111. ->FileHeader.SizeOfOptionalHeader);
  112. lppsh_SECTION_HEADER=lppsh_SECTION_HEADER+(lpinh_NTHeader->FileHeader.NumberOfSections-1);
  113. sdp.dwVirtulAddress=lppsh_SECTION_HEADER->PointerToRawData+lppsh_SECTION_HEADER->SizeOfRawData;
  114.  
  115. SetFilePointer(hWriteFileHandle,sdp.dwVirtulAddress,0,FILE_BEGIN);
  116. WriteFile(hWriteFileHandle,pbBufferSignture,sdp.dwSize,&dwWritedSize,NULL);
  117.  
  118. lpinh_NTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress=sdp.dwVirtulAddress;
  119. lpinh_NTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size=sdp.dwSize;
  120. delete pbBufferSignture;
  121.  
  122. UnmapViewOfFile( lpVoidFileBaseAddress) ;
  123. CloseHandle( hFileMapping);
  124. CloseHandle( hReadFileHandle);
  125. CloseHandle(hWriteFileHandle);
  126.  
  127. return RETURN_SUCC;
  128. }

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

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

    // 注意下图PE文件格式具体解释图中的 // IMAGE_NT_HEADERS------->OptionalHeader------>DataDirectory[IMAGE_DIREC ...

  2. python筛选特定文件的信息按照格式输出到txt

    最近搞数据库,为了把图片文件的信息导入数据库表中,我开始研究python列出图片文件,其中发现因为IE临时文件里有非常多的不需要的图片,就需要筛选掉一些文件. 最终用python输出了所有需要的图片文 ...

  3. 【PE】手动给PE文件添加一段代码MessageBoxA

    源程序是这个样子: 思路: 1.通过LordPE工具拿到所需数据 2.OllyDebug通过BP MessageBoxA拿到MessageBoxA地址 3.UE十六进制编辑器定位代码节基址 4.在代码 ...

  4. PE文件结构部分解析以及输入的定位

    原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable" ...

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

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

  6. PE文件解析 基础篇

    PE文件解析 基础篇 来源 https://bbs.pediy.com/thread-247114.htm 前言 之前学习了PE格式,为了更好的理解,决定写一个类似LoadPE的小工具. 编译器是VS ...

  7. PE文件学习系列一为什么是PE

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com PE概述: ...

  8. 20145314郑凯杰《网络对抗技术》PE文件病毒捆绑(插入捆绑)的实现

    20145314郑凯杰<网络对抗技术>PE文件病毒捆绑(插入捆绑)的实现 一.本节摘要 简介:每个应用程序内部都有一定的空间(因为文件对齐余留的00字段)可以被利用,这样就可以保证被插入的 ...

  9. 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用

    0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeC ...

随机推荐

  1. javascript使用消息框

    之前很多地方都用过alert,它的作用是弹出一个警告框,我们调用的方法是alert("输入的内容");其实更正确的写法是 window.alert("输入的内容" ...

  2. Objective-C基础教程读书笔记(7)

    第7章 深入了解Xcode Xcode是一个很好用的工具,有很多强大的功能,不过并不是所有的功能都易于发现.如果你打算长期使用这个强大的工具,就肯定要尽可能多了解它.本章将介绍一些Xcode编辑器的使 ...

  3. 第一种:NStread

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  4. iOS KVO & KVC

    键值观察:值更改时通知观察者 键值观察(Key-value observing,或简称 KVO)允许对象观察另一个对象的属性.该属性值改变时,会通知观察对象.它了解新值以及旧值:如果观察的属性为对多的 ...

  5. ios8 swift开发:显示变量的类名称

    var ivar = [:] ivar.className // __NSDictionaryI var i = 1 i.className // error: 'Int' does not have ...

  6. SolrCloud简介

    原文地址:http://www.chepoo.com/solrcloud-introduction.html 一.简介 SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布 ...

  7. C++的Json解析库:jsoncpp和boost

    C++的Json解析库:jsoncpp和boost - hzyong_c的专栏 - 博客频道 - CSDN.NET C++的Json解析库:jsoncpp和boost 分类: 网络编程 开源库 201 ...

  8. wifi密码破解方法总结(含破解软件下载链接)

    眼下网上流行有非常多无线password的破解方法,总结起来最有用的还是这两种:第一种是Wirelessnetview+WinAirCrackPack软件组合,这个方法简单方便:另外一种就是大家熟悉的 ...

  9. Android性能检测--traceview工具各个参数的意思

    Android性能检测 traceview的使用方法 1. 把android-sdk-windows\tools路径加到Path当中 2. 编写测试代码: package com.wwj.tracev ...

  10. 跨平台运行ASP.NET Core 1.0(转载)

    前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为  ...