判断是否为PE文件改进版

判断一个文件是否是合法的PE文件 判断一个文件是否是合法的PE文件 IsValidPEFile.cpp 立即下载

原来的程序一遇到0字节的文件就会挂掉,在这里我添加了SEH错误处理代码,完美解决了挂掉的问题!

.386   
.model flat, stdcall   
option casemap :none    
include    windows.inc   
include    user32.inc   
includelib user32.lib   
include    kernel32.inc   
includelib kernel32.lib   
  
.data?   
hFile    dd ?   
hMapFile dd ?   
lpFile dd ?   
  
.const   
szErr    db "不是有效的32位程序!",0   
szOK    db "是可执行文件!",0   
szNO    db "打开文件失败!",0   
szName db "d: .exe",0   
Copyright db " xbin1981",0   
  
.code   
_SEH proc _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext   
    pushad   
    mov esi,_lpExceptionRecord   
    mov edi,_lpContext   
    assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT   
    mov eax,_lpSEH   
    push [eax + 0ch]   
    pop [edi].regEbp   
    push [eax + 8]   
    pop [edi].regEip   
    push eax   
    pop [edi].regEsp   
    assume esi:nothing,edi:nothing   
    popad   
    mov eax,ExceptionContinueExecution   
    ret   
_SEH endp   
  
Start:   
;设置SEH   
assume fs:nothing   
push offset _ErrFormat   
push offset _SEH   
push fs:[0]   
mov fs:[0],esp   
;打开文件   
invoke CreateFile,offset szName,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL   
.if eax == INVALID_HANDLE_VALUE   
invoke MessageBox,NULL,offset szNO,NULL,MB_OK   
JMP _END   
.endif   
mov hFile,eax   
;建立映射文件   
invoke CreateFileMapping,hFile,NULL,PAGE_READONLY,0,0,NULL   
mov hMapFile,eax   
invoke MapViewOfFile,hMapFile,FILE_MAP_READ,0,0,0   
mov lpFile,eax   
;把映射文件的首地址给ESI   
mov esi,eax   
assume esi:ptr IMAGE_DOS_HEADER   
;判断MZ标志   
mov di,[esi].e_magic   
mov bx,5a4dh   
.if di != bx   
invoke MessageBox,NULL,offset szErr,NULL,MB_OK   
JMP _END   
.endif   
;判断PE标志   
add esi,[esi].e_lfanew   
assume esi:ptr IMAGE_NT_HEADERS   
mov edi,[esi].Signature   
.if edi != 00004550h   
invoke MessageBox,NULL,offset szErr,NULL,MB_OK   
JMP _END   
.endif   
  
invoke MessageBox,NULL,offset szOK,NULL,MB_OK   
assume esi:nothing   
JMP _END   
_ErrFormat:   
invoke MessageBox,NULL,offset szErr,NULL,MB_OK   
pop fs:[0]   
add esp,0ch   
_END:   
invoke UnmapViewOfFile,lpFile   
invoke CloseHandle,hMapFile   
invoke CloseHandle,hFile   
invoke ExitProcess,0   
end Start

C++判断pe文件实例 主要介绍了C++判断pe文件的方法,包含了文件操作的具体实现方法,具有很好的参考借鉴价值,需要的朋友可以参考下 立即下载

相关推荐

ROS 2实战:用MoveIt Task Constructor让机械臂完成抓取任务(附避坑指南)

本文详细介绍了如何在ROS 2环境中使用MoveIt Task Constructor框架,为Franka Panda机械臂构建一个完整的拾取放置任务流水线。通过分解任务阶段、配置规划器并处理实际部署中的常见问题,帮助开发者从基础运动规划升级到可靠的多步骤任务编排,并附有核心避坑指南。

vvv99的博客 507

判断文件是否是PE文件

判断一个文件的文件属性是不是PE文件:主要思路就是:比较文件的DOS头和NT头的白哦之是不是“MZ”和“PE”,判断文件是不是EXE文件或者DLL文件或者其他的主要思路是:获取文件的文件头的Characteristis字段,根据字段值进行判断 下边贴上源码 #include <stdio.h> #include <Windows.h> int main() { print...

4SecNet团队专栏 1640

OpenMV模块视觉测距(避障)+颜色识别+TFT-LCD显示(实现原理与代码分析)

上图所示代码实际运行的帧率比较低,主要原因有以下两个:1.硬件问题,博主使用的版本比较低,可以尝试使用高版本OpenMV2.图像滤波问题。之前加入图像滤波是想提高色块识别的准确性,但是相应的运算速度也会下降。

ediykk的博客 1万+

如何判断一个文件是否为PE文件

PE文件,Portable Executable file format简称。 那么如何判断一个文件是否为PE格式的文件? 1、首先检验文件头部第一个字的值是否等于 IMAGE_DOS_SIGNATURE,是则 DOS MZ header 有效。 2、一旦证明文件的 DOS header 有效后,就可用e_lfanew来定位 PE header 了。 3、比较 PE header 的第一个...

飞檐走壁 3458

修勾逃生巨人危机v10.9.9修改版:免广告无限内购与GM工具详解

游戏修改技术是通过对原版游戏程序进行代码层面的调整,实现特定功能的增强或限制解除。其核心原理涉及内存修改、资源替换和API拦截等技术手段,能够有效提升用户体验和测试效率。在移动游戏领域,免广告和无限内购是常见的技术实现方向,通过屏蔽广告SDK调用和修改内购验证逻辑,为用户提供更流畅的游戏体验。这类技术特别适合游戏开发者进行功能测试,以及玩家希望完整体验游戏内容而不受商业模式限制的场景。以修勾逃生巨人危机v10.9.9版本为例,该修改版集成了GM工具开启功能,通过特定操作路径即可激活调试面板,实现了广告去除和

weixin_30855099的博客 2596

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 112

判断文件是否PE格式

#include "ValidPE.h" #include CMyApp theApp; BOOL CMyApp::InitInstance() { //http;//www.pythonschool.com CFileDialog dlg( TRUE ); if( dlg.DoModal() != IDOK ) { return FALSE; } else { HAN

刘华世的博客 651

Power domain 划分该如何下手

假如PD1比PD3更always on的话,我们只需要插入普通buffer即可,因为PD3 on,PD1也肯定是ON,PD1 off,PD3肯定时off,PD1能cover PD3的电源情况,因此使用普通buffer也可,但是处于省电角度,我们还是使用AO buffer;在我们做多power domain时,在切分power domain时,需要谨慎,稍有不慎,就会出现congestion以及timing问题,那问题来了,我们在切分power domain时有什么考究么,今天小编就和大家一起讨论讨论。

芯冰乐 207

使用Python判断文件是否为PE文件

PE的全称是Portable Executable,指可移植的可执行文件,目前的最新版本是2013年2月6日发布的8.3版。PE文件包括exe文件、com文件、dll文件、ocx文件、sy...

董付国的Python专栏 685

SAP SEGW 事物码里的 Function Import

开放数据协议(OData)包括标准的 CRUD (创建、检索、更新和删除)操作,这些操作映射到 HTTP 方法的 POST、GET、PUT/MERGE 和 Delete 几类。此外,OData还支持进一步的服务操作:,这些操作可以由HTTP方法GET或POST调用,用于处理不能映射到标准 CRUD 操作的任何内容。通过在数据模型中创建 ,可以在 service Builder 中实现此类额外的服务操作。例如,您可以为以下自定义操作创建函数导入:Work Item confirmation检查航班的可用性虽然

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 995

计算机视觉教程1-1:透视空间与透视变换

在生活中,透视现象很常见,其物理本质是光的直线传播。由于人眼与相机在捕获图像时均存在透视现象,因此计算机几何基于透视空间进行研究。本节介绍透视变换原理

FRIGIDWINTER的博客 3091

python判断是否为“PE文件”

什么是PE文件? PE文件被称为可移植的执行体是Portable Execute的全称,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。 怎么识别PE文件? 1、首先,PE文件一定是MZ(0x4D5A)起头的。 2、其次,3C位置的值(即如图所示E8)指向的值是PE(0x5045) 代码如下:

u012262582的专栏 3164

【通信】多径衰落信道的matlab仿真

1 简介 2 部分代码 clearf_c=1e3; %carrier frequency(no modulation)time_1 = (linspace (0, 10, 1000)); %timesignal_in = sin (2 * pi *f_c* time_1); %sine wave plot (time_1, signal_in, 'b');grid on;

qq_59747472的博客 1383

判断是不是PE文件

判断是不是一个PE文件有很多种方法,我们用的方法是:先读取Dos头,判断e_magic是否等于"MZ",然后再读取PE文件头的头字节,判断是不是 "PE00"。这样就能确定是不是一个有效的PE文件。代码如下://选择文件void CPEDlg::OnButton1() { // TODO: Add your control notification handler code here TCHAR tzFilter[] = _T("可执行文件(*.exe)|*.exe|所有文件(*.*)|*.*||"); C

十年磨一剑,霜刃未曾试! 2739

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

根据PE文件头判断是否合法的PE文件

今天修改同事的PE文件扫描程序,结果发现扫描出来的有些文件只是一些PE文件的尸体,缺胳膊断腿的,不忍再拿来解剖了,到网上搜了一个根据PE文件头判断是否是合法PE文件的代码片段,该代码片段还有判断一个程序的子系统类型功能(Console还是GUI)。大致代码如下: BOOL IsValidPEFile(LPTSTR tszFullFileName){ HANDLE hFile = I

380

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

PE文件结构详解

Windows程序的各种界面称为资源,包括加速键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(DialogBox)、图标(Icon)、菜单(Menu)、串表(StringTable)、工具栏(Toolbar)和版本信息(VersionInformation)等。执行PE文件前,加载程序在进行重定位的时候,会用PE文件在内存中的实际映像地址减PE文件所要求的映像地址,根据重定位类型的不同将差值添加到相应的地址数据中。...

神棍之路 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

判断某exe后缀的文件是否为PE格式

如何判断PE文件合法,主要就是两个地方,头为"MZ"签名,跟着DOS头部的就是"PE"签名,任何标准的PE文件都会包含这两个签名。如下这段代码所示,这是一个判断是否为合法PE文件的API。通过文件映射实现PE文件内容的读取。BOOL IsValidPEFile( CString strPathName ){ if ( ! PathFileExists( strPathName ) )

643

【第33节】windows原理:初探PE文件

PE文件是有特定格式的文件,像后缀名是EXE的可执行文件、后缀名是DLL的动态链接库文件、sys格式的驱动文件,这些都属于PE格式文件。PE文件主要分成头和主体两部分,这两部分里面还会再细分。文件头是由几个结构体组成的,包含了文件的一些描述信息;文件主体由多个段构成,里面有文件的可执行代码、执行时要用的数据,还有资源(像Windows程序里的图标、一些界面等)。一般来说,不用于执行的就是数据,用于执行的就是代码,所以主体大概能分成代码和数据两部分,实际上按照不同作用,还能再细分成多个部分。

攻城狮7号的博客 2665

PE文件结构

(完整结构)多多复习多多理解!!!

2403_87020251的博客 2023

PE文件简介

PE文件 PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL) PE文件是指32位可执行文件,也称为PE32。64位的可执行文件称为PE+或PE32+,是PE(PE32)的一种扩展形式(请注意不是PE64)。 结构 (用个网上的图) ...

kabeor的博客 1万+

PE文件格式详解(一)

转载地址点击打开链接

3765

PE文件详解(C制作PE格式解析器)

0x00:前言 PE文件可以说是在逆向的各个领域都有涉及,特别是病毒领域,如果你是一名病毒制造者,那你肯定是对PE文件有详细的了解,那么这里我就详细介绍一下PE文件,最后我们用C来写一个PE格式解析器。 0x01:PE格式 要了解PE文件,首先要知道PE格式,那么什么是PE格式呢,既然是一个格式,那肯定是我们都需要遵循的定理,下面这张图就是PE文件格式的图片(来自看雪),非常大一张图片,其实PE格...

CharlesGodX的博客 6364

C++ 获取 PE 文件的各种信息

首先感谢 cyxvc 老哥,他的代码可读性超高,精简有用以理解,我找这方面的资料好久了,这篇文章对我帮助很大。 参考代码: #include "stdafx.h" #include <Windows.h> extern void DirectoryString(DWORD dwIndex); int _tmain(int argc, _TCHAR* argv[]) { //获...

LYSM 2606

跟着王哥学逆向——PE文件详解篇(第一篇)

这是《跟着王哥学逆向》PE文件详解篇第一篇,该篇章主要对PE文件内部结构进行仔细剖析,同时记录下来PE文件各个字节所代表的含义,方便自己查看。此篇章对DOS头、PE文件头、区块表等按照顺序介绍,有很强的系统性,计划下一篇章对导入表、导出表、资源表、重定位表进行详解。该系列学习主要参考小甲鱼讲的PE系列视频,真的很顶。

qq_52642385的博客 8646
上一篇: 用一行简单的代码就能加速IE运行脚本的速度
下一篇: 对程序调用API变形的一点认识
xbin1981
博客等级 码龄14年 8粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值