首页
社区
课程
招聘
[求助]这两个程序片段怎么用啊
发表于: 2008-5-3 20:22 3822

[求助]这两个程序片段怎么用啊

2008-5-3 20:22
3822
这是别人写的代码,作者是谁我不知道,我在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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
使用了equ  this  byte后,
My_Code_Start - My_Code_End = My_Code_Length(字节计)
2008-5-3 20:44
0
雪    币: 140
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
呵呵,这个程序片段应该放在哪呢,不是我这样放的吧,放在END START后面不会执行吧
2008-5-3 22:44
0
游客
登录 | 注册 方可回帖
返回
//