共有回帖数 0 个
-
最近看到一个关于"进程保护"的问题,无聊就研究了一下,总共得出了2种比较可行的方法,第一种就是进程隐藏,第2种就是进程守护.代码发出来,希望大家可以互相学习......
进程守护:http://hi.baidu.com/ciw%5Fblue/blog/item/edd5ff457062603b869473a1.html
进程隐藏:http://hi.baidu.com/ciw%5Fblue/blog/item/bcb8b0c4ad66e9cf38db49f3.html
进程隐藏的代码:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.data
szLoadLibrary db 'LoadLibraryA',0
szGetProcAddress db 'GetProcAddress',0
szGetModuleHandle db 'GetModuleHandleA',0
szProcessWndName db 'Program Manager',0
szKernel db 'Kernel32.dll',0
.data?
dwProcessID dd ?
hProcess dd ?
lpLoadLibrary dd ?
lpGetProcAddress dd ?
lpGetModuleHandle dd ?
hModule dd ?
lpRemoteCode dd ?
.code
REMOTE_CODE_START equ this byte
_lpLoadLibrary dd ?
_lpGetProcAddress dd ?
_lpGetModuleHandle dd ?
_lpMessageBox dd ?
_hInstance dd ?
_hUserModule dd ?
_szMessageBox db 'MessageBoxA',0
_szUserDLL db 'User32.dll',0
_szMsgCaption db '远程成功',0
_szMsgText db '请打开Windows任务管理器,看看!',0
;
_RemoteThread proc uses ebx edi esi lParam
call @F
@@:
pop ebx
sub ebx,offset @B
push NULL
call [ebx + _lpGetModuleHandle]
mov [ebx + _hInstance],eax
lea eax, [ebx + offset _szUserDLL]
push eax
call [ebx + _lpLoadLibrary]
.if eax
mov [ebx + _hUserModule], eax
lea eax, [ebx + offset _szMessageBox]
push eax
mov eax, [ebx + _hUserModule]
push eax
call [ebx + _lpGetProcAddress]
.if eax
mov [ebx + _lpMessageBox], eax
lea edx, [ebx + offset _szMsgText]
lea ecx, [ebx + offset _szMsgCaption]
push MB_OK
push ecx
push edx
push NULL
call [ebx + _lpMessageBox]
.endif
.endif
ret
_RemoteThread endp
REMOTE_CODE_END equ this byte
REMOTE_CODE_LENGTH equ offset REMOTE_CODE_END - offset REMOTE_CODE_START
start:
invoke GetModuleHandle, offset szKernel
mov hModule, eax
invoke GetProcAddress, hModule, offset szLoadLibrary
mov lpLoadLibrary, eax
invoke GetProcAddress, hModule, offset szGetProcAddress
mov lpGetProcAddress, eax
invoke GetProcAddress, hModule, offset szGetModuleHandle
mov lpGetModuleHandle, eax
invoke FindWindow, NULL, offset szProcessWndName ;获取窗口句柄
invoke GetWindowThreadProcessId, eax, offset dwProcessID ;获取程序 ID
invoke OpenProcess, PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,
FALSE, dwProcessID
.if eax
mov hProcess, eax
invoke VirtualAllocEx, hProcess, NULL, REMOTE_CODE_LENGTH, MEM_COMMIT, PAGE_EXECUTE_READWRITE
.if eax
mov lpRemoteCode, eax
invoke WriteProcessMemory, hProcess, lpRemoteCode, offset REMOTE_CODE_START,
REMOTE_CODE_LENGTH , NULL
invoke WriteProcessMemory, hProcess,lpRemoteCode, offset lpLoadLibrary,
sizeof dword * 3, NULL
mov eax, lpRemoteCode
add eax, _RemoteThread - offset REMOTE_CODE_START
invoke CreateRemoteThread, hProcess, NULL, 0, eax, 0, NULL, 0
invoke CloseHandle, eax
.endif
.endif
invoke CloseHandle, hProcess
invoke ExitProcess, 0
end start
楼主 2016-01-15 18:27 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知