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

📄 loader.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

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


;////////////////////////////////////////////////////////////////////////////////////
; EQU 数据
ORIGN_CODE      EQU     016AH            ; 注意是字比较

;////////////////////////////////////////////////////////////////////////////////////

;////////////////////////////////////////////////////////////////////////////////////
; 数据段
.data
                   
	szMsgTitle      db '内存补丁示例',0  
	szFileName      db "EnableMenuasp.exe",0       ; 目标文件名                   
	stStartUp	STARTUPINFO		<?>
	psInfo          PROCESS_INFORMATION      <?>

	BytesToWrite    db 06Ah,00h             ;写的数据
	lChanges        dd 2h                   ;需要修补的字节数
	lVOffset        dd 04011e3h             ;需要修改的进程的虚拟地址
	hProcess        dd  0  
	szTemp          db         10 DUP (?)   ; 临时缓存区
	AppName         db "第4章 功能限制",0   ; 应用程序标题        

; -------------------------------------------------------------------------
	szLoadError     db '无法被加载!', 0   ; 无法创建进程时的提示消息
	szOK            db '补丁成功 :)',0
	szbyteError     db '文件不匹配',0


;////////////////////////////////////////////////////////////////////////////////////



;////////////////////////////////////////////////////////////////////////////////////
.code

start:
;---------------------------------------              

;下面创建目标进程
      invoke  GetStartupInfo,addr stStartUp
      invoke  CreateProcess, ADDR szFileName, NULL, NULL, NULL, FALSE, 0, 0, 0, ADDR stStartUp, ADDR psInfo
       .IF     EAX == 0        ; 如果创建目标进程失败了
               invoke  lstrcat, ADDR szFileName, ADDR szLoadError    
               mov ebx,offset szFileName
               jmp error 
      .ENDIF

Search: 
	invoke FindWindow,NULL,addr AppName
	test eax,eax
	jz Search                                             ; 循环,直到找到正确的窗口名字
	
        invoke  ReadProcessMemory,psInfo.hProcess, lVOffset, ADDR szTemp, 2, 0      ; 读取指定地址的2个字节                 
	 .IF WORD PTR [szTemp] != ORIGN_CODE     
        	 mov ebx,offset szbyteError
        	 jmp error 
 	.ENDIF

	invoke  WriteProcessMemory,psInfo.hProcess, lVOffset, ADDR BytesToWrite, lChanges, ADDR szTemp     
	 .IF  eax==FALSE 
        	 mov ebx,offset szbyteError
        	 jmp error 
 	.ENDIF
        mov ebx,offset szOK

error:
        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 + -