- 注册时间
- 2011-3-10
- 最后登录
- 1970-1-1
该用户从未签到
|
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.486 ; create 32 bit code
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;EQU数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ORIGN_CODE EQU 347DH
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szMsgTitle db '破解补丁',0 ;标题
szFileName db "SendQQ50.exe",0 ;目录文件名
stStartUp STARTUPINFO <?>
psInfo PROCESS_INFORMATION <?>
BytesToWrite db 0EBH,34H ;要写的数据
lChanges dd 2h ;需要写的字节
lVOffset dd 04085C2H ;需要修改的进程虚拟地址
szTemp db 10 DUP(?) ;临时缓存区
AppName db "风速QQ聊天室群发王2006--50QQ",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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;循环,直至找到正角的窗口名字
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Serach:
invoke FindWindow,NULL,ADDR AppName
test eax,eax
jz Serach
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;读取地址的2个字节,以校验文件是否匹配
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
invoke ReadProcessMemory,psInfo.hProcess,lVOffset,ADDR szTemp,2,0
.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
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;退出
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
error:
invoke MessageBox,NULL,ebx,offset szMsgTitle,MB_OK+MB_ICONINFORMATION
invoke ExitProcess,NULL
end start
编译后才3.5K,效果还不错。比他语言写的,实在是精简 |
|