设为首页 加入收藏

TOP

基于VC++实现PE的修改编程(三)
2013-07-22 18:12:48 来源: 作者: 【 】 浏览:322
Tags:基于 实现 修改 编程

 

  HANDLE hFile;

  HANDLE hMapping;

  void *basepointer;

  // 打开文件.

  if ((hFile = CreateFile(szFileName, GENERIC_READ,

  FILE_SHARE_READ,0,OPEN_EXISTING,

  FILE_FLAG_SEQUENTIAL_SCAN,0)) == INVALID_HANDLE_VALUE)

  {

  printf("can't open file.\n");

  return FALSE;

  }

  // 创建内存映射文件.

  if (!(hMapping = CreateFileMapping(hFile,0,PAGE_READONLY|SEC_COMMIT,0,0,0)))

  {

  printf("mapping failed\n");

  CloseHandle(hFile);

  return FALSE;

  }

  // 把文件头映象存入baseointer.

  if (!(basepointer = MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0)))

  {

  printf("view failed.\n");

  CloseHandle(hMapping);

  CloseHandle(hFile);

  return FALSE;

  }

  IMAGE_DOS_HEADER * dos_head =(IMAGE_DOS_HEADER *)basepointer;

  // 得到PE文件头.

  header = (PE_HEADER_MAP *)((char *)dos_head + dos_head->e_lfanew);

  // 得到OEP地址.

  DWORD dwOEP=header->opt_head.AddressOfEntryPoint;

  // 清除内存映射和关闭文件.

  UnmapViewOfFile(basepointer);

  CloseHandle(hMapping);

  CloseHandle(hFile);

  // 显示OEP地址.

  printf("OEP by memory:%d\n",dwOEP);

  return TRUE;

  }

  弹出对话框汇编代码如下

  [cpp]

  ;msgbx.asm file.

  .386p

  .model flat, stdcall

  option casemap:none

  include \masm32\include\windows.inc

  include \masm32\include\user32.inc

  includelib \masm32\lib\user32.lib

  .code

  start:

  push MB_ICONINFORMATION or MB_OK

  call Func1

  db "Test",0

  Func1:

  call Func2

  db "Hello",0

  Func2:

  push NULL

  call MessageBoxA

  ;    ret

  end start

          

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇基于VC++实现APC注入 下一篇VC++锁屏程序遇到的问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: