判断是否为PE文件改进版

来源:互联网 发布:windows xp万能密钥 编辑:程序博客网 时间:2024/06/05 00:58

原来的程序一遇到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

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大叶海棠烂根怎么办 玻璃海棠长得很高怎么办 玫瑰海棠叶子干焦怎么办 海棠树树干生虫怎么办 天竺葵花骨朵有虫子了怎么办? 被刺梅的刺扎了怎么办 被刺梅的刺划手了怎么办 虎刺花叶子黄了怎么办 地栽月季叶子发黄怎么办 梅花浇水浇多了怎么办 深水井底下花管进水量小怎么办 盆景对节白腊树叶尖干枯怎么办 四季海棠茎软了怎么办 玫瑰海棠烂根了怎么办 格丽海棠花腌了怎么办 养殖场不能雨污分流怎么办 药店买的药贵了怎么办 神经损伤小便少尿不出来怎么办 手指夹伤出血了怎么办 手指夹破流血了怎么办 喂了宝宝熊胆粉怎么办 不小心擦伤了皮怎么办 吃了减肥药拉肚子怎么办 遇到他心通的人怎么办 被茅山术害了怎么办 鱼缸鱼身上烂了怎么办 鳄鱼龟皮肤烂了怎么办 墨水渗透进皮肤里了怎么办 中药渗透到皮肤里怎么办 甘露醇渗透到皮肤下怎么办 水银弄到眼睛里怎么办 水银粘到皮肤上怎么办 榴莲和虾同吃了怎么办 吃榴莲和虾中毒怎么办 榴莲和虾一起吃怎么办 狗被别人下毒了怎么办 大掌门2没存元宝怎么办 大掌门2转换阵容怎么办 率土之滨s2绝版怎么办 异界气息的装备怎么办 vivo电板没电了怎么办