进程中dll模块的隐藏

合集下载

dll加载原理

dll加载原理

dll加载原理DLL加载原理概述•DLL(动态链接库)是一种可执行文件格式,用于存储和共享程序代码和数据。

•DLL加载是将DLL文件加载到内存并解析其导出函数的过程。

DLL的分类•内核模式DLL:运行在操作系统内核空间中,提供给操作系统使用。

•用户模式DLL:运行在应用程序进程的用户空间中,为应用程序提供功能支持。

DLL的加载方式1.隐式加载:在应用程序启动时由操作系统自动加载所需的DLL文件。

–应用程序代码中使用函数,操作系统自动在加载应用程序的同时加载其依赖的DLL。

–应用程序代码需要将DLL的路径告知操作系统,操作系统根据路径找到DLL并加载。

2.显式加载:在应用程序运行时手动加载所需的DLL文件。

–应用程序通过调用加载函数(如LoadLibrary函数)手动加载DLL。

–调用GetProcAdress函数获取DLL中函数的入口地址,从而调用DLL中的函数。

DLL的加载过程1.读取DLL文件:–操作系统通过文件系统读取DLL文件的内容。

2.根据DLL文件的导入表(Import Table)解析DLL的依赖:–导入表记录了DLL所依赖的其他DLL,以及导出函数的名称和地址。

3.加载DLL依赖的其他DLL:–递归地加载DLL所依赖的其他DLL文件。

4.解析DLL导出函数:–根据导入表中记录的函数名称,找到导出函数的入口地址。

5.将DLL文件映射到进程空间:–将DLL文件映射到进程的虚拟内存空间中,以便能够访问DLL中的代码和数据。

6.更新进程的导入表:–更新进程的导入表,将DLL中导出函数的地址填入相应的入口地址。

DLL的卸载•当不再需要某个DLL时,可以将其从内存中卸载。

•DLL卸载的条件通常是没有其他模块依赖该DLL,或者由操作系统决定。

总结•DLL加载是将DLL文件加载到内存并解析导出函数的过程。

•DLL可以通过隐式加载或显式加载的方式加载。

•DLL的加载过程包括读取DLL文件、解析依赖、加载其他DLL、解析导出函数等步骤。

vs工程运行时隐藏窗口方法

vs工程运行时隐藏窗口方法

vs工程运行时隐藏窗口方法在Visual Studio中,当我们运行一个程序时,有时候我们希望程序在后台运行,而不显示窗口。

这在一些需要静默运行的场景下非常有用,比如后台任务或者系统服务。

下面我将从多个角度来介绍在Visual Studio中实现隐藏窗口的方法。

1. 使用Windows Forms应用程序,如果你的程序是基于Windows Forms的,你可以在Main方法中设置Application.Run时传入一个隐藏的窗体,这样程序就会在后台运行而不显示窗口。

csharp.Application.Run(new HiddenForm());2. 使用Console应用程序,对于控制台应用程序,你可以在Main方法中调用Win32 API来隐藏控制台窗口。

csharp.class Program.{。

[DllImport("kernel32.dll")]static extern IntPtr GetConsoleWindow();[DllImport("user32.dll")]static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);const int SW_HIDE = 0;static void Main()。

{。

IntPtr hWnd = GetConsoleWindow();if (hWnd != IntPtr.Zero)。

{。

ShowWindow(hWnd, SW_HIDE);}。

// 其他代码。

}。

}。

3. 使用WPF应用程序,对于基于WPF的应用程序,你可以在App.xaml.cs中重写OnStartup方法,在启动时隐藏主窗口。

csharp.protected override void OnStartup(StartupEventArgs e)。

{。

base.OnStartup(e);MainWindow mainWindow = new MainWindow();mainWindow.Hide();// 其他代码。

模块隐藏三种方法

模块隐藏三种方法

摘要(转自网络):一、从PEB的Ldr链中消失引用内容lkd> dt _PEB 7ffdc000 //当前PEB的地址nt!_PEB...+0x00c Ldr : 0x001a1e90_PEB_LDR_DATA //这里指向Ldr结构lkd> dt _PEB_LDR_DATA 0x001a1e90 //这个结构里有三个链表的表头nt!_PEB_LDR_DATA+0x000 Length : 0x28+0x004 Initialized : 0x1 ''+0x008 SsHandle : (null)+0x00c InLoadOrderModuleList : _LIST_ENTRY [ 0x1a1ec0 - 0x1a34f8 ]+0x014 InMemoryOrderModuleList : _LIST_ENTRY [ 0x1a1ec8 -0x1a3500 ]+0x01c InInitializationOrderModuleList : _LIST_ENTRY [ 0x1a1f28 - 0x1a3508 ]+0x024 EntryInProgress : (null)这里看到有三个链表,其实三个链表的内容是一样的,但是链表的顺序不一样,分别按加载顺序、内存顺序、初始化顺序排列。

每一个DLL由一个LDR_DATA_TABLE_ENTRY结构描述,但是第一个结构被链入了三个链表。

取一个来看看:引用内容lkd> dt _LDR_DATA_TABLE_ENTRY 0x1a34f8nt!_LDR_DATA_TABLE_ENTRY+0x000 InLoadOrderLinks : _LIST_ENTRY [ 0x1a1e9c - 0x1a3450 ]+0x008 InMemoryOrderLinks : _LIST_ENTRY [ 0x1a1ea4 - 0x1a3458 ]+0x010 InInitializationOrderLinks : _LIST_ENTRY [ 0x1a1eac -0x1a3460 ]+0x018 DllBase : 0x20000000+0x01c EntryPoint : (null)+0x020 SizeOfImage : 0x549000+0x024 FullDllName : _UNICODE_STRING"C:\WINDOWS\system32\xpsp2res.dll"+0x02c BaseDllName : _UNICODE_STRING"xpsp2res.dll"......//省略部分内容随便取一个链表进行遍历,根据DllBase找到自己的DLL之后,从三个链中RemoveEntryList就可以了,这样所有使用PEB->Ldr结构来枚举DLL链表的就无法找到了。

在Delphi中隐藏程序进程的方法

在Delphi中隐藏程序进程的方法

在Delphi中隐藏程序进程方法[1]主要需要解决两个问题,即隐藏窗口和设定热键。

一. 隐藏窗口通过API函数GETACTIVEWINDOW获取当前窗口;函数ShowWindow(HWND,nCmdShow)的参数nCmdShow取SW_HIDE时将之隐藏,取SW_SHOW时将之显示。

例如:showwindow(getactivewindow,sw_hide)。

隐藏好窗体后,须记住窗体句柄以便恢复。

二. 键盘监控为了实现键盘监控须用到钩子。

以下是程序的源文件:一、创建一个动态链接库unit HKHide; //链接库中的Unit文件interfaceusesWindows, Messages, sysutils;varhNextHookHide: HHook;HideSaveExit: Pointer;hbefore:longint;function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;function EnableHideHook: BOOL; export;function DisableHideHook: BOOL; export;procedure HideHookExit; far;implementationfunction KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;const _KeyPressMask = $80000000;varf:textfile;temp:string;beginResult := 0;If iCode < 0 ThenbeginResult := CallNextHookEx(hNextHookHide, iCode, wParam, lParam); Exit;end;//侦测 Ctrl + Alt + F12 组合键if ((lParam and _KeyPressMask) = 0) //按下时生效and (GetKeyState(vk_Control) < 0)and (getkeystate(vk_menu)<0)and (wParam = vk_F12) thenbeginResult := 1;//文件不存在则创建if not fileexists('c:\test.txt') thenbeginassignfile(f,'c:\test.txt');rewrite(f);writeln(f,0);closefile(f);endelsebeginassignfile(f,'c:\test.txt');reset(f);readln(f,temp);hbefore:=strtoint(temp);beginhbefore:=getactivewindow;temp:=inttostr(hbefore);rewrite(f);writeln(f,temp);closefile(f);ShowWindow(hbefore, SW_HIDE);end;end; //end if FileExists(....)endelse beginshowwindow(hbefore,SW_SHOW);rewrite(f);writeln(f,0);closefile(f);end;//end if Ctrl+Alt+F12按键end;function EnableHideHook: BOOL; export;beginResult := False;if hNextHookHide <> 0 then Exit;// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下 // 来, 免得 HOOK 呼叫链结断掉hNextHookHide := SetWindowsHookEx(WH_KEYBOARD,KeyboardHookHandler,HInstance,0);Result := hNextHookHide <> 0;end;function DisableHideHook: BOOL; export;beginif hNextHookHide <> 0 thenbeginResult:=True;UnhookWindowshookEx(hNextHookHide); // 解除 Keyboard Hook hNextHookHide:=0;endelseResult:=False;end;procedure HideHookExit;begin// 如果忘了解除 HOOK, 自动代理解除的动作if hNextHookHide <> 0 then DisableHideHook;ExitProc := HideSaveExit;end;end.library HKPHide; //动态链接库工程文件usesHKHide in HKHide.pas;exportsEnableHideHook,DisableHideHook;beginhNextHookHide := 0;hbefore:=0;HideSaveExit := ExitProc;ExitProc := @HideHookExit;end.//文件制作好后先Build All编译成HKPHide.dll。

电脑进程隐藏方法

电脑进程隐藏方法

电脑进程隐藏方法
1、方法比较简单,首先,你需要在网上搜索相关的隐藏进程的第三方软件工具。

这里就以HideToolz为例子,你在浏览器上输入“HideToolz”就会出现相关的官方下载界面,下载并将这个软件安装到你的电脑当中。

2、下载完后,电脑桌面上就会显示出一个HideToolz的压缩包,鼠标选中这个压缩包,双击打开这个压缩包。

然后在压缩包中找到该软件的应用程序,就能够进入到这个软件了。

通过这个软件,你可以看到目前电脑正在运行的软件有哪些、一共有多少软件是电脑当下所在运行的。

3、做完上面的步骤后,现在就开始隐藏电脑的进程。

找到电脑键盘上Ctrl + Alt +【启动任务管理器】,这几个按键,同时按下去,接着在HideToolz软件上面找到你即将要将其隐藏的运行程序,鼠标放在你要进行隐藏的程序上面,然后点击右键,选择隐藏。

做完这个步骤后,你可以进入到人物管理器里面,看看程序是否已经成功隐藏了。

被成功隐藏的程序是不会出现在任务管理器里面的。

4、最后,在隐藏了相关的运行程序之后,如果你想要将隐藏的程序再次调处来,那么你则需要再次打开HideToolz这个软件,在里面找到已经隐藏的程序,并且鼠标放在隐藏的程序上,单击右键,选择“显示”这个按钮,那么随后你就又能在任务管理器中看到该运行
的进程了!
5、除了利用上面说的第三方软件进行隐藏进程,其他不利用第三方软件隐藏进程的方法也有。

但是相对来说步骤复杂一些。

Dll 模块隐藏技术

Dll 模块隐藏技术

Dll模块隐藏技术学习各种外挂制作技术,马上去百度搜索"魔鬼作坊"点击第一个站进入、快速成为做挂达人。

如果你细细读完这篇文章,你会学到一下内容:1.PEB,TEB,LDR_DATA_TABLE_ENTRY等数据结构2.自己覆盖掉自己执行过的一段代码3.调试这个Dll你会发现DLL_PROCESS_ATTACH中的代码在OD首次停下即加载停止时已经执行完了!多么美妙啊!哈哈,OD不会发现你执行了什么4.本例最后附件有个ASM的控制台程序,用SDK编写,你可以学到用汇编写一个基本的控制台程序的格式5.最后那个控制台源码还包含完整的CreateRemoteThread注入进程的写法本文主要讲的是怎样隐藏一个dll模块,这里说的隐藏是指,dll被加载后怎样使它用一般的工具无法检测出来。

为什么要这么做呢?1.远程线程中的应用(1)大家都知道,远程线程注入主要有两种一种是直接copy母体中预注入的代码到目标进程地址空间(WriteProcessMemory),然后启动注入的代码(CreateRemoteThread),这种远程线程一旦成功实现,那么它只出现在目标进程的内存中,并没有对应的磁盘文件,堪称进程隐藏中的高招,可是缺点就是,你必须要在注入代码中对所有直接寻址的指令进行修正,这可是个力气活,用汇编写起来很烦。

(2)另一种更为常用的方法是注入一个dll文件到目标进程,这种方法的实现可以是以一个消息Hook为由进行注入,或者仍然使用CreateRemoteThread,这种方法的优点是Dll文件自带重定位表,也就是说你不必再为修正直接寻址指令而烦恼了!,dll自己会重定位!~~~嗯,真是不错的方法---可是我们说它不如上面说的方法牛。

为什么?因为它的致命伤就是可以用进程管理工具看见被加载的dll文件名、文件路径。

这真是太不爽了,因为只要用户看看模块列表很容易发现可疑模块!,再依据名字,找到路径,定位文件---dll文件就这样暴露了.这样也就不是很完美的隐藏进程。

基于DLL的进程隐藏技术研究

基于DLL的进程隐藏技术研究


引言

立 的 线 程 ) 享 地 址 空 间 以及 其 他 资 源 。 过 C etR moehed也 同 共 通 rae e tT ra 样 可 以在 另 一 个 进 程 内创 建 新 线 程 . 创 建 的远 程 线 程 同 样 可 以共 享 被 在 操 作 系 统 中 , 程 是 程 序 运 行 的 实 例 . 个 进 程 都 有 自身 的 进 远 程 进 程 的地 址 空 间 , 以 , 建 一 个 远 程 线 程 , 入 远 程 进 程 的 内存 进 每 所 创 进 程 环, 可记 为 E RO E S 而 每 个 进 程 都 拥 有 各 自线 程 , 程 的执 行 和 地 址 空 间 , 拥 有 了 该 远 程 进 程 的 权 限 , 以 在 监 视 模 块 被 恶 意 终 止 P C S。 进 就 可 调 度是 以 线 程 为 基 础 的 。 每个 线 程 也 有 各 自的 线 程 环 K E 可 记 为 时 及 时重 新 启 动 。 且 T B,
的 成员 :
T p d fsr c y e e tu tEPROC Sf ES
模 块 插 入 到 epoe. e中 , 以 较 好 得 隐藏 、 护 模 块 本 身 。 其 实 现 xlrr x e 可 保 步骤为 : ① 通 过 O e Poes函数 打开 试 图嵌 入 的 进 程 ,因 为 需 要 写 入 远 pn r s c 程 进 程 的 内 存 地 址 空 间 . 以必 须 申请 足 够 的 权 限 , 括 远 程 创 建 线 所 包

K R C S c; 术在 结 构 中 的偏 移 量 为 0 0 0 * P O E S P t, x0 0 /
D WOR nq ePo esI; D U iu rcs / 表 了 进 程 的 i* d *代 d/

进程隐藏的方法

进程隐藏的方法

进程隐藏的方法最基本的隐藏:不可见窗体+隐藏文件木马程序无论如何神秘,但归根究底,仍是Win32平台下的一种程序。

Windows下常见的程序有两种:1.Win32应用程序(Win32 Application),比如QQ、Office等都属于此行列。

2.Win32控制台程序(Win32 Console),比如硬盘引导修复程序FixMBR。

其中,Win32应用程序通常会有应用程序界面,比如系统中自带的"计算器"就有提供各种数字按钮的应用程序界面。

木马虽然属于Win32应用程序,但其一般不包含窗体或隐藏了窗体(但也有某些特殊情况,如木马使用者与被害者聊天的窗口),并且将木马文件属性设置为"隐藏",这就是最基本的隐藏手段,稍有经验的用户只需打开"任务管理器",并且将"文件夹选项"中的"显示所有文件"勾选即可轻松找出木马,于是便出现了下面要介绍的"进程隐藏"技术。

第一代进程隐藏技术:Windows 98的后门在Windows 98中,微软提供了一种能将进程注册为服务进程的方法。

尽管微软没有公开提供这种方法的技术实现细节(因为Windows的后续版本中没有提供这个机制),但仍有高手发现了这个秘密,这种技术称为RegisterServiceProcess。

只要利用此方法,任何程序的进程都能将自己注册为服务进程,而服务进程在Windows 98中的任务管理器中恰巧又是不显示的,所以便被木马程序钻了空子。

要对付这种隐藏的木马还算简单,只需使用其他第三方进程管理工具即可找到其所在,并且采用此技术进行隐藏的木马在Windows 2000/XP(因为不支持这种隐藏方法)中就得现形!中止该进程后将木马文件删除即可。

可是接下来的第二代进程隐藏技术,就没有这么简单对付了。

第二代进程隐藏技术:进程插入在Windows中,每个进程都有自己的私有内存地址空间,当使用指针(一种访问内存的机制)访问内存时,一个进程无法访问另一个进程的内存地址空间,就好比在未经邻居同意的情况下,你无法进入邻居家吃饭一样。

基于进程和通信隐藏的木马设计与实现论文

基于进程和通信隐藏的木马设计与实现论文

基于进程和通信隐藏的木马设计与实现摘要近年来,特洛伊木马等恶意代码己经成为网络安全的重要威胁。

很多国家都采取积极的网络安全防御措施,投入大量的人力和物力研究网络信息安全技术。

文章首先分析了传统木马的一般工作原理及其植入、加载、隐藏等关键技术。

随着网络技术的不断更新和发展,木马技术也在不断地更新换代,现代木马的进程隐藏和通信隐藏等等都发生了变化。

进程的隐藏和通信的隐藏一直是木马程序设计者不断探求的重要技术。

攻击者为达到进程隐藏的目的,采用远程线程和动态链接库,将木马作为线程隐藏在其他进程中。

选用一般安全策略都允许的端口通信,如80端口,则可轻易穿透防火墙和避过入侵检测系统等安全机制的检测,从而具有很强的隐蔽性。

本文研究了如何将Windows环境下的动态链接库(DLL)技术与远程线程插入技术结合起来实现特洛伊木马植入的新方案。

在该方案中,提出了特洛伊木马程序DLL模块化,并且创建了独立的特洛伊木马植入应用程序,将木马程序的DLL模块植入宿主进程。

实验结果证明该方案能实现的木马植入,具有很好的隐蔽性和灵活性。

关键词:特洛伊木马;动态连接库;进程插入;远程线程The Design and Implementation of Trojan Horses Base on Process Hiding and Communications HidingAbstractIn recent years,malicious codes including Trojan have threatened network information security, and more and more countries paid attention to take active measures to protect the network, and spent a lot in research to develop network information security technology mentally and materially. This paper firstly analyses the basic principle, entry technology, load technology and hiding technology of traditional Trojan horse. With the development of network technology, Trojan horse technology is upgrading constantly. Modern Trojan horse is changed in process hiding and communication hiding.The process hiding and communications hiding are important technology being explored by Trojan horse programmers all long. Adopting the measure of dynamic link storage, and Remote Thread technology, and hiding Trojan horse behind the other processes as a thread program, it is easy to hide. Choosing the port correspondence which is permitted by almost all the ordinary security policy, likes 80port, may easily penetrate the firewall and avoid the examine of security systems as invasion-checking mechanisms and so on. Thus, it has a very strong covered.This paper is implemented the injection of Trojan horse by combining the technology of DLL (dynamic linking library) and of remote thread injection on the Windows platform. In this paper, modularization of Trojan horse process is proposed to create an independent Trojan horse injection process, thus, to inject Trojan horse DLL module to the host process.Experimental results show that the program could realize the Trojan injected with good covered and flexibility.Key Words:Trojan Horse;DLL;Process Injection;Remote Thread目录论文总页数:23页1 引言 (1)2 特洛伊木马简介 (1)2.1 认识木马 (2)2.2 木马原理 (2)2.3 木马的危害 (3)2.4 常见木马的介绍 (3)3 木马隐藏概述 (4)3.1 本地隐藏 (4)3.2 通信隐藏 (8)4 隐藏技术的实现 (10)4.1 隐藏进程 (10)4.2 隐藏通信 (14)4.3 木马功能的实现 (15)5 系统测试 (19)5.1功能测试 (19)5.2性能测试 (20)结论 (21)参考文献 (21)致谢 (22)声明 (23)1引言近年来,黑客攻击层出不穷,对网络安全构成了极大的威胁。

隐藏进程

隐藏进程

而早期后门技术里,还有一个最基本的行为就是隐藏文件,与今天的各种隐藏手段相比,它可谓是“不入流”级别了——这里提到的“隐藏”,就是简单 的将文件属性设置为“隐藏”而已,除此之外,再无别的保护手段了,然而,由于系统设计时为了避免初学者胡乱删除文件而默认“不显示系统和隐藏文件”的做法 (到了Windows 2000/xp时代,这个做法更升级到“隐藏受保护的系统文件”了),却恰好给这些病毒提供了天然的隐身场所——大部分对电脑操作不熟悉的用户根本不知道 “隐藏文件”的含义,更别提设置为“显示所有文件”了,在那个安全软件厂商刚开始探索市场的时代,用户更是不会留意太多安全产品及其实际含义,因而这个时 期成了各种初期木马技术发展的重要阶段,利用这种手段制作的木马被统称为“第一代木马”。
与“线程注射”离不开的是“hook”技术,这个“hook”,又是什么呢?其官方定义如下:
钩子(hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
using System;
using Systing ponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
任务管理器的“应用程序”项里列出来的“任务”,是指进程在桌面上显示出来的窗口对象,例如用户打开word 2003撰写文档,它的进程“winword.exe”会创建一个在桌面上显示的前台窗口,这个窗口就是任务管理器里看得见的“任务”了,而实际上真正在 运行的是进程“winword.exe”。并不是所有的进程都会在任务管理器里留下“任务”的,像QQ、msn 和所有后台程序,它们并不会在任务列表里出现,但是你会在进程列表里找到它们,如果要它们在任务列表里出现该怎么办呢?只要让它们产生一个在桌面上出现的 窗体就可以了,随便打开一个好友聊天,就会发现任务列表里终于出现了qq的任务。因此,真正科学的终止程序执行方案是针对“进程”来结束程序的运行,而不 是在任务列表里关闭程序,因为木马作者们是不会让自己的木马在任务列表里出现的,但是进程列表里一般人都是逃不过的。

如何查杀运行状态下的EXE、DLL病毒

如何查杀运行状态下的EXE、DLL病毒
如何查杀运行状态下的EXE、DLL病毒 发表于 2008-02-18 16:11
一、对于启动进程的EXE病毒的查杀
1、在进程中可以发现的单进程EXE病毒或木马程序,如:svch0st.exe,有些杀毒软件可以发现且可以停掉进程,杀掉病毒;有些杀毒软件会报警提示用户或形成日志,需要用户作进一步判断后,再手工停掉相应进程,杀掉病毒。
对于上述两种不可以"卸除"的情况,需要在安全模式下,手工删除DLL病毒文件。
另外,目前还有些病毒或木马程序有时还会感染U盘,在U盘产生Autorun.inf和相应的EXE文件。
3、对于像被"熊猫烧香"感染的EXE文件,上述两种手工处理无效,因为无法手工清除受病毒感染的文件中的病毒,这时只能向杀毒软件厂商提供病毒样本,等待杀毒软件升级后再进行处理,或重新安装操作系统。
二、 对于采用进程插入技术,隐藏了进程DLL病毒的查杀
目前的一些高级病毒或木马程序,采用进程插入技术,隐藏了进程,将其DLL动态链接库文件插入现有的系统进程中,常见的插入explorer.exe和winlogon.exe中,目前杀毒软件针对这种动态链接库的病毒查杀,效果都不理想,有时杀毒软件甚至会出现误判,如"赛门铁克误杀系统两个关键动态链接库文件"事件。
对于插入explorer.exe中DLL文件,大部分可以利用工具IceSword中"模块/卸除",将DLL文件卸载,然后手工删除DLL病毒中DLL文件,少数可以利用工具IceSword中"模块/卸除",将DLL文件卸载,然后手工删除DLL病毒文件;大部分是不可以"卸除"的,
2、在进程中可以发现的双进程EXE病毒或木马程序,由于手工方式不能同时停掉两个进程,当我们手工掉其中一个进程后,另一个进程会将该进程重新启动。针对这种情况杀毒软件也无能为力,若两个都是非系统进程,我们可以通过"任务管理器/进程/结束进程树"的方式停掉该进程,杀掉病毒;也可以用工具IceSword(冰刃)中"文件/设置/禁止进线程创建",来停掉其中一个进程,再停掉另一个进程,杀掉病毒。

DLL技术木马进程内幕大揭密

DLL技术木马进程内幕大揭密

D L L技术木马进程内幕大揭密SANY GROUP system office room 【SANYUA16H-SANYHUASANYUA8Q8-很多朋友还是不知道“DLL木马”是什么东东。

那到底什么是“DLL木马”呢?它与一般的木马又有什么不同?带着这些疑问,一起开始这次揭密之旅吧!一、追根溯源从DLL说起要了解什么是“DLL木马”,就必须知道“DLL”是什么意思!说起DLL,就不能不涉及到久远的DOS时代。

在DOS大行其道的时代,写程序是一件繁琐的事情,因为每个程序的代码都是需要独立的,这时为了实现一个普通的功能,甚至都要为此编写很多代码。

后来随着编程技术发展与进步,程序员们开始把很多常用的代码集合(也就是通用代码)放进一个独立的文件里,并把这个文件称为“库”(Library)。

在写程序的时候,把这个库文件加入编译器,就能使用这个库包含的所有功能而不必自己再去写一大堆代码,这个技术被称为“静态链接”(Static Link)。

静态链接技术让劳累的程序员松了口气,一切似乎都很美好。

然而静态链接技术的最大缺陷就是极度消耗和浪费资源,当一个程序只想用到一个库文件包含的某个图形效果时,系统将把这个库文件携带的所有的图形效果都加入程序,这样就使得程序非常臃肿。

虽然这并不重要,可是这些臃肿的程序却把道路都阻塞了——静态链接技术让最终的程序成了大块头,因为编译器把整个库文件都加载进去了。

技术永远是在发展的,静态链接技术由于无法避免的弊端,不能满足程序员和编程的需要,人们开始寻找一种更好的方法来解决代码重复的难题。

随着Windows系统的出现, Windows系统使用一种被称为“动态链接库”(Dynamic LinkLibrary)的新技术,它同样也是使用库文件,DLL的名字就是这样来的。

动态链接本身和静态链接没什么区别,也是把通用代码写进一些独立文件里,但是在编译方面,微软把库文件做成已经编译好的程序文件,给它们开发一个交换数据的接口。

WindowsRootkit进程隐藏与检测技术

WindowsRootkit进程隐藏与检测技术
EPROCESS 结构中的域 Active process link 域是一个 LIST_ENTRY 结构,它将所有进程的 EPROCESS 结构连接成 了一个双向链表。ZwQuerySystemImformation 函数通过遍历 这个链表来获取需要查询的信息。只要把需要隐藏进程的 EPROCESS 结构从链表中剥离出去,该进程就会从系统的视 线中消失。
无论在用户模式还是内核模式,仅依靠一种技术已经不 足以将进程完美隐藏。高效的进程隐藏方案往往将 2 种模式 下的技术结合在一起,配合内核中多种数据结构,甚至利用 一些非 Rootkit 范畴的技术。例如 hook 内核 Shadow SSDT 结 构以及抹掉窗口标题等辅助隐藏手段,防止通过枚举窗口探 测进程。归根结底,进程隐藏就是要让进程隐匿在系统之中, 并在最大程度上给检测制造技术障碍。
由于线程的上下文切换都要用到 SwapContext 函数,因 此只要把守住该函数就能得到真实的进程列表,找出被隐藏 的进程。 3.2 另类检测方法
进程 Csrss.exe 是 Windows 子系统进程[4]。由于每个进程 在创建初期都会通知 Windows 子系统进程以便能够进一步完 成创建工作,因此 Csrss.exe 中包含了除 Idle, System, Smss.exe 和 Csrss.exe 之外所有进程的信息(前 2 个属于内核,SMSS 是 CSRSS 的父进程)。
利 用 PsGetCurrentProcess 函 数 定 位 到 System 进 程 EPROCESS 构成。然后,沿着 LIST_ENTRY 结构指向遍历整 个链表,通过 PID 等信息定位到需要隐藏的进程,将它的 EPROCESS 脱链。脱链之后,该进程的正常运行不会受到本 质的影响。但直接使用系统提供的服务已经不能够发现该进 程了。

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

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

简单的说,dll有以下几个优点:1) 节省内存。

同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中。

如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,像dll中的全局变量这种东西是会被每个进程复制一份的)。

2) 不需编译的软件系统升级,若一个软件系统使用了dll,则该dll被改变(函数名不变)时,系统升级只需要更换此dll即可,不需要重新编译整个系统。

事实上,很多软件都是以这种方式升级的。

例如我们经常玩的星际、魔兽等游戏也是这样进行版本升级的。

3) Dll库可以供多种编程语言使用,例如用c编写的dll可以在vb中调用。

这一点上DLL还做得很不够,因此在dll的基础上发明了COM技术,更好的解决了一系列问题。

最简单的dll开始写dll之前,你需要一个c/c++编译器和链接器,并关闭你的IDE。

是的,把你的VC和C++ BUILDER之类的东东都关掉,并打开你以往只用来记电话的记事本程序。

不这样做的话,你可能一辈子也不明白dll的真谛。

我使用了VC自带的cl编译器和link链接器,它们一般都在vc的bin目录下。

(若你没有在安装vc的时候选择注册环境变量,那么就立刻将它们的路径加入path吧)如果你还是因为离开了IDE而害怕到哭泣的话,你可以关闭这个页面并继续去看《VC++技术内幕》之类无聊的书了。

最简单的dll并不比c的helloworld难,只要一个DllMain函数即可,包含objbase.h头文件(支持COM技术的一个头文件)。

若你觉得这个头文件名字难记,那么用windows.H也可以。

源代码如下:dll_nolib.cpp#include <objbase.h>#include <iostream.h>BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved){HANDLE g_hModule;switch(dwReason){case DLL_PROCESS_ATTACH:cout<<"Dll is attached!"<<endl;g_hModule = (HINSTANCE)hModule;break;case DLL_PROCESS_DETACH:cout<<"Dll is detached!"<<endl;g_hModule=NULL;break;}return true;}其中DllMain是每个dll的入口函数,如同c的main函数一样。

DLL后门完全清除方法

DLL后门完全清除方法
我们把该服务停掉,然后打开注册表编辑器(开始—运行--regedit),来到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesIPRIP下,查看其Parameters子键。Program键的键值SvcHostDLL.exe为后门的Loader;ServiceDll的键值C:WINNTsystem32svchostdll.dll为调用的DLL文件,这正是后门的DLL文件。现在我们删除IPRIP子键(或者用SC来删除),然后在来到HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost下,编辑netsvcs服务组,把49 00 70 00 72 00 69 00 70 00 00 00删除,这里对应的就是IPRIP的服务名。然后退出,重启。重启之后删除WINNTsystem32目录下的后门文件即可。
4,定期检查系统自动加载的地方,比如:注册表,Winstart.bat,Autoexec.bat,win.ini,system.ini,wininit.ini,Autorun.inf,Config.sys等。其次是对服务进行管理,对系统默认的服务要有所了解,在发现有问题的服务时,可以使用Windows 2000 Server Resource Kit中的SC来删除。以上这些地方都可以用来加载DLL后门的Loader,如果我们把DLL后门Loader删除了,试问?DLL后门还怎么运行?!
二、DLL的清除
本节以三款比较有名的DLL后门例,分别为"SvchostDLL.dll""BITS.dll""QoServer.dll"。详细讲解其手工清除方法。希望大家在看过这三款DLL后门的清除方法之后,能够举一反三,灵活运用,在不惧怕DLL后门。其实,手工清除DLL后门还是比较简单的,无非就是在注册表中做文章。具体怎么做,请看下文。

利用C++实现模块隐藏(R3层断链)

利用C++实现模块隐藏(R3层断链)

利⽤C++实现模块隐藏(R3层断链)⼀、模块隐藏的实现原理 普通API查找模块实现思路:其通过查询在R3中的PEB(Process Environment Block 进程环境块)与TEB(Thread Environment Block 进程环境块)来找到⼀个双向链表,通过遍历双向链表中某⼀成员(字符串)来查找全部模块。

模块隐藏实现思路:在R3层的模块隐藏,我们需要做的就是将其该链表断链,将某⼀模块从这个双向链表中摘除,这样再调⽤传统的API时就会搜索不到。

⼆、结构体成员详细介绍<1> TEB结构体 -- 内存地址为 fs:[0] 处。

使⽤Windbg的 "dt _TEB"命令来查看TEB结构体kd> dt _TEBntdll!_TEB+0x000 NtTib : _NT_TIB+0x01c EnvironmentPointer : Ptr32 Void+0x020 ClientId : _CLIENT_ID+0x028 ActiveRpcHandle : Ptr32 Void+0x02c ThreadLocalStoragePointer : Ptr32 Void+0x030 ProcessEnvironmentBlock : Ptr32 _PEB+0x034 LastErrorValue : Uint4B1. 属性介绍  1.1)_NT_TIB:重点两个属性,栈顶与栈⼤⼩。

/kernel_struct/vista/NT_TIB.html 1.2) _CLIENT_ID: 存储该进程ID与当前主线程ID。

https:///en-us/openspecs/windows_protocols/ms-tsts/a11e7129-685b-4535-8d37-21d4596ac057? redirectedfrom=MSDN 1.3) _PEB:进程环境块,记住其在 TEB 偏移 0x30处即可。

Dll显式、隐式调用

Dll显式、隐式调用

信息集成
VC Dll显式、隐式调用
计算机系XXX 2012XXXXXX 一.创建DLL工程:
1. 创建一个空的Dll工程:
2.在Dll Source,新建一个空的.cpp文件,如下图,并添加代码:
3.编译这个工程,会在工程目录中Debug文件夹中出现Dll.lib和Dll.dll文件,表示成功创建Dll链接文件
二.隐式调用:
1.创建一个空的Console Application,如图:
2.在该工程上新建一个.cpp文件,并添加如下代码:
3.直接编译该工程会Load不到Dll而无法调用Add函数,需要将将刚才生成的Lib.dll放到改成工程的Debug目录下,再次编译会成功,如图:
三.显式调用:
1.参照新建Dll工程重新建个带有Show函数的Dll,工程文件.h和.cpp内容如下:
编译后会在Debug下生成Lib.lib和Lib.dll
2.参照二新建一个空的Console Application,添加.cpp文件后在里面添加如下内容:
将刚才Dll工程生成的Lib.h和Lib.lib Copy到当前工程目录,将Lib.dll Copy到Debug目录下
3.点击工程-设置,如图,将Lib.lib添加到对象/库模块中:
确定后编译:。

进程隐藏_精品文档

进程隐藏_精品文档

进程隐藏什么是进程隐藏?在计算机科学中,进程隐藏(Process hiding)是指将正在运行的进程从操作系统的进程列表中隐藏起来,使其在任务管理器或类似的进程查看工具中不可见。

进程隐藏的主要目的是为了增加对恶意软件和攻击行为的隐蔽性,使其难以被检测和终止。

进程隐藏的原理进程隐藏的原理主要依赖于操作系统的特定功能和接口。

以下是一些常见的进程隐藏技术:1. 修改进程ID操作系统会为每个运行的进程分配一个唯一的进程ID(PID)。

通过修改进程ID,可以使进程在进程列表中不可见。

这需要对操作系统的内核进行修改,以欺骗操作系统,使其认为进程ID不存在或已被终止。

2. 隐藏进程名称通过修改进程的名称,可以使其在进程列表中不易被注意到。

这可以通过修改操作系统内核中对进程名称的记录实现。

修改进程名称可以使恶意软件模拟其他常见进程的名称,或者完全隐藏进程的名称。

3. 隐藏进程路径进程隐藏还可以通过修改进程路径来实现。

进程路径是进程在操作系统中的存储位置。

通过修改进程路径,可以使进程在进程查看工具中不易被发现。

这需要对操作系统的内核进行修改,以欺骗操作系统,使其认为进程路径不存在或已被更改。

4. 隐藏进程启动项操作系统中的启动项指的是开机自动启动的进程。

通过隐藏进程的启动项,可以使进程在系统启动时不可见,从而增加其隐蔽性。

这需要对操作系统中的启动项进行修改。

5. 隐藏进程的线程进程通常由多个线程组成。

通过隐藏进程的线程,可以使进程在进程查看工具中只显示部分线程或不显示任何线程,从而隐藏其存在。

这需要在操作系统层面对线程进行管理和修改。

进程隐藏的应用进程隐藏技术通常被用于恶意软件和攻击行为。

以下是一些常见的应用场景:1. 计算机病毒计算机病毒通常会使用进程隐藏技术来增加其对防御机制的逃避能力。

通过隐藏恶意进程,病毒可以在操作系统中长时间潜伏,绕过杀毒软件和系统监控。

2. 黑客攻击黑客攻击中经常使用进程隐藏技术来隐藏攻击代码或后门程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程中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+0×00c 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+0×00c InLoadOrderModuleList : _LIST_ENTRY+0×014 InMemoryOrderModuleList : _LIST_ENTRY+0×01c InInitializationOrderModuleList : _LIST_ENTRY+0×024 EntryInProgress : Ptr32 Void其中,InLoadOrderModuleList、InMemoryOrderModuleList、InInitializationOrderModuleList 就是进程当前已加载模块的链表,只是按照不同的方式排序。

EnumProcessModules是通过InMemoryOrderModuleList链表枚举的,而根据Win2k代码,ToolHelp32函数是通过InLoadOrderModuleList枚举。

这三个_LIST_ENTRY都是在一个RTL_PROCESS_MODULE_INFORMATION结构中的成员。

这个结构在2k代码中有引用,不过没有确切的定义,下面是ReactOS中的定义,不过看起来我的vista PSAPI中使用的结构已经有所变化了,这里只作参考。

//// Loader Data Table Entry//typedef struct _LDR_DATA_TABLE_ENTRY{LIST_ENTRY InLoadOrderLinks;LIST_ENTRY InMemoryOrderModuleList;LIST_ENTRY InInitializationOrderModuleList;PVOID DllBase;PVOID EntryPoint;ULONG SizeOfImage;UNICODE_STRING FullDllName;UNICODE_STRING BaseDllName;ULONG Flags;USHORT LoadCount;USHORT TlsIndex;union{LIST_ENTRY HashLinks;PVOID SectionPointer;};ULONG CheckSum;union{ULONG TimeDateStamp;PVOID LoadedImports;};PVOID EntryPointActivationContext;PVOID PatchInformation;} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;到这里,隐藏模块的方法就已经明了了:通过PEB取得Ldr数据,拿到三个模块链表,并将要隐藏的模块断链即可。

下面是主要代码实现:BOOLHideMyself(){HMODULEhMod = GetModuleHandle( _T( “ntdll.dll”));HMODULEhModMyself = GetModuleHandle( _T(“dll.dll”));pfnNtQueryInformationProcessp =(pfnNtQueryInformationProcess)::GetProcAddress( hMod, “NtQueryInformationProcess”) ;PROCESS_BASIC_INFORMATIONstInfo = {0};DWORDdwRetnLen = 0;DWORDdw = p( GetCurrentProcess(), 0, &stInfo, sizeof(stInfo), &dwRetnLen);PPEBpPeb = stInfo.PebBaseAddress;PLIST_ENTRYListHead, Current;PLDR_DATA_TABLE_ENTRYpstEntry = NULL;ListHead = &( stInfo.PebBaseAddress->Ldr->InLoadOrderModuleList);Current = ListHead->Flink;while ( Current != ListHead){pstEntry = CONTAINING_RECORD( Current, LDR_DATA_TABLE_ENTRY, InLoad OrderLinks);//DebugOutW( L”Module:%s, base:0x%Xrn”, pstEntry->FullDllName.Buffer, pstEntry->EntryPoint);if ( pstEntry->DllBase == hModMyself){pstEntry->InLoadOrderLinks.Flink->Blink = pstEntry->InLoadOrderLinks.Blink;pstEntry->InLoadOrderLinks.Blink->Flink = pstEntry->InLoadOrderLinks.Flink;DebugOut( _T( “Hide injected dll.”));break;}Current = pstEntry->InLoadOrderLinks.Flink;}ListHead = &( stInfo.PebBaseAddress->Ldr->InMemoryOrderModuleList);Current = ListHead->Flink;while ( Current != ListHead){pstEntry = CONTAINING_RECORD( Current, LDR_DATA_TABLE_ENTRY, InMem oryOrderModuleList);DebugOutW( L“Module:%s,base:0x%Xrn”, pstEntry->FullDllName.Buffer, pstEntry->EntryPoint);if ( pstEntry->DllBase == hModMyself){pstEntry->InMemoryOrderModuleList.Flink->Blink = pstEntry->InMemoryOrderMo duleList.Blink;pstEntry->InMemoryOrderModuleList.Blink->Flink = pstEntry->InMemoryOrderMo duleList.Flink;DebugOut( _T( “Hide injected dll.”));break;}Current = pstEntry->InMemoryOrderModuleList.Flink;}DebugOutW( L“rn”);ListHead = &( stInfo.PebBaseAddress->Ldr->InInitializationOrderModuleList);Current = ListHead->Flink;while ( Current != ListHead){pstEntry = CONTAINING_RECORD( Current, LDR_DATA_TABLE_ENTRY, InInitiali zationOrderModuleList);DebugOutW( L“Module:%s,base:0x%Xrn”, pstEntry->FullDllName.Buffer, pstEntry->EntryPoint);if ( pstEntry->DllBase == hModMyself){pstEntry->InInitializationOrderModuleList.Flink->Blink = pstEntry->InInitializationO rderModuleList.Blink;pstEntry->InInitializationOrderModuleList.Blink->Flink = pstEntry->InInitializationO rderModuleList.Flink;DebugOut( _T( “Hide injected dll.”));break;}Current = pstEntry->InInitializationOrderModuleList.Flink;}//DebugOut( _T(”Out HideMyselfrn”));returnTRUE;}这样处理之后,通过常规的枚举进程方式已经枚举不到隐藏模块,ProcessExplorer也无法枚举。

相关文档
最新文档