PE练习:在exe代码区空白地方插入代码

本次练习目标:
在一个exe插入一段小代码,使其双击前先弹窗,再运行程序。
前置条件:
1.准备一个exe小程序,需要用到user32.dll的,因为
2.OD…用来查看MessageBox地址
3.WINHEX…用来编辑exe
4.PETOOL…用来查看exe的一些信息
过程

一.构建一段要插入的代码

1.1 假如我要加一个Messbox弹窗,那么我先去OD里面找到这个MESSAGEBOX的地址
在这里插入图片描述

我要去的目标地址就是这个:75279330
1.2. 介绍一下:E8 E9

  • E8 是 CALL的硬编码 E9 是 JMP的硬编码
  • 插入内容:6a 00 6a00 6a00 6a00 e8 xx xx xx xx e9 xx xx xx xx

按照正常思维 如果想去到E8后面的地址 直接就是E8 跟着后面的地址;
但实际上 E8 后边的硬编码需要转换,
X = 真正要去的地址 减去 E8的下一行的地址
但是 E8下一行的地址是不知道得, 可以通过E8 这行的地址+5,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的代码示例,使用Windows API加载PE文件并执行其代码: ```c++ #include <Windows.h> int main() { // 打开PE文件 HANDLE hFile = CreateFileA("sample.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { printf("Failed to open file!\n"); return -1; } // 创建文件映射 HANDLE hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); if (hMapping == NULL) { printf("Failed to create file mapping!\n"); CloseHandle(hFile); return -1; } // 映射文件到内存 LPVOID lpBase = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0); if (lpBase == NULL) { printf("Failed to map file to memory!\n"); CloseHandle(hMapping); CloseHandle(hFile); return -1; } // 获取PE头指针 PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)lpBase; PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((DWORD_PTR)lpBase + pDosHeader->e_lfanew); // 判断PE文件是否有效 if (pNtHeader->Signature != IMAGE_NT_SIGNATURE) { printf("Invalid PE file!\n"); UnmapViewOfFile(lpBase); CloseHandle(hMapping); CloseHandle(hFile); return -1; } // 获取代码段指针 PIMAGE_SECTION_HEADER pSectionHeader = IMAGE_FIRST_SECTION(pNtHeader); DWORD dwSectionSize = 0; LPVOID lpCode = NULL; for (int i = 0; i < pNtHeader->FileHeader.NumberOfSections; i++) { if (strcmp((char*)pSectionHeader->Name, ".text") == 0) { dwSectionSize = pSectionHeader->SizeOfRawData; lpCode = (LPVOID)((DWORD_PTR)lpBase + pSectionHeader->VirtualAddress); break; } pSectionHeader++; } // 判断代码段是否存在 if (lpCode == NULL || dwSectionSize == 0) { printf("Code section not found!\n"); UnmapViewOfFile(lpBase); CloseHandle(hMapping); CloseHandle(hFile); return -1; } // 执行代码 typedef void(*CodeFunc)(); CodeFunc func = (CodeFunc)lpCode; func(); // 释放资源 UnmapViewOfFile(lpBase); CloseHandle(hMapping); CloseHandle(hFile); return 0; } ``` 这个代码示例打开一个名为sample.exePE文件,加载其代码段并执行。当然,在实际的程序,还需要进行更多的错误检查和异常处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值