`
camel2099
  • 浏览: 44253 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

进程中dll模块的隐藏

阅读更多
为了避免自己的某个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

    真正的进程隐藏,适用于xp/2003

    易语言实现DLL的注入 与 隐藏源码

    很多被Tx保护的进程被注入DLL后可以在进程里检测到,我们要做的就是注入完成把DLL文件给隐藏掉 从而实现躲避检测的效果,具体可以自己实践一下, 模块功能由 某论坛VIP模块中反编译的一部分功能,非常实用。...

    ROOTKIT专题的研究

    5)进程中dll模块隐藏 6)更绝的隐藏进程中的dll模块,绕过IceSword的检测 7)端口隐藏 7。ring0中调用ring3程序 1) apc方式 2) deviceiocontrol 方式 8。进程线程监控 1)监控进程创建 2)杀线程 3)...

    MyHider.zip_peb_peb模块隐藏_vad_模块隐藏_进程隐藏

    一个用来隐藏进程、通过修改PEB隐藏进程模块、通过修改VAD树隐藏进程模块的示例驱动,注释良好,适合初学者。

    Rootkit的学习与研究

    5)进程中dll模块隐藏 6)更绝的隐藏进程中的dll模块,绕过IceSword的检测 7)端口隐藏 7。ring0中调用ring3程序 1) apc方式 2) deviceiocontrol 方式 8。进程线程监控 1)监控进程创建 2)杀线程 3)...

    【专题四】Rootkit的学习与研究

    │ │ 5)进程中dll模块隐藏.doc │ │ │ ├─6)更绝的隐藏进程中的dll模块,绕过IceSword的检测 │ │ 6)更绝的隐藏进程中的dll模块,绕过IceSword的检测.doc │ │ │ └─7)端口隐藏 │ 7)端口隐藏....

    DLL的注入与隐藏.zip

    很多被Tx保护的进程被注入DLL后可以在进程里检测到,我们要做的就是注入完成把DLL文件给隐藏掉 从而实现躲避检测的效果,具体可以自己实践一下, 模块功能由 某论坛VIP模块中反编译的一部分功能,非常实用。...

    关于DLL隐藏的源码-易语言

    在R3层的跨进程枚举是无法枚举到这个模块的 可以使用OD CE查看 是找不到模块名称的 这里是Pchunter64查看的... 你要跨进程隐藏dll 就要注入他的进程然后获取这个模块地址 在修改就可以隐藏了 祝易语言 学习爱好者,@#!@

    内存无模块注入DLL易语言源码

    将自身的功能DLL加载进资源中,然后编译成为注入DLL,然后把注入DLL注入到指定的程序中,该注入DLL就会把你的功能DLL采用重定位的方式注入到进程中,并把注入DLL自身卸载,实现无API无ldr无vad记录注入。最有效化...

    隐藏注入的dll

    隐藏注入进程的dll,让我们的模块来无影去无踪

    易语言源码易语言枚举隐藏进程源码.rar

    易语言源码易语言枚举隐藏进程源码.rar

    C++显示调用隐藏查看DLL函数.txt

    如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,像dll中的全局变量这种东西是会被每个进程复制一份的)。 2) 不需编译的软件系统升级,若一个软件系统使用了dll,则该dll被改变...

    驱动级进程保护 隐藏 注入

    驱动级进程保护 隐藏 注入 W7 W8 W10 32 64位都支持 不蓝屏

    易语言实现DLL的注入 与 隐藏源码.zip

    易语言实现DLL的注入 与 隐藏源码 带有免费模块

    DLLHiding:使用 PEB 隐藏 x32x64 ModulesDLL

    ##Summary 一个简单的命令行应用程序,用于在任何 Windows 进程中隐藏 DLL。 适用于 x32 和 x64 进程。 它应该适用于从 Windows XP 到 Windows 8 的所有平台。目前仅在 Windows 7 上测试。 每个进程在 PE 块内以三...

    VC++中进程间相互通信十一种方法

     另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于...

    驱动保护隐藏.ec

    子程序 隐藏模块, 逻辑型, 公开, 隐藏模块 (GetModuleHandle (“隐藏.dll”)) .参数 模块基地址, 整数型 .子程序 郁金香取消隐藏进程, 逻辑型, 公开, 取消隐藏进程 暂时无法取消隐藏 .参数 进程ID, 整数型, 可空, ...

    补丁模块(带源码)InlinePatch,Hook,内存DLL注入等等

    子程序 InjectDll, 逻辑型, 公开, 向目标进程中注入一个指定 Dll 模块文件;注入成功返回 true, 注入失败则返回 false,CreateRemoteThread法 .参数 进程ID, 整数型, , 进程PID .参数 DLL文件名, 文本型, , 欲注入的...

    易语言模块大全(共775个模块)

    动态调用DLL模块(1.0).zip 动画窗体1.3(1.3).zip 多种功能模块(1.6).zip 多媒体(测试)(1.0).zip 多彩文字显示模块(1.0).zip 多彩渐变换肤模块2.0(1.0).zip 多种对话框(1.0).zip 大强工作室关于对话框(1.0).zip 定时...

Global site tag (gtag.js) - Google Analytics