原来的程序一遇到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  " www.xbin.cn ",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

判断是否为PE文件改进版相关推荐

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

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

  2. c语言读取exe的pe标记,PE文件信息读取程序(1.关键函数部分)

    #include "stdafx.h" #include "PEFuncs.h" #include //需要引入如下.lib文件 //#pragma comme ...

  3. 网络安全学习第6篇 - 爆破及PE文件解释

    1.请采用暴力破解的方式去尝试破解crack.exe文件(在实验报告中说明破解原理即可,无需提交破解后的文件) 2.请依据参考文档中的内容编写一个小程序,使其可以实现如下功能: ①判断一个文件是否为P ...

  4. 【逆向】PE文件解析

    文章目录 PE文件 DOS头部 PE/NT头解析 区段头/区块表解析 数据目录表(存放在某个区段) 1. 导出表 2. 导入表 3. 重定位表 PE文件 PE文件:PE文件是在windows平台可执行 ...

  5. 使用程序判断一个文件是否是有效的PE文件

    判断一个文件是否为有效的PE文件,判断2个字段: DOS头的e_magic字段是否为0x5A4D: NT头的Signature字段是否为0x00004550: 若都是的话则是一个有效的PE文件: VC ...

  6. [系统安全] 四十一.APT系列(6)Python解析PE文件并获取时间戳判断来源区域

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  7. c语言怎么判断文件类型,判断你的文件是否为合法的PE文件和应用类型

    作者:赖锋 源代码下载 可能很多的人都没有注意到一些事情,就是你的程序是不是合法的可运行的应用程序,例如一个文件只是把后缀改成 .exe 的形式就显示为应用程序的图标了! 你不想写一个根据后缀名就确定 ...

  8. 判断文件是否是PE文件

    判断一个文件的文件属性是不是PE文件:主要思路就是:比较文件的DOS头和NT头的白哦之是不是"MZ"和"PE",判断文件是不是EXE文件或者DLL文件或者其他的 ...

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

    PE文件,Portable Executable file format简称. 那么如何判断一个文件是否为PE格式的文件? 1.首先检验文件头部第一个字的值是否等于 IMAGE_DOS_SIGNATU ...

最新文章

  1. python popen阻塞_对Python subprocess.Popen子进程管道阻塞详解
  2. Nginx主配置文件nginx.conf详细说明
  3. 使用最新目标跟踪框mmtracking实现自己的目标跟踪项目
  4. 8. An Introduction to MCMC for Machine Learning (5)
  5. triplet loss后面不收敛_Policy Gradient——一种不以loss来反向传播的策略梯度方法...
  6. 科大星云诗社动态20210308
  7. Socket.IO for Unity 简要介绍
  8. 查询分析器下如何备份数据库
  9. 面向中文自然语言处理的60余类系统开源实践项目与工业探索索引
  10. LIRe 源代码分析 7:算法类[以颜色布局为例]
  11. MyEclipse 代码自动提示功能失效 提示No Default Proposals 或 no completions available 的解决方法 转...
  12. BERT 的演进和应用
  13. 个人经历 | 聊聊我的安全成长之路
  14. app防止被抓包,包括Fiddler,Charles,HttpCanary等工具
  15. mybatis plus(包米豆)json存储Mysql数据库
  16. STC 数码管显示及74HC573在其中的应用
  17. 蓝桥杯—大胖子走迷宫—广搜
  18. HotKey学习总结
  19. 外包怎么了?请不要“妖魔化”它。
  20. oracle cve 漏洞,CVE安全漏洞的理解

热门文章

  1. javaMail发送邮件实例
  2. Java 设计模式最佳实践:一、从面向对象到函数式编程
  3. 天肌1300和高通骁龙778g参数对比 天肌1300和骁龙778g哪个好
  4. VBA小功能集合-判断列内是否有重复值
  5. python 打印输出到文件中
  6. 使用MD5加密数据库中的用户密码介绍
  7. java游戏修改存档_【教你在用一键存档手机端修改JAVA游戏人物属性BT】详细教程...
  8. python 技巧视频教程_扣丁学堂Python视频教程之Python开发技巧
  9. 张宇1000题线性代数 第四章 矩阵的秩
  10. meshlab比较模型误差