这是别人写的代码,作者是谁我不知道,我在Q群得到的,可是我没见过My_Code_Start equ this byte这种格式开头结尾的程序片段,子程序不是这样写的吧,反正是我没见过,不懂,所以我想问一下这两个程序片段该怎么用,还有在这两个片段之前是否应该先自己创建进程?
start:
mov ebp, esp
invoke GetModuleHandle,NULL ;获取自身模块句柄
mov ebx,eax
invoke GetModuleFileName,ebx,ebp,MAX_PATH ;获取自身路径
invoke CloseHandle,4 ;关闭exe文件本身对应的IMAGE的句柄[硬编码为4]
push 0 ;ExitProcess的参数
push 0
push ebp ;DeleteFile的参数
mov eax,ExitProcess
inc eax
inc eax
mov eax,dword ptr[eax]
push dword ptr[eax] ;push ExitProcess
push ebx ;UnmapViewOfFile的参数
mov eax,DeleteFile
inc eax
inc eax
mov eax,dword ptr[eax]
push dword ptr[eax] ;push DeleteFile
push ebx ;FreeLibrary的参数
mov eax,UnmapViewOfFile
inc eax
inc eax
mov eax,dword ptr[eax]
push dword ptr[eax] ;push UnmapViewOfFile
push FreeLibrary ;FreeLibrary不用改因为调用它时代码节还可以读
ret
end start
***************************************************************
***************************************************************
My_Code_Start equ this byte
dwProtectID dd ? ;要保护进程的ID
szJmp1 db 0e9h
dwNewText dd ? ;修改API后的内容
szOldText1 db 5 dup(0) ;修改API前的内容
dwMsgBoxAddr dd 77D5058Ah ;MessageBox 地址
dwTerminateProcessAddr dd 7C801E16h ;TerminateProcess 地址
dwWriteProcMemory dd 7C80220Fh ;WriteProcessMemory 地址
dwOpenProcess dd 7C8309E1h ;OpenProcess 地址
dwGetForegroundWndAddr dd 77D1BE4Bh ;GetForegroundWindow 地址
dwCloseHandle dd 7C809B47h ;CloseHandle 地址
dwMyID dd ? ;要保护进程的ID
hMyProcess dd ? ;要保护进程的句柄
dwTerminateID dd ? ;要关闭程序的ID
hTerminateProcess dd ? ;要关闭程序的句柄
szMsgText db 'CIW_BLUE创建的进程,请不要关闭!',0
szMsgCaption db '错误提示',0
_MyEntry:
_MyOpenProcess proc
call @F
@@:
pop ebx
sub ebx, offset @B
;************************************************************
mov eax, dword ptr [esp - 010h]
mov [ebx + dwTerminateID], eax ;即将被关闭的程序的ID
.if eax == [ebx + dwProtectID] ;是不是要保护的进程
push MB_ICONERROR
lea eax, [ebx + szMsgCaption]
push eax
lea eax, [ebx + szMsgText]
push eax
call [ebx + dwGetForegroundWndAddr]
push eax
call [ebx + dwMsgBoxAddr] ;弹出对话框
ret
.endif
assume fs:nothing
mov eax, fs:[24]
mov eax, ds:[eax + 32]
mov [ebx + dwMyID], eax ;获取远程进程的ID
push [ebx + dwMyID ]
push TRUE
push PROCESS_ALL_ACCESS
call [ebx + dwOpenProcess]
mov [ebx + hMyProcess], eax ;打开进程
push NULL
push 5
lea eax, [ebx + szOldText1]
push eax
push [ebx + dwTerminateProcessAddr]
push [ebx + hMyProcess]
call [ebx + dwWriteProcMemory] ;写入 TerminateProcess 原来的内容
push [ebx + dwTerminateID]
push TRUE
push PROCESS_ALL_ACCESS
call [ebx + dwOpenProcess] ;打开要关闭的进程
mov [ebx + hTerminateProcess], eax
push 0
push [ebx + hTerminateProcess]
call [ebx + dwTerminateProcessAddr] ;关闭进程
push [ebx + hTerminateProcess]
call [ebx + dwCloseHandle] ;关闭进程句柄
ret
_MyOpenProcess endp
My_Code_End equ this byte
[课程]FART 脱壳王!加量不加价!FART作者讲授!