⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filepatch.asm

📁 加密解密2配套光盘,内有加密解密第二版书内提及的软件.
💻 ASM
字号:
;==========================================================================
;《加密与解密__软件保护技术》   
; WWW.PEDIY.COM   
; 2002年11月
;==========================================================================

    .486
    .model flat, stdcall
    option casemap :none     

; #########################################################################

    include c:\masm32\include\windows.inc
    include c:\masm32\include\user32.inc
    include c:\masm32\include\kernel32.inc
    include c:\masm32\include\comdlg32.inc

    includelib c:\masm32\lib\user32.lib
    includelib c:\masm32\lib\kernel32.lib
    includelib c:\masm32\lib\comdlg32.lib



; #########################################################################

    .data
                   
szMsgTitle      db '文件补丁示例',0
szFileName      DB                      512 DUP (?)
ofName          OPENFILENAME            <>


lFileSize       dd 40960                ;文件大小
lFileOffset     dd 11E3h                ;需要修改的文件偏移地址
lChanges        dd 2h                   ;需要修补的字节数
BytesToWrite    db 06Ah,00h ;写的数据

; -------------------------------------------------------------------------

lBytesWriten    dd 0                    ;写进文件的字节数
hFile           dd 0                    ;文件句柄
szOK            db '补丁完成 :)',0
szErrCreate     db '不能打开文件',13,10
                db '检查文件路径和文件名再试一次!',13,10,0
szErrFileSize   db '文件大小不符',13,10,0
szErrFilePtr    db '不能设置文件指针',13,10,0
szErrWriteFile  db '文件不可写',13,10,0

; -------------------------------------------------------------------------
; 下面是打开对话框过滤器
szFilter        db      '*.exe', 0, '*.exe',  0, 0

; #########################################################################

    .code

start:
;---------------------------------------              
; 下面初始化ofName结构,并显示打开对话框
       MOV     ofName.lStructSize, SIZEOF OPENFILENAME
       MOV     ofName.lpstrFile, OFFSET szFileName
       MOV     ofName.nMaxFile, MAX_PATH
       MOV     ofName.Flags, OFN_FILEMUSTEXIST OR OFN_HIDEREADONLY
       MOV     ofName.lpstrFilter, OFFSET szFilter
       invoke  GetOpenFileName, ADDR ofName
       .IF     EAX == 0                  ; 如果用户在打开对话框中点击取消按钮
       INVOKE  ExitProcess, 1            ; 退出
       .ENDIF


;---------------------------------------
;打开文件

        invoke CreateFileA,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                   ;保存文件句柄

;----------------------------------------
; 检查文件尺寸

        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

error:
        invoke CloseHandle,hFile        ;关闭文件

error_create:

        invoke MessageBox,NULL,ebx,offset szMsgTitle,MB_OK+MB_ICONINFORMATION

        invoke ExitProcess,NULL             ;退出

End start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -