-
您的位置:首页 → 精文荟萃 → 破解文章 → 如何计算PE头部校验和
如何计算PE头部校验和
时间:2004/10/15 0:58:00来源:本站整理作者:蓝点我要评论(0)
-
;你应该已经见过LoadPE的校正PE头checksum的功能,想给你自己的工具加一个这种功能?
;yes,it's easy!let's GO!GO!GO!
;
;PE checksum计算算法:
;PE文件修改的时候一般可不用计算checksum,但是由于OS对系统文件校验其checksum
;因此修改PE的时候有时会需要更新其checksum值,一般可以用imagehelp.dll中的函数
;进行计算,不过实际上这玩意很简单,我们完全可以自己来做.假设PE文件大小x,若为奇数
字节则用0补足文件使x为偶数,然后取文件中所有的字进行带进位加法操作(adc),最后和
;文件大小进行带进位加法操作(adc)得到结果即为checksum结果.当然在计算前应置pe.CheckSum域为0.
;具体见下面的cal_checksum例程.
;enjoy it.
; YJ.Hume.冷雨
include '%fasinc%/win32a.inc'
include '%fasinc%/pestruc.h'
struc OPENFILENAME
{
.lStructSize dd ?
.hwndOwner dd ?
.hInstance dd ?
.lpstrFilter dd ?
.lpstrCustomFilter dd ?
.nMaxCustFilter dd ?
.nFilterIndex dd ?
.lpstrFile dd ?
.nMaxFile dd ?
.lpstrFileTitle dd ?
.nMaxFileTitle dd ?
.lpstrInitialDir dd ?
.lpstrTitle dd ?
.Flags dd ?
.nFileOffset dw ?
.nFileExtension dw ?
.lpstrDefExt dd ?
.lCustData dd ?
.lpfnHook dd ?
.lpTemplateName dd ?
.size=$-.lStructSize
}
virtual at 0
ofn OPENFILENAME
end virtual
;-----------------------------------------
.data
opf OPENFILENAME
lpStrFilter db "PE Files",0,"*.exe;*.dll",0
db "WDM Files",0,"*.sys",0,0
zTit db "Hume's PE checkSum 计算器,2K2",0
initial_dir db ".",0
ms000 db "File OPERATION ERR!",0
fmt db "The PE-CheckSum of Current file IS:%X",0
buf: rb 256
.code
StArT:
mov [opf.lStructSize],ofn.size
mov [opf.lpstrFile],buf
mov [opf.nMaxFile],256
mov [opf.lpstrFilter],lpStrFilter
mov [opf.lpstrTitle],zTit
mov [opf.lpstrInitialDir],initial_dir
mov [opf.Flags],81000h
invoke GetOpenFileName,opf
or eax,eax
je exit
mov eax,ofn.lpstrFile
invoke CreateFile,[opf.lpstrFile],0x80000000,0,0,3,0,0
inc eax
je err
dec eax
push eax
invoke GetFileSize,eax,0
push eax
push eax
invoke VirtualAlloc,0,eax,1000h,4
or eax,eax
je err
pop ecx
push eax
mov esi,eax
mov edx,[esp+8]
invoke ReadFile,edx,eax,ecx,esp,0
mov edi,[esi+3ch]
add edi,esi
mov dword [edi+peh.CheckSum],0
mov ecx,[esp+4]
inc ecx
shr ecx,1
xor ebp,ebp
clc
cal_checksum:
adc bp,word [esi]
inc esi
inc esi
loop cal_checksum
mov ebx,[esp+4]
add ebp,ebx
pop eax
invoke VirtualFree,eax,ebx,4000h
pop eax
pop eax
invoke CloseHandle,eax
invoke wsprintf,buf,fmt,ebp
invoke MessageBox,0,buf,zTit,40h
exit:
invoke ExitProcess,0
err:
invoke MessageBox,0,ms000,zTit,20h
jmp byte exit
.end StArT
|
相关阅读
Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
-
热门文章
去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>