飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2981|回复: 1

[07版] 汇编语言来制作文件补丁 BY:飘云

[复制链接]

该用户从未签到

发表于 2007-4-20 10:47:12 | 显示全部楼层 |阅读模式
汇编语言来制作文件补丁  作者:飘云

测试文件、源代码和补丁文件详见附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-4-11 20:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2007-4-24 20:19:14 | 显示全部楼层
     <pre>.586
    .model flat,stdcall
    </pre>
                    <pre>include windows.inc
    include kernel32.inc
    include user32.inc
    </pre>
                    <pre>includelib kernel32.lib
    includelib user32.lib</pre>
                    <pre>.data
    szMsgTitle                db '文件补丁示例',0
    lFileSize                dd 16384                                                                ;文件大小
    lFileOffset                dd 1920h                                                             ;需要补丁的偏移地址
    lChanges                dd 6h                                                                        ;需要修补的字节数
    BytesToWrite        db 0E9h, 0EFh, 00h, 00h, 00h, 90h                 ;补丁数据
    lBytesWriten        dd 0                                                                        ;写进文件的字节数
    hFile                        dd 0                                                                        ;文件句柄
    szFileName                db 'patch_test.exe',0                                          ;文件名
    szOK                        db '补丁成功 :)',0
    szErrCreate                db '不能打开文件',13,10     
                                    db '检查文件路径和文件名再试一次!',13,10
    szErrFileSize        db '文件大小不符',13,10
    szErrFilePtr        db '不能设置文件指针',13,10,0
    szErrWriteFile        db '文件不可写',13,10,0</pre>
                    <pre>.code
    start:
    ;--------------------------------------------
    ;打开文件
            invoke CreateFile,offset szFileName,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
            cmp eax,-1                                                                                        ;发现文件?
            mov ebx,offset szErrCreate
            jz        error_create
            mov hFile,eax                                                                                ;保存文件句柄
            </pre>
                    <pre>;---------------------------------------------
    ;检查文件尺寸
            invoke GetFileSize,eax,NULL
            cmp eax,lFileSize
            mov ebx,offset szErrFileSize
            jnz error
    ;---------------------------------------------
    ;在文件内设置指针偏移
            invoke SetFilePointer,hFile,lFileOffset,NULL,FILE_BEGIN
            cmp eax,-1
            mov ebx,offset szErrFilePtr
            jz  error
    ;---------------------------------------------
    ;写数据到文件
            invoke WriteFile,hFile,offset BytesToWrite,lChanges,offset lBytesWriten,NULL
            test eax,eax
            mov  ebx,offset szErrWriteFile
            jz   error
            mov  ebx,offset szOK
            </pre>
                    <pre>error:
            invoke CloseHandle,hFile                                                        ;关闭文件</pre>
                    <pre>error_create:
            invoke MessageBox,NULL,ebx,offset szMsgTitle,MB_OK+MB_ICONINFORMATION
            invoke ExitProcess,NULL                                                                ;退出

    end start</pre>
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表