通过内存映射读取OEP值
发布日期:2021-06-30 21:26:50
浏览次数:2
分类:技术文章
本文共 1335 字,大约阅读时间需要 4 分钟。
通过内存映射读取OEP值
获得OEP值的另一种方法是通过内存映射来实现,此方法也需要熟悉PE的文件结构。与直接访问PE的方法不同,内存映射的方法首先把PE文件映射到计算机的内存,再通过内存的基指针获得IMAGE_DOS_HEADER的头指针,由此再获得IMAGE_ OPTIONAL_HEADER指针,这样就可以得到AddressOfEntryPoint的值。下面是通过内存映射获得OEP值的方法: // 通过文件内存映射读取OEP值BOOL ReadOEPbyMemory(LPCSTR szFileName)
{ struct PE_HEADER_MAP { DWORD signature; IMAGE_FILE_HEADER _head; IMAGE_OPTIONAL_HEADER opt_head; IMAGE_SECTION_HEADER section_header[6]; } *header; 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; }转载地址:https://liyuanjinglyj.blog.csdn.net/article/details/7892512 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月15日 22时57分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python+selenium 浏览器无界面模式运行
2019-05-01
appium使用过程中的踩坑集
2019-05-01
appium的XPATH获取text值的方式与selenium区别
2019-05-01
处理appium获取toast内容
2019-05-01
解决uiautomatorviewer中添加xpath的方法
2019-05-01
Windows Server R2 安装python时报策略不允许的解决方案
2019-05-01
pip无法安装:换成国内镜像
2019-05-01
python安装mysqlclient[MySQLdb]
2019-05-01
性能测试的必要性评估以及评估方法
2019-05-01
性能测试需求分析
2019-05-01
性能测试需求评审
2019-05-01
性能测试实施流程
2019-05-01
Jmeter在多线程当中对某个http请求进行循环读取配置文件
2019-05-01
Python读取配置文件中文乱码问题
2019-05-01
使用Spark读写外部存储介质(Mysql、Hbase、Redis)
2019-05-01
Spark学习——利用Mleap部署spark pipeline模型
2019-05-01
手写LogisticRegression
2019-05-01
SQL经典题目总结
2019-05-01
剑指offer编程题,一周刷完
2019-05-01