用金山游侠和Ollydbg可以得知:
改目录“\反恐精英\cstrike\dlls”下mp.dll文件以下值可使应的武器子弹无限
-------------------------------------------------------------------
内存偏移值 文件偏移值 武器选号 武器名
1、 c2cca0d ca0d B11 K&M .45
2、 c2c5790 5790 B12 9*19mm
3、 c2c3508 3508 B13 Night Hawk
4、 c2c9728 9728 B14 228
5、 c2c3bac 3bac B15 .40 Dual
6、 c2c4348 4348 B16 Five-Seven
1、 c2c7951 7951 B21 12 Gauge
2、 c2ccf21 cf21 B22 Auto Shotgun
1、 c2c9012 9012 B31 SMG
2、 c2cbbd8 bbd8 B32 Schmidt MP
3、 c2c9cfd 9cfd B33 ES C90
4、 c2c8a32 8a32 B34 Mac-10
5、 c2cc18f c18f B35 K&M UMP45
1、 c2c1352 1352 B41 CV-47
2、 c2cafb2 afb2 B42 Krieg 552
3、 c2c8348 8348 B43 M4A1
4、 c2c1da2 1da2 B44 Bullpup
5、 c2ca2fd a2fd B45 Schmidt
6、 c2c250e 250e B46 Magnum
7、 c2c4f03 4f03 B47 D3AU1
8、 c2ca9b3 a9b3 B48 Krieg 550
1、 c2c73d2 73d2 B51 ES M249
1、 c2c4a10 4a10 B83 Flashbang
2、 c2c5fd6 5fd6 B84 HE Grenade
3、 c2cb7b8 b7b8 B85 Smoke Grenade
-------------------------------------------------------------------
据此用loader来实现动态修改,要注意游戏会检测是否处于调试状态。。。
源代码如下:
; ????????????????????????????????????
.486 ; create 32 bit code
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\Comctl32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\shell32.inc
include \masm32\include\oleaut32.inc
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\Comctl32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\oleaut32.lib
; ????????????????????????????????????
.data
CS_AppName1 db "cstrike.exe",0
CS_AppName2 db "hl.exe",0
CS_CommandLine db " -console -game cstrike",0
CS_StartupInfo db 48h dup (0)
BaseOfMpDll dd 0
IsModified dd 0
;-------------------------------------------------
nFileNameSize=60h
PatcherFileName db nFileNameSize dup (0)
WeaponName db 10h dup(0)
nWeaponNameSize dd 0
lpBaseAddressx dd 05790h
oBufferx db 048h
mBufferx db 090h
nSizex = 1h
lpBaseAddressx1 dd 05790h
oBufferx1 db 048h
mBufferx1 db 090h
nSizex1 = 1h
lpBaseAddressx2 dd 05790h
oBufferx2 db 048h
mBufferx2 db 090h
nSizex2 = 1h
;-------------------------------------------------
hProcess dd 0
tBuffer db 40h dup(0)
; MpCheck
lpBaseAddress = 0ca0dh
oBuffer db 04bh,06ah,05h
mBuffer db 090h,090h,090h
nSize = 3h
lpBaseAddress0 = 0193240ah
oBuffer0 db 074h
mBuffer0 db 0ebh
nSize0 = 1h
lpBaseAddress1 = 0ca0dh
oBuffer1 db 04bh
mBuffer1 db 090h
nSize1 = 1h
lpBaseAddress2 = 05790h
oBuffer2 db 048h
mBuffer2 db 090h
nSize2 = 1h
lpBaseAddress3 = 03508h
oBuffer3 db 048h
mBuffer3 db 090h
nSize3 = 1h
lpBaseAddress4 = 09728h
oBuffer4 db 048h
mBuffer4 db 090h
nSize4 = 1h
lpBaseAddress5 = 03bach
oBuffer5 db 048h
mBuffer5 db 090h
nSize5 = 1h
lpBaseAddress6 = 04348h
oBuffer6 db 048h
mBuffer6 db 090h
nSize6 = 1h
lpBaseAddress7 = 07951h
oBuffer7 db 04ah
mBuffer7 db 090h
nSize7 = 1h
lpBaseAddress8 = 0cf21h
oBuffer8 db 04ah
mBuffer8 db 090h
nSize8 = 1h
lpBaseAddress9 = 09012h
oBuffer9 db 048h
mBuffer9 db 090h
nSize9 = 1h
lpBaseAddress10 = 0bbd8h
oBuffer10 db 048h
mBuffer10 db 090h
nSize10 = 1h
lpBaseAddress11 = 09cfdh
oBuffer11 db 048h
mBuffer11 db 090h
nSize11 = 1h
lpBaseAddress12 = 08a32h
oBuffer12 db 048h
mBuffer12 db 090h
nSize12 = 1h
lpBaseAddress13 = 0c18fh
oBuffer13 db 048h
mBuffer13 db 090h
nSize13 = 1h
lpBaseAddress14 = 01352h
oBuffer14 db 048h
mBuffer14 db 090h
nSize14 = 1h
lpBaseAddress15 = 0afb2h
oBuffer15 db 048h mBuffer15 db 090h
nSize15 = 1h
lpBaseAddress16 = 08348h
oBuffer16 db 048h
mBuffer16 db 090h
nSize16 = 1h
lpBaseAddress17 = 01da2h
oBuffer17 db 048h
mBuffer17 db 090h
nSize17 = 1h
lpBaseAddress18 = 0a2fdh
oBuffer18 db 048h
mBuffer18 db 090h
nSize18 = 1h
lpBaseAddress19 = 0250eh
oBuffer19 db 048h
mBuffer19 db 090h
nSize19 = 1h
lpBaseAddress20 = 04f03h
oBuffer20 db 048h
mBuffer20 db 090h
nSize20 = 1h
lpBaseAddress21 = 0a9b3h
oBuffer21 db 048h
mBuffer21 db 090h
nSize21 = 1h
lpBaseAddress22 = 073d2h
oBuffer22 db 048h
mBuffer22 db 090h
nSize22 = 1h
lpBaseAddress23 = 04a10h
oBuffer23 db 04ah
mBuffer23 db 090h
nSize23 = 1h
lpBaseAddress24 = 05fd6h
oBuffer24 db 04ah
mBuffer24 db 090h
nSize24 = 1h
lpBaseAddress25 = 0b7b8h
oBuffer25 db 04ah
mBuffer25 db 090h
nSize25 = 1h
CopyRightCaption db "反恐精英V1.5 子弹无限作弊器",0
CopyRightText db "使用方法:将本作弊器文件名改为欲作弊武器的购买按键序列后放到反恐目录下运行。",0dh,0ah
db " 如要AK47子弹无限,文件名就改为b41(闪弹/手雷/烟弹用b83/b84/b85表示)。",0dh,0ah
db " 支持<单种><两种>和<全部>三种作弊模式,模式由作弊器文件名来识别。",0dh,0ah
db " <全部>为默认模式,改名时要注意格式一定要对,具体例子格式如下:",0dh,0ah,0dh,0ah
db " 作弊模式 文件名格式 作弊武器",0dh,0ah
db " 单种 b41 AK47",0dh,0ah
db " 两种 b13+b46 Deagle和AWP",0dh,0ah
db " 全部 其它 所有武器",0dh,0ah,0dh,0ah
db "编制说明:win32汇编语言编写,由 rgbsky(俞凯) 完成,谢谢朋友们的使用!",0dh,0ah
db "编制时间:2005年6月18日 版本:Ver1.2",0dh,0ah
db "作者联系:rgbsky@sohu.com rgbsky@hotmail.com (QQ:175583470)",0
SecceedCaption db "成功",0
SecceedText db "修改器顺利工作。",0
Error1Caption db "失败",0
Error1Text db "反恐程序未找到,请确保该修改器与 cstrike.exe 或 hl.exe 在同一目录下。",0
Error2Caption db "失败",0
Error2Text db "'模块文件名获取失败。",0
Error3Caption db "失败",0
Error3Text db "'读取内存时产生错误。",0
Error4Caption db "失败",0
Error4Text db "文件不匹配,请检查反恐精英的版本是否为Ver1.5。",0
Error5Caption db "失败",0
Error5Text db "写入内存时产生错误。",0
.data?
DBEvent DEBUG_EVENT <>
CS_ProcessInfo PROCESS_INFORMATION <>
.code
; ?????????????????????????????????????
start:
; ????????????????????????????????????? invoke GetModuleFileName,NULL,addr PatcherFileName,nFileNameSize
test eax,eax
jz BeginPatcher
mov nWeaponNameSize,eax
mov ecx,eax
sub ecx,4
obtainlength:
dec ecx
mov ebx,offset PatcherFileName
mov al,byte ptr [ebx+ecx]
cmp al,'\'
jz getlength
cmp al,60h
jb uppercase
sub al,20h
uppercase:
mov byte ptr [ebx+ecx],al
jmp obtainlength
getlength:
sub nWeaponNameSize,5
sub nWeaponNameSize,ecx
xor esi,esi
fillweaponname:
inc ecx
mov ebx,offset PatcherFileName
mov al,byte ptr [ebx+ecx]
mov edx,offset WeaponName
mov byte ptr [edx+esi],al
inc esi
cmp esi,nWeaponNameSize
jnz fillweaponname
.IF esi==3h
jmp Init1Weapon
.ELSEIF esi==7h
jmp Init2Weapon
.ELSE
jmp BeginPatcher
.ENDIF
Init1Weapon:
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='1'
mov lpBaseAddressx,0ca0dh
mov oBufferx,04bh
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='2'
mov lpBaseAddressx,05790h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='3'
mov lpBaseAddressx,03508h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='4'
mov lpBaseAddressx,09728h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='5'
mov lpBaseAddressx,03bach
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='6'
mov lpBaseAddressx,04348h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='2' && WeaponName[2]=='1'
mov lpBaseAddressx,07951h
mov oBufferx,04ah
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='2' && WeaponName[2]=='2'
mov lpBaseAddressx,0cf21h
mov oBufferx,04ah
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='1'
mov lpBaseAddressx,09012h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='2'
mov lpBaseAddressx,0bbd8h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='3'
mov lpBaseAddressx,09cfdh
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='4'
mov lpBaseAddressx,08a32h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='5'
mov lpBaseAddressx,0c18fh
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='1'
mov lpBaseAddressx,01352h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='2'
mov lpBaseAddressx,0afb2h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='3'
mov lpBaseAddressx,08348h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='4'
mov lpBaseAddressx,01da2h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='5'
mov lpBaseAddressx,0a2fdh
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='6'
mov lpBaseAddressx,0250eh
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='7'
mov lpBaseAddressx,04f03h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='8'
mov lpBaseAddressx,0a9b3h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='5' && WeaponName[2]=='1'
mov lpBaseAddressx,073d2h
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='8' && WeaponName[2]=='3'
mov lpBaseAddressx,04a10h
mov oBufferx,04ah
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='8' && WeaponName[2]=='4'
mov lpBaseAddressx,05fd6h
mov oBufferx,04ah
jmp BeginPatcher
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='8' && WeaponName[2]=='5'
mov lpBaseAddressx,0b7b8h
mov oBufferx,04ah
jmp BeginPatcher
.ENDIF
mov nWeaponNameSize,0
jmp BeginPatcher
Init2Weapon:
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='1'
mov lpBaseAddressx1,0ca0dh
mov oBufferx1,04bh
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='2'
mov lpBaseAddressx1,05790h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='3'
mov lpBaseAddressx1,03508h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='4'
mov lpBaseAddressx1,09728h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='5'
mov lpBaseAddressx1,03bach
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='1' && WeaponName[2]=='6'
mov lpBaseAddressx1,04348h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='2' && WeaponName[2]=='1'
mov lpBaseAddressx1,07951h
mov oBufferx1,04ah
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='2' && WeaponName[2]=='2'
mov lpBaseAddressx1,0cf21h
mov oBufferx1,04ah
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='1'
mov lpBaseAddressx1,09012h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='2'
mov lpBaseAddressx1,0bbd8h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='3'
mov lpBaseAddressx1,09cfdh
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='4'
mov lpBaseAddressx1,08a32h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='3' && WeaponName[2]=='5'
mov lpBaseAddressx1,0c18fh
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='1'
mov lpBaseAddressx1,01352h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='2'
mov lpBaseAddressx1,0afb2h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='3'
mov lpBaseAddressx1,08348h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='4'
mov lpBaseAddressx1,01da2h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='5'
mov lpBaseAddressx1,0a2fdh
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='6'
mov lpBaseAddressx1,0250eh
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='7'
mov lpBaseAddressx1,04f03h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='4' && WeaponName[2]=='8'
mov lpBaseAddressx1,0a9b3h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='5' && WeaponName[2]=='1'
mov lpBaseAddressx1,073d2h
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='8' && WeaponName[2]=='3'
mov lpBaseAddressx1,04a10h
mov oBufferx1,04ah
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='8' && WeaponName[2]=='4'
mov lpBaseAddressx1,05fd6h
mov oBufferx1,04ah
jmp testb2
.ENDIF
.IF WeaponName[0]=='B' && WeaponName[1]=='8' && WeaponName[2]=='5'
mov lpBaseAddressx1,0b7b8h
mov oBufferx1,04ah
jmp testb2
.ENDIF
mov nWeaponNameSize,0
jmp BeginPatcher
testb2:
.IF WeaponName[4]=='B' && WeaponName[5]=='1' && WeaponName[6]=='1'
mov lpBaseAddressx2,0ca0dh
mov oBufferx2,04bh
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='1' && WeaponName[6]=='2'
mov lpBaseAddressx2,05790h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='1' && WeaponName[6]=='3'
mov lpBaseAddressx2,03508h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='1' && WeaponName[6]=='4'
mov lpBaseAddressx2,09728h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='1' && WeaponName[6]=='5'
mov lpBaseAddressx2,03bach
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='1' && WeaponName[6]=='6'
mov lpBaseAddressx2,04348h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='2' && WeaponName[6]=='1'
mov lpBaseAddressx2,07951h
mov oBufferx2,04ah
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='2' && WeaponName[6]=='2'
mov lpBaseAddressx2,0cf21h
mov oBufferx2,04ah
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='3' && WeaponName[6]=='1'
mov lpBaseAddressx2,09012h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='3' && WeaponName[6]=='2'
mov lpBaseAddressx2,0bbd8h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='3' && WeaponName[6]=='3'
mov lpBaseAddressx2,09cfdh
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='3' && WeaponName[6]=='4'
mov lpBaseAddressx2,08a32h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='3' && WeaponName[6]=='5'
mov lpBaseAddressx2,0c18fh
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='4' && WeaponName[6]=='1'
mov lpBaseAddressx2,01352h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='4' && WeaponName[6]=='2'
mov lpBaseAddressx2,0afb2h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='4' && WeaponName[6]=='3'
mov lpBaseAddressx2,08348h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='4' && WeaponName[6]=='4'
mov lpBaseAddressx2,01da2h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='4' && WeaponName[6]=='5'
mov lpBaseAddressx2,0a2fdh
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='4' && WeaponName[6]=='6'
mov lpBaseAddressx2,0250eh
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='4' && WeaponName[6]=='7'
mov lpBaseAddressx2,04f03h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='4' && WeaponName[6]=='8'
mov lpBaseAddressx2,0a9b3h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='5' && WeaponName[6]=='1'
mov lpBaseAddressx2,073d2h
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='8' && WeaponName[6]=='3'
mov lpBaseAddressx2,04a10h
mov oBufferx2,04ah
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='8' && WeaponName[6]=='4'
mov lpBaseAddressx2,05fd6h
mov oBufferx2,04ah
jmp BeginPatcher
.ENDIF
.IF WeaponName[4]=='B' && WeaponName[5]=='8' && WeaponName[6]=='5'
mov lpBaseAddressx2,0b7b8h
mov oBufferx2,04ah
jmp BeginPatcher
.ENDIF
mov nWeaponNameSize,0
jmp BeginPatcher
;------------------------------------------------------
BeginPatcher:
invoke MessageBox,NULL, addr CopyRightText, addr CopyRightCaption,MB_OK or MB_ICONINFORMATION
invoke CreateProcess,addr CS_AppName1,addr CS_CommandLine,0,0,0,DEBUG_PROCESS+DEBUG_ONLY_THIS_PROCESS,0,0,addr CS_StartupInfo,addr CS_ProcessInfo
test eax,eax
jnz createsucceed
invoke CreateProcess,addr CS_AppName2,addr CS_CommandLine,0,0,0,DEBUG_PROCESS+DEBUG_ONLY_THIS_PROCESS,0,0,addr CS_StartupInfo,addr CS_ProcessInfo
test eax,eax
jz error1
createsucceed:
.while TRUE
invoke WaitForDebugEvent, addr DBEvent, INFINITE
.if DBEvent.dwDebugEventCode==EXIT_PROCESS_DEBUG_EVENT
jmp exit
.elseif DBEvent.dwDebugEventCode==CREATE_PROCESS_DEBUG_EVENT
mov eax,DBEvent.u.CreateProcessInfo.hProcess
mov hProcess,eax
.elseif DBEvent.dwDebugEventCode==LOAD_DLL_DEBUG_EVENT
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize,NULL
; test eax,eax
; jz error3
;------------------------------------------------------------------------------------------------
xor esi,esi
mov esi,nSize
goon: dec esi
mov ebx,offset oBuffer
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz cdevent
cmp esi,0
jnz goon
cmp IsModified,1
jz cdevent
;----------------------------------------------------
mov eax,lpBaseAddress0
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize0,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize0
goon0: dec esi
mov ebx,offset oBuffer0
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon0
mov eax,lpBaseAddress0
invoke WriteProcessMemory,hProcess,eax,addr mBuffer0,nSize0,NULL
test eax,eax
jz error5
;------------------------------------------------------------------------------------------------
mov esi,nWeaponNameSize
.IF esi==3h
jmp Patcher1Weapon
.ELSEIF esi==7h
jmp Patcher2Weapon
.ELSE
jmp PatcherAllWeapon
.ENDIF
Patcher1Weapon:
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddressx
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSizex,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSizex
goonx: dec esi
mov ebx,offset oBufferx
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goonx
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddressx
invoke WriteProcessMemory,hProcess,eax,addr mBufferx,nSizex,NULL
test eax,eax
jz error5
mov IsModified,1
jmp cdevent
Patcher2Weapon:
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddressx1
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSizex1,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSizex1
goonx1: dec esi
mov ebx,offset oBufferx1
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goonx1
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddressx1
invoke WriteProcessMemory,hProcess,eax,addr mBufferx1,nSizex1,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddressx2
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSizex2,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSizex2
goonx2: dec esi
mov ebx,offset oBufferx2
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goonx2
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddressx2
invoke WriteProcessMemory,hProcess,eax,addr mBufferx2,nSizex2,NULL
test eax,eax
jz error5
mov IsModified,1
jmp cdevent
PatcherAllWeapon:
;------------------------------------------------------------------------------------------------
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress1
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize1,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize1
goon1: dec esi
mov ebx,offset oBuffer1
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon1
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress1
invoke WriteProcessMemory,hProcess,eax,addr mBuffer1,nSize1,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress2
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize2,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize2
goon2: dec esi
mov ebx,offset oBuffer2
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon2
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress2
invoke WriteProcessMemory,hProcess,eax,addr mBuffer2,nSize2,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress3
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize3,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize3
goon3: dec esi
mov ebx,offset oBuffer3
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon3
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress3
invoke WriteProcessMemory,hProcess,eax,addr mBuffer3,nSize3,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress4
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize4,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize4
goon4: dec esi
mov ebx,offset oBuffer4
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon4
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress4
invoke WriteProcessMemory,hProcess,eax,addr mBuffer4,nSize4,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress5
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize5,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize5
goon5: dec esi
mov ebx,offset oBuffer5
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress5
invoke WriteProcessMemory,hProcess,eax,addr mBuffer5,nSize5,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress6
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize6,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize6
goon6: dec esi
mov ebx,offset oBuffer6
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon6
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress6
invoke WriteProcessMemory,hProcess,eax,addr mBuffer6,nSize6,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress7
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize7,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize7
goon7: dec esi
mov ebx,offset oBuffer7
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon7
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress7
invoke WriteProcessMemory,hProcess,eax,addr mBuffer7,nSize7,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress8
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize8,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize8
goon8: dec esi
mov ebx,offset oBuffer8
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon8
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress8
invoke WriteProcessMemory,hProcess,eax,addr mBuffer8,nSize8,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress9
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize9,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize9
goon9: dec esi
mov ebx,offset oBuffer9
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon9
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress9
invoke WriteProcessMemory,hProcess,eax,addr mBuffer9,nSize9,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress10
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize10,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize10
goon10: dec esi
mov ebx,offset oBuffer10
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon10
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress10
invoke WriteProcessMemory,hProcess,eax,addr mBuffer10,nSize10,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress11
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize11,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize11
goon11: dec esi
mov ebx,offset oBuffer11
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon11
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress11
invoke WriteProcessMemory,hProcess,eax,addr mBuffer11,nSize11,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress12
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize12,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize12
goon12: dec esi
mov ebx,offset oBuffer12
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon12
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress12
invoke WriteProcessMemory,hProcess,eax,addr mBuffer12,nSize12,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress13
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize13,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize13
goon13: dec esi
mov ebx,offset oBuffer13
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon13
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress13
invoke WriteProcessMemory,hProcess,eax,addr mBuffer13,nSize13,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress14
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize14,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize14
goon14: dec esi
mov ebx,offset oBuffer14
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon14
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress14
invoke WriteProcessMemory,hProcess,eax,addr mBuffer14,nSize14,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress15
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize15,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize15
goon15: dec esi
mov ebx,offset oBuffer15
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon15
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress15
invoke WriteProcessMemory,hProcess,eax,addr mBuffer15,nSize15,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress16
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize16,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize16
goon16: dec esi
mov ebx,offset oBuffer16
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon16
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress16
invoke WriteProcessMemory,hProcess,eax,addr mBuffer16,nSize16,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress17
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize17,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize17
goon17: dec esi
mov ebx,offset oBuffer17
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon17
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress17
invoke WriteProcessMemory,hProcess,eax,addr mBuffer17,nSize17,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress18
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize18,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize18
goon18: dec esi
mov ebx,offset oBuffer18
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon18
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress18
invoke WriteProcessMemory,hProcess,eax,addr mBuffer18,nSize18,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress19
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize19,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize19
goon19: dec esi
mov ebx,offset oBuffer19
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon19
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress19
invoke WriteProcessMemory,hProcess,eax,addr mBuffer19,nSize19,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress20
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize20,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize20
goon20: dec esi
mov ebx,offset oBuffer20
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon20
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress20
invoke WriteProcessMemory,hProcess,eax,addr mBuffer20,nSize20,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress21
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize21,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize21
goon21: dec esi
mov ebx,offset oBuffer21
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon21
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress21
invoke WriteProcessMemory,hProcess,eax,addr mBuffer21,nSize21,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress22
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize22,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize22
goon22: dec esi
mov ebx,offset oBuffer22
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon22
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress22
invoke WriteProcessMemory,hProcess,eax,addr mBuffer22,nSize22,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress23
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize23,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize23
goon23: dec esi
mov ebx,offset oBuffer23
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon23
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress23
invoke WriteProcessMemory,hProcess,eax,addr mBuffer23,nSize23,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress24
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize24,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize24
goon24: dec esi
mov ebx,offset oBuffer24
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon24
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress24
invoke WriteProcessMemory,hProcess,eax,addr mBuffer24,nSize24,NULL
test eax,eax
jz error5
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress25
invoke ReadProcessMemory,hProcess,eax,addr tBuffer,nSize25,NULL
test eax,eax
jz error3
xor esi,esi
mov esi,nSize25
goon25: dec esi
mov ebx,offset oBuffer25
mov al,byte ptr [ebx+esi]
mov ebx,offset tBuffer
mov dl,byte ptr [ebx+esi]
cmp al,dl
jnz error4
cmp esi,0
jnz goon25
mov eax,DBEvent.u.LoadDll.lpBaseOfDll
add eax,lpBaseAddress25
invoke WriteProcessMemory,hProcess,eax,addr mBuffer25,nSize25,NULL
test eax,eax
jz error5
mov IsModified,1
; invoke MessageBox,NULL, addr SecceedText, addr SecceedCaption,MB_OK or MB_ICONINFORMATION
.elseif DBEvent.dwDebugEventCode==EXCEPTION_DEBUG_EVENT
.if DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT
invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE
.continue
.endif
.endif
cdevent:
invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED
.endw error1:
invoke MessageBox,NULL, addr Error1Text, addr Error1Caption,MB_OK or MB_ICONERROR
invoke TerminateProcess,CS_ProcessInfo.hProcess,NULL
jmp exit
error2:
invoke MessageBox,NULL, addr Error2Text, addr Error2Caption,MB_OK or MB_ICONERROR
invoke TerminateProcess,CS_ProcessInfo.hProcess,NULL
jmp exit
error3:
invoke MessageBox,NULL, addr Error3Text, addr Error3Caption,MB_OK or MB_ICONERROR
invoke TerminateProcess,CS_ProcessInfo.hProcess,NULL
jmp exit
error4:
invoke MessageBox,NULL, addr Error4Text, addr Error4Caption,MB_OK or MB_ICONERROR
invoke TerminateProcess,CS_ProcessInfo.hProcess,NULL
jmp exit
error5:
invoke MessageBox,NULL, addr Error5Text, addr Error5Caption,MB_OK or MB_ICONERROR
invoke TerminateProcess,CS_ProcessInfo.hProcess,NULL
jmp exit
exit:
invoke CloseHandle,CS_ProcessInfo.hProcess
invoke CloseHandle,CS_ProcessInfo.hThread
invoke ExitProcess,NULL
; ????????????????????????????????????
end start
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!