手动加入PE文件数字签名信息及格式具体解释图之下(历史代码,贴出学习)
- #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<<"---------import cer to exe---------------->>"<<endl;
- cout<<"--EX:srcpath[*.cer] despath [*.exe]------->>"<<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[1];
- TCHAR* lpPeFilePath=argv[2];
- hWriteFileHandle = CreateFile(lpPeFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL ,
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ;
- if ( hWriteFileHandle==INVALID_HANDLE_VALUE )
- return RETURN_FAIL;
- hFileMapping = CreateFileMapping( hWriteFileHandle, NULL , PAGE_READWRITE, 0, 0, NULL ) ;
- if ( ! hFileMapping )
- {
- CloseHandle( hWriteFileHandle) ;
- return RETURN_FAIL;
- }
- lpVoidFileBaseAddress = MapViewOfFile( hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
- if ( ! lpVoidFileBaseAddress )
- {
- CloseHandle( hFileMapping) ;
- CloseHandle( hWriteFileHandle) ;
- return RETURN_FAIL;
- }
- lpidh_Dos_Header = (PIMAGE_DOS_HEADER) lpVoidFileBaseAddress;
- if ( lpidh_Dos_Header->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;
- }
手动加入PE文件数字签名信息及格式具体解释图之下(历史代码,贴出学习)的更多相关文章
- PE文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)
// 注意下图PE文件格式具体解释图中的 // IMAGE_NT_HEADERS------->OptionalHeader------>DataDirectory[IMAGE_DIREC ...
- python筛选特定文件的信息按照格式输出到txt
最近搞数据库,为了把图片文件的信息导入数据库表中,我开始研究python列出图片文件,其中发现因为IE临时文件里有非常多的不需要的图片,就需要筛选掉一些文件. 最终用python输出了所有需要的图片文 ...
- 【PE】手动给PE文件添加一段代码MessageBoxA
源程序是这个样子: 思路: 1.通过LordPE工具拿到所需数据 2.OllyDebug通过BP MessageBoxA拿到MessageBoxA地址 3.UE十六进制编辑器定位代码节基址 4.在代码 ...
- PE文件结构部分解析以及输入的定位
原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable" ...
- 【学习】Windows PE文件学习(一:导出表)
今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见 ...
- PE文件解析 基础篇
PE文件解析 基础篇 来源 https://bbs.pediy.com/thread-247114.htm 前言 之前学习了PE格式,为了更好的理解,决定写一个类似LoadPE的小工具. 编译器是VS ...
- PE文件学习系列一为什么是PE
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q Q:408365330 E-Mail:egojit@qq.com PE概述: ...
- 20145314郑凯杰《网络对抗技术》PE文件病毒捆绑(插入捆绑)的实现
20145314郑凯杰<网络对抗技术>PE文件病毒捆绑(插入捆绑)的实现 一.本节摘要 简介:每个应用程序内部都有一定的空间(因为文件对齐余留的00字段)可以被利用,这样就可以保证被插入的 ...
- 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeC ...
随机推荐
- javascript使用消息框
之前很多地方都用过alert,它的作用是弹出一个警告框,我们调用的方法是alert("输入的内容");其实更正确的写法是 window.alert("输入的内容" ...
- Objective-C基础教程读书笔记(7)
第7章 深入了解Xcode Xcode是一个很好用的工具,有很多强大的功能,不过并不是所有的功能都易于发现.如果你打算长期使用这个强大的工具,就肯定要尽可能多了解它.本章将介绍一些Xcode编辑器的使 ...
- 第一种:NStread
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- iOS KVO & KVC
键值观察:值更改时通知观察者 键值观察(Key-value observing,或简称 KVO)允许对象观察另一个对象的属性.该属性值改变时,会通知观察对象.它了解新值以及旧值:如果观察的属性为对多的 ...
- ios8 swift开发:显示变量的类名称
var ivar = [:] ivar.className // __NSDictionaryI var i = 1 i.className // error: 'Int' does not have ...
- SolrCloud简介
原文地址:http://www.chepoo.com/solrcloud-introduction.html 一.简介 SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布 ...
- C++的Json解析库:jsoncpp和boost
C++的Json解析库:jsoncpp和boost - hzyong_c的专栏 - 博客频道 - CSDN.NET C++的Json解析库:jsoncpp和boost 分类: 网络编程 开源库 201 ...
- wifi密码破解方法总结(含破解软件下载链接)
眼下网上流行有非常多无线password的破解方法,总结起来最有用的还是这两种:第一种是Wirelessnetview+WinAirCrackPack软件组合,这个方法简单方便:另外一种就是大家熟悉的 ...
- Android性能检测--traceview工具各个参数的意思
Android性能检测 traceview的使用方法 1. 把android-sdk-windows\tools路径加到Path当中 2. 编写测试代码: package com.wwj.tracev ...
- 跨平台运行ASP.NET Core 1.0(转载)
前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为 ...