为了避免自己的某个dll模块被别人检测出来,有时候希望在自己加载一个dll之后,或者将dll注入到他人进程之后避免被检查出来。这就需要想办法抹掉这个dll的模块信息,使得Toolhelp、psapi等枚举模块的API无法枚举它。
我们可以先简单看看Windows枚举进程内模块的办法吧:
首先是BOOL EnumProcessModules( HANDLE hProcess, HMODULE* lphModule, DWORD cb, LPDWORD lpcbNeeded);
EnumProcessModules实际调用EnumProcessModulesInternal进行枚举。下面是vista下psapi的代码片断:
.text:514024B8 push ebx
.text:514024B9 push 18h
.text:514024BB lea eax, [ebp+stProcessBasicInfo]
.text:514024BE push eax
.text:514024BF push ebx ;ebx=0
.text:514024C0 push [ebp+hProcess]
.text:514024C3 call ds:__imp__NtQueryInformationProcess@20 ; NtQueryInformationProcess(x,x,x,x,x)
.text:514024C9 cmp eax, ebx
.text:514024CB jge short loc_514024E0
调用NtQueryInformationProcess获得ProcessBasicInformation,在PROCESS_BASIC_INFORMATION结构中取得PEB地址。然后读取指定进程PEB中的数据
text:514024E0 loc_514024E0: ; CODE XREF: EnumProcessModulesInternal(x,x,x,x,x)+24j
.text:514024E0 mov eax, [ebp+stProcessBasicInfo.PebBaseAddress]
.text:514024E3 cmp eax, ebx
.text:514024E5 jnz short loc_514024EE
.text:514024E7 push 8000000Dh
.text:514024EC jmp short loc_514024CE
.text:514024EE ; —————————————————————————
.text:514024EE
.text:514024EE loc_514024EE: ; CODE XREF: EnumProcessModulesInternal(x,x,x,x,x)+3Ej
.text:514024EE push ebx ; lpNumberOfBytesRead
.text:514024EF push 4 ; nSize
.text:514024F1 lea ecx, [ebp+Ldr]
.text:514024F4 push ecx ; lpBuffer
.text:514024F5 add eax, 0Ch
.text:514024F8 push eax ; lpBaseAddress
.text:514024F9 push [ebp+hProcess] ; hProcess
.text:514024FC mov edi, ds:__imp__ReadProcessMemory@20 ; ReadProcessMemory(x,x,x,x,x)
.text:51402502 call edi ; ReadProcessMemory(x,x,x,x,x) ; ReadProcessMemory(x,x,x,x,x)
这里读取的是PEB地址+0C处的四个字节。
通过WinDbg我们可以看看nt!_PEB的结构
0: kd> dt nt!_PEB
+0×000 InheritedAddressSpace : UChar
+0×001 ReadImageFileExecOptions : UChar
+0×002 BeingDebugged : UChar
+0×003 SpareBool : UChar
+0×004 Mutant : Ptr32 Void
+0×008 ImageBaseAddress : Ptr32 Void
+0x00c Ldr : Ptr32 _PEB_LDR_DATA
+0×010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS
……
+0C处是一个_PEB_LDR_DATA结构指针,里面包含了和LDR相关的一些数据,进程的模块链表就保存在Ldr中。下面是_PEB_LDR_DATA的结构:
0: kd> dt nt!_PEB_LDR_DATA
+0×000 Length : Uint4B
+0×004 Initialized : UChar
+0×008 SsHandle : Ptr32 Void
+0x00c InLoadOrderModuleList : _LIST_ENTRY
+0×014 InMemoryOrderModuleList : _LIST_ENTRY
+0x01c InInitializationOrderModuleList : _LIST_ENTRY
+0×024 EntryInProgress : Ptr32 Void
其中,InLoadOrderModuleList、InMemoryOrderModuleList
(来自:码农源库,http://www.vcclass.net/wordpress/?p=337)
分享到:
相关推荐
标题 "隐藏进程DLL" 涉及到的是在Windows操作系统中如何通过动态链接库(DLL)来实现进程的隐藏技术,这种技术常用于系统优化、安全防护或恶意软件中。DLL是包含可由多个程序同时使用的代码和数据的库文件。在本案例...
5. **lst**:标签中的"lst"可能指的是列表或列表操作,可能在处理DLL模块的参数或返回值时使用,例如,将多个数据项组合成一个列表传递给DLL,或者从DLL返回的结果分解成多个部分。 6. **安全与反调试**:为了...
通过PEB,可以获取到Kernel32.dll模块的基地址,这是Windows API的核心库,其中包含了大量系统级函数,如处理进程和内存管理的函数。 2. **子程序_获取模块地址**:这个子程序用于查找特定模块在进程内存空间中的...
"隐藏所有进程模块"是指在编程中实现一个功能,使得指定的进程或程序的所有模块(如DLL动态链接库)在系统中变得不可见,这通常涉及到系统级的操作和进程管理。 在易语言中实现这一功能,你需要了解以下几个关键...
PEB模块隐藏是通过篡改PEB中的InInitializationOrderModuleList和InLoadOrderModuleList等链表,将恶意模块从进程的模块列表中移除,达到隐藏的目的。这种技术需要对Windows内核有深入理解,并且通常需要编写驱动...
在实现模块隐藏时,我们可能会先使用`VirtualAlloc`在目标进程中分配一块内存,然后将模块的数据写入这段内存,以避免模块出现在正常的模块列表中。 **2. `WriteProcessMemory`函数**:此函数允许一个进程将数据...
很多被Tx保护的进程被注入DLL后可以在进程里检测到,我们要做的就是注入完成把DLL文件给隐藏掉 从而实现躲避检测的效果,具体可以自己实践一下, 模块功能由 某论坛VIP模块中反编译的一部分功能,非常实用。...
在Windows中,模块通常指的是进程地址空间中的代码和数据的集合,这可能包括可执行文件、动态链接库(DLL)或者其他类型的加载代码。DLL是一种共享库机制,它允许多个进程共享同一段代码和数据,从而节省内存并简化...
5)进程中dll模块隐藏 6)更绝的隐藏进程中的dll模块,绕过IceSword的检测 7)端口隐藏 7。ring0中调用ring3程序 1) apc方式 2) deviceiocontrol 方式 8。进程线程监控 1)监控进程创建 2)杀线程 3)...
2. **模块隐藏**:模块是可执行文件中的一部分,如DLL(动态链接库)。隐藏模块通常涉及在进程内存中动态加载和执行代码,不通过常规的加载方式。这可以防止反病毒软件通过检查进程模块列表来发现它们。 3. **API...
此工具对于手工查杀病毒和木马非常有帮助,特别是当常规的安全软件无法清除那些隐藏在其他进程中的恶意DLL时。但需要注意的是,误操作可能导致正常程序的功能受到影响,因此在使用这类工具时必须谨慎。 总结来说,...
但同时,它也被滥用在恶意软件中,例如键盘记录器、病毒和木马,通过隐藏自身并控制目标进程来躲避检测。 要防止DLL注入,可以采取以下措施: 1. 使用沙盒环境隔离敏感进程。 2. 对系统调用进行监控,及时发现异常...
5)进程中dll模块隐藏 6)更绝的隐藏进程中的dll模块,绕过IceSword的检测 7)端口隐藏 7。ring0中调用ring3程序 1) apc方式 2) deviceiocontrol 方式 8。进程线程监控 1)监控进程创建 2)杀线程 3)...
EPROCESS结构体在Windows内核中代表一个进程,而模块则是进程执行时加载的动态链接库(DLL)或其他可执行文件。 EPROCESS结构体是Windows内核中的核心数据结构之一,它包含了关于进程的各种信息,如进程ID、安全上...
标题中的“隐藏dll模块”是指一种技术,它使得DLL在运行时不会显示在进程模块列表中,增加了程序的安全性和隐蔽性。这种技术通常用于防止恶意软件分析或逆向工程,因为隐藏的DLL不易被发现和跟踪。在汇编语言中实现...
很多被Tx保护的进程被注入DLL后可以在进程里检测到,我们要做的就是注入完成把DLL文件给隐藏掉 从而实现躲避检测的效果,具体可以自己实践一下, 模块功能由 某论坛VIP模块中反编译的一部分功能,非常实用。...
2. **命名空间隐藏**:恶意DLL可能会修改自己的模块名称,使其在系统调用中不易被发现。这种方法需要对PE(Portable Executable)文件结构有深入了解。 3. **权限提升**:恶意DLL可能试图获取更高的系统权限,以...
描述中的“谁都检测不了”暗示了这个隐藏模块可能采用了高级的隐藏技术,如代码混淆、进程注入、自定义加密解密算法等,使得常规的病毒扫描器和安全分析工具难以识别其真实意图。这在恶意软件开发中非常常见,尤其是...
│ │ 5)进程中dll模块隐藏.doc │ │ │ ├─6)更绝的隐藏进程中的dll模块,绕过IceSword的检测 │ │ 6)更绝的隐藏进程中的dll模块,绕过IceSword的检测.doc │ │ │ └─7)端口隐藏 │ 7)端口隐藏....