#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;
}

最新文章

  1. phabricator-zh_CN汉化包
  2. HTML5滑动(swipe)事件
  3. curl,chkconfig
  4. 【转】WMI使用的WIN32_类库名
  5. Android开发-API指南-进程与线程
  6. HDOJ 3622 - Bomb Game 2-sat+二分....细心...
  7. Android SDK 更新时修改hosts文件仍然无法更新,可试试这个方法……
  8. 本地环境下 WordPress 环境搭建与安装
  9. ANR的一个实例分析
  10. POJ 2536 Gopher II(二分图的最大匹配)
  11. CSS中的选择器之类选择器和id选择器
  12. 《Inside C#》笔记(四) 类
  13. 24.form表单提交的六种方式
  14. 搞不懂为什么开发人员爱iOS恨Android?
  15. [转]mysql-mmm集群(多实例)
  16. hdoj1232 畅通工程(并查集)
  17. Python学习札记(四十三) IO 3
  18. TypeScript学习笔记(二) - 基本类型
  19. 怎样安装TortoiseGit
  20. ng2 quickstart

热门文章

  1. SkipFish
  2. 顺为资本CEO许达来:为什么说中国创业者很幸福?(附PPT)
  3. pageContext.request.contextPath 和 request.getContextPath()
  4. java大作业 KShinglingAlgorithm
  5. icon-font自己探索得到的经验
  6. UI 公钥加密
  7. jsp验证表单后再提交
  8. Swipe JS滑动插件
  9. chrome 浏览器帐号登录不来,如何解决自己的书签
  10. memcache 在php存取中的应用