一种有效的进程隐藏方案实现

合集下载

Windowsserver2008inaoWSSeW艮务器进程隐藏机制的研究与实现

Windowsserver2008inaoWSSeW艮务器进程隐藏机制的研究与实现

法就是调用系统AP I ; C r e a t e To o l He l p 3 2 S n a p s h o t 、 E n u m P r o c e s s 、 E n u m P r o c e s s Mo d u l e s 等, 它们是获取进程列表 的第一 层手段 , 调用这几个AP I 函数 , 就可 以得带系统当前运行进程的返
回列 表 。
这几 个API 在 接到请 求后会 调用Zw Qu e r y S ys t e m I n f o r ma t i o n, Z w Q u e r y S t s t e m I n f o r ma t i o n, 会 调 用 Ki S y s t e m S e r v i c e 切入 内核进入r i n g 0  ̄限 , 然后 自S S D T 表( S y s t e m S e r v i c e D e s c r i p t o r T a b l e , 系统服务分配表) 中查得Nt Q u e r y S y s t e m I n -
HOO K, 而在之后进行H O0 K则是内核模 式HO OK, 后者需要驱动 才能实现 。 它 比前几种技术更为成熟 。 这种技术使得木马不必将 自 技术 的发展方 向, 有助于采取更有力的应对措施 。 了解进程 隐藏技 己插入到其他进程 中, 即可实现 自身信息的 隐藏 。 术, 是开发防病毒和木马软件 的基础 , 同时也助于促 进信息安全技 更为高级的技术是D KO M一直接 内核对象修改技术 , 是 由木 术的发展 。
应 用研 究
_ 4 。 { l 与 应 用 蘩
do ws s e r ve r 2 00 8
服务器进程隐藏机制的研究与实现

Windows环境木马进程隐藏技术研究

Windows环境木马进程隐藏技术研究

0 引言随着计算机技术的迅速发展和网络应用的日益普及,恶意代码出现的频率越来越高。

目前,隐藏功能已成为很多恶意代码的一个重要特征,分析恶意代码使用的隐藏手段和相关的技术,可以让我们更好地提高防范意识,并据此采取相应的防御和检测措施。

特洛伊木马(简称木马)是具有较强隐藏功能的一类恶意代码。

它通常伪装成合法程序或隐藏在合法程序中,通过执行恶意代码,为入侵者提供非授权访问系统的后门[1]。

本文首先简单介绍了木马实现的常用技术,接着重点分析了Windows环境下木马实现进程隐藏经常使用的技术。

1 木马实现常用技术1.1 注册表修改很多木马在实现时都会修改注册表,修改的目的通常是:借助于注册表来实现启动或隐藏。

在注册表的多个项目中都包含启动项。

启动项的数值可以设置为用户指定的、伴随系统启动或服务启动而自动运行的程序的绝对路径。

因此,将启动项的数值设置为木马程序的路径,就可以实现木马的启动。

但是,使用注册表编辑器能够很容易地将注册表项的数值删除,为此,很多木马在使用时都加入了时间控制程序段,以监视注册表中相应的数据是否存在,一旦发现被删除则会立即重新写入。

1.2 反向连接反向连接就是被攻击者主动连接攻击者的过程,通常是运行木马的服务端进程主动连接客户端控制进程并进行通信的过程,也称为反弹技术[2] [3]。

其基本原理是利用防火墙对由内到外的连接疏于防范的弱点来实现由内到外的主动连接。

NameLess木马实现时也用到了反向连接,它使用嗅探原理来取得控制端的IP地址,然后实现反向连接。

1.3 端口复用端口复用是指在一个端口上建立了多个连接,而不是在一个端口上面开放了多个服务。

一种常用的端口复用技术,就是利用系统实际存在的系统的合法端口进行通讯和控制,如21、23、80等,使一个端口除了完成正常的功能外,还可用于木马通信,而不是使用一个新开的端口号[2]。

这样的好处就是非常隐蔽,不用自己开端口也不会暴露自己的访问,因为通讯本身就是系统的正常访问。

基于远程线程注入的进程隐藏技术研究

基于远程线程注入的进程隐藏技术研究
维普资讯
第2 8卷
20 0 8年 6月

计 算机应 用
Co u e p iai n mp t rAp lc t s o

Vo . 128
Jn 0 8 u e2 0
文章编号 :0 1— 0 12 0 ) 1一 O 2— 3 10 9 8 ( 0 8 S O9 0
大多数 R oKt oti具有一个 主要 的 目的 : 对计算机进行 持续 访问, 为入侵者提供潜行 能力 , 隐藏入侵者在系统 中各项行为 的存 在。R o i包括 了多种 隐藏入 侵者 在系 统 中存 在 的功 ot t K 能, 这其 中就 包 含 允 许 入 侵 者 隐 藏 当前 系统 中 的 进 程信
0 引言
特 洛伊木马作为一种危 害性大 、 隐藏性高 的远 程控制 工 具, 一直是 H ce 技术的后 门控制技 术 R o i 2得 以蓬 勃发展 。 ot t ] K u-
1 Widw oti进 程隐藏 n o sR o t K
ma e u e o PC me h n s t e l e an w t c t t g dn r c s .F n l e d t t n t h oo ae n t e d s A c a im o r ai e at k s a e o h i g p o e s i a y t ee i e n lg b s d o f z a r y f i l h c o c y h p n il P c a im s i r v d I a tt i atc to s mo e c n e e , S tc n c n rn oma id n i f cp e o A C me h n s wa mp o e . n f c s t k me d i l o c a d O i a o f tn r l h d e f h a h l o

恶意代码的实现技术

恶意代码的实现技术

恶意代码的实现技术摘要:本文着重讲述恶意代码实现技术中的攻击渗透技术和隐藏技术。

关键词:本地攻击网络攻击进程隐藏通讯隐藏在实现恶意代码的过程中,主要涉及到攻击渗透技术、自动升级技术、随机启动技术、隐藏技术、远程控制技术、破坏技术等六大技术体系。

这些技术中,攻击渗透技术和隐藏技术是对恶意代码编写者要求较高的技术,也是影响最为深远的技术,这两种技术的重大创新可能会影响整个安全防护体系。

下面我将对这两种技术做详细的阐述。

1 攻击渗透技术攻击渗透技术的任务是保证恶意代码能够植入到目标主机中去。

常见的攻击渗透方式有两种:本地攻击和网络攻击。

本地攻击是早期病毒常用的攻击方法,主要攻击对象是本地存储体,包括磁盘的引导区或者是磁盘上存储的文件等。

网络攻击过程包括邮件攻击和漏洞攻击两种方式。

邮件攻击的主要方式是通过获取受害主机内部存储的邮件地址列表作为邮件接收者,然后将恶意代码自身作为邮件的附件发送出去。

漏洞攻击技术主要有弱口令漏洞攻击和缓冲溢出漏洞攻击。

典型的黑客网络攻击过程包括信息搜集、弱点分析、攻击渗透、痕迹清除、潜伏等待五个阶段。

恶意代码的攻击过程和典型的黑客攻击过程并不完全相同,由于恶意代码本身短小精悍,功能相对单一,不可能完成过多的功能,并且具有自主攻击能力的恶意代码,一般都会有明显异常的网络行为,如果受害对象具有较强的安全意识,采取必要的安全措施,相对来说是比较容易防范的,只有在受害对象的网络安全意识不强的情况下才能完成攻击任务。

所以,恶意代码的攻击渗透过程很少考虑到清除痕迹,或者只是简单的进行日志清理工作。

恶意代码的攻击过程为:创造攻击环境、构造攻击目标、实施攻击过程、等待攻击结果。

创造攻击环境的方法和具体攻击方法有关。

在利用邮件进行攻击的时候,创造的条件需要能够发送邮件,实现方式可以控制现有的邮件发送程序,比如outlook,也可以自己利用socket 接口实现邮件传输协议,编写自己的邮件发送程序。

基于Windows内核的进程隐藏工具的设计与实现本科毕业设计

基于Windows内核的进程隐藏工具的设计与实现本科毕业设计

毕业论文声明本人郑重声明:1.此毕业论文是本人在指导教师指导下独立进行研究取得的成果。

除了特别加以标注地方外,本文不包含他人或其它机构已经发表或撰写过的研究成果。

对本文研究做出重要贡献的个人与集体均已在文中作了明确标明。

本人完全意识到本声明的法律结果由本人承担。

2.本人完全了解学校、学院有关保留、使用学位论文的规定,同意学校与学院保留并向国家有关部门或机构送交此论文的复印件和电子版,允许此文被查阅和借阅。

本人授权大学学院可以将此文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本文。

3.若在大学学院毕业论文审查小组复审中,发现本文有抄袭,一切后果均由本人承担,与毕业论文指导老师无关。

4.本人所呈交的毕业论文,是在指导老师的指导下独立进行研究所取得的成果。

论文中凡引用他人已经发布或未发表的成果、数据、观点等,均已明确注明出处。

论文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的研究成果。

对本文的研究成果做出重要贡献的个人和集体,均已在论文中已明确的方式标明。

学位论文作者(签名):年月关于毕业论文使用授权的声明本人在指导老师的指导下所完成的论文及相关的资料(包括图纸、实验记录、原始数据、实物照片、图片、录音带、设计手稿等),知识产权归属华北电力大学。

本人完全了解大学有关保存,使用毕业论文的规定。

同意学校保存或向国家有关部门或机构送交论文的纸质版或电子版,允许论文被查阅或借阅。

本人授权大学可以将本毕业论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存或编汇本毕业论文。

如果发表相关成果,一定征得指导教师同意,且第一署名单位为大学。

本人毕业后使用毕业论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为大学。

本人完全了解大学关于收集、保存、使用学位论文的规定,同意如下各项内容:按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存或汇编本学位论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版,允许论文被查阅和借阅。

隐藏应用的方法

隐藏应用的方法

隐藏应用的方法
隐藏应用的方法有多种,以下是一些常用的方法:
1. 文件夹隐藏法:将应用图标拖动到一个新建的文件夹内,然后将文件夹中的所有图标都移出,使文件夹内没有任何图标显示。

这样,应用图标就会被隐藏起来。

2. 搜索隐藏法:在应用列表或桌面上,使用搜索功能来查找应用程序,然后打开应用。

在应用打开后,按住返回键或者主页键,将应用切换到后台运行,这样应用图标就不会在桌面或应用列表中显示。

3. 第三方应用隐藏法:有一些第三方应用可以帮助隐藏应用图标。

这些应用通常会创建一个隐藏应用的专用空间,只有在输入特定的密码或手势后才能显示和访问隐藏的应用图标。

4. 设置中的隐藏法:某些Android手机系统提供了隐藏应用的设置选项。

可以在“设置”-“应用”或“应用管理器”中找到要隐藏的应用,然后选择隐藏或禁用该应用,这样它就不会在应用列表或桌面上显示。

请注意,隐藏应用的方法可能因不同品牌和型号的手机而有所差异。

所以建议在操作前先查找相关资料或咨询手机厂商的官方支持。

hidetoolz 用法

hidetoolz 用法

hidetoolz 用法
hidetoolz是一款常用的隐藏进程工具,可以有效地保护您的电脑安全。

下面是 hidetoolz 的使用方法:
1. 下载并安装 hidetoolz 软件。

2. 打开 hidetoolz 软件后,选择“Hide Process”选项卡。

3. 在列表中选择你要隐藏的进程,并点击“Hide”按钮,即可将该进程隐藏起来。

4. 若要取消隐藏某个进程,点击“Unhide”按钮即可。

5. 在“Advanced”选项卡中,可以选择将隐藏进程设为系统进程、隐藏进程文件等高级操作。

6. 在“Settings”选项卡中,可以设置自动隐藏某些进程、开机自启动等选项。

需要注意的是,hidetoolz 可能会引起某些杀毒软件的警报,建议在使用时先关闭杀毒软件,并谨慎使用该软件。

以上就是 hidetoolz 的使用方法,希望对大家有所帮助。

- 1 -。

几种隐藏批处理运行窗口的方法

几种隐藏批处理运行窗口的方法

⼏种隐藏批处理运⾏窗⼝的⽅法(1)通过批处理命令实现。

缺点:会看到⼀个窗⼝⼀闪⽽逝。

优点:简单,直接添加即可。

@echo offif "%1"=="h" goto beginstart mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit:begin::以下为正常批处理命令,不可含有pause set/p等交互命令pause(2)利⽤vbs脚本实现隐藏。

缺点:调⽤⿇烦点。

优点:基本看不到痕迹(⾮绝对的,指⼀般⽤户)HideRun.vbsCreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0其中D:/test.bat是你的批处理路径.....................................................................................................................................另⼀思路为把bat转换成vbs,然后vbs⽣成⼀个临时bat⽂件,然后WScript.Shell.Run隐藏启动这个临时bat。

HideRun.batecho CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0>$tmp.vbscscript.exe /e:vbscript $tmp.vbsdel $tmp.vbs这个批处理其实不能使其批处理本⾝隐藏,但是下⾯⼤部分隐藏调⽤批处理的原理和基础。

电脑进程隐藏方法

电脑进程隐藏方法

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

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

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

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

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

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

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

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

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

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

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

编译彻底隐藏函数的方法

编译彻底隐藏函数的方法

编译彻底隐藏函数的方法编译器是将高级语言代码转换为机器代码的程序。

在编译过程中,编译器会解析代码并生成中间代码,然后通过优化和转换,最终生成目标机器的可执行代码。

隐藏函数是一种保护代码安全性和防止代码泄漏的常用方法。

本文将介绍一些彻底隐藏函数的方法。

1.代码混淆代码混淆是通过将代码进行转换和重组,使得代码逻辑变得难以理解和分析。

这种方法可以有效地隐藏函数的实现细节。

一种常见的代码混淆技术是控制流平坦化,即将函数的控制流转变为一个平面结构,使得函数中的每个基本块都成为一个独立的代码路径。

这样可以使得函数的逻辑变得混乱,增加代码分析的难度。

2.加密和解密加密和解密是将函数的代码进行加密,并在代码执行时进行解密。

这样可以有效地隐藏函数的实现和逻辑。

在编译过程中,可以使用加密算法对函数进行加密,并将加密后的代码存储在可执行文件中。

在函数被调用时,通过解密算法对代码进行解密并执行。

这样可以防止代码被逆向工程师直接分析和理解。

3.动态链接库(DLL)加载将函数代码编译成动态链接库(DLL)可以有效地隐藏函数的实现和逻辑。

DLL是一种可被多个程序共享的文件,其中包含了函数的实现代码。

在编译过程中,可以将需要隐藏的函数编译成DLL,并将其与可执行文件分离。

在程序运行时,通过动态链接库加载机制,将DLL加载到内存中,并调用其中的函数。

这样可以有效地隐藏函数的实现和逻辑,防止代码泄漏。

4.反调试和反解析技术反调试和反解析技术是一种在程序执行过程中检测和抵御调试和解析行为的方法。

这种方法可以防止逆向工程师通过调试和解析代码来获取函数的实现和逻辑。

一种常见的反调试技术是检测调试器的存在,并在检测到调试器时改变程序的行为,使得调试器无法正常工作。

另一种常见的反解析技术是对代码进行运行时动态修改,使得解析工具无法正确解析代码。

5.代码自删除代码自删除是一种在代码执行后将自身删除的技术。

这种方法可以有效地隐藏函数的实现和逻辑,防止代码被分析和理解。

进程隐藏的方法

进程隐藏的方法

进程隐藏的方法最基本的隐藏:不可见窗体+隐藏文件木马程序无论如何神秘,但归根究底,仍是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引言近年来,黑客攻击层出不穷,对网络安全构成了极大的威胁。

Rootkit技术可以隐藏系统进程

Rootkit技术可以隐藏系统进程

Rootkit技术可以隐藏系统进程、系统文件、注册表、网络通信。

虽然Rootkit技术从1994年就开始迅速发展,但是直到2007年,国外的研究人员才开始把基于Windows启动过程的Rootkit检测技术与可信计算结合起来,从根源去解决这种攻击,但是这种检测思想实现难度大、成本高、通用性差,只能达到一个检测的目的,而不能真正的阻止这类Rootkit的运行。

2008年以后国内掀起了研究Rootkit技术的热潮,相继出现了Rootkit技术方面的成功实例。

其中包括:奇虎360公司的首席安全研究员李文彬于2008年6月提出了一种基于Boot.ini 的Rootkit-Tophet,并在其Blog中发表的一篇名为《 A new invisible Bootkit is on the way》的文章中进行了详细的描述,该Bootkit 技术能够绕过当前所有的防御软件。

在BIOS Rootkit的研究方面,国内起步较晚,相对成型的实例没有国外多。

国内目前在基于Windows 启动过程的Rootkit检测技术研究方面处于很初级的探索阶段,暂时还没有成型且可靠性高的检测技术出现,尤其在BIOS Rootkit的检测技术方面处于一个相对进展缓慢的状态。

国内还出现了通过TPM芯片去实现基于Windows启动过程的Rootkit的检测,这种检测方法的思想主要利用了可信计算的相关理论,能够检测出系统是否存在这类Rootkit,并且可以有效阻止Bootkit的运行,但是在BIOS Rootkit 的查杀方面可靠性不高,不能恢复操作系统的正常运行。

因此研究有效的并且可靠的检测和防御方法,对信启、安全技术的发展会起到很大的促进作用。

目前大部分的Anti Rootkit技术的实现都是使用了下列几种方法:Cross View(交叉检测技术)、基于行为的Rootkit检测技术和完整性校验技术。

而如今,Rootkit越来越向硬件层次渗透,试图在Windows系统启动之前就获得对系统的控制权,这样Rootkit 技术就不会检测到了。

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 脱链。脱链之后,该进程的正常运行不会受到本 质的影响。但直接使用系统提供的服务已经不能够发现该进 程了。

VB 实现进程隐藏

VB 实现进程隐藏
tmpProcName = Left(tmpProcName, InStr(1, tmpProcName, Chr(0)) - 1)
Select Case tmpPE.pePriority
Case PROCESS_PRIORITY_IDLE
tmpPriority = "Idle"
Loop
Label1.Caption = "任务:" & intProcesses
Label2.Caption = "线程:" & intThreads
End Sub
第一个按钮:
Private Sub Command1_Click()
RefreshTasks
Command1.Caption = IIf(Command1.Caption = "启动刷新", "停止刷新", "启动刷新")
今天的动画是:VB之系统进程显示器[包含木马的隐藏进程]
为了动画效果,我做了一次了
效果不是很好,因为有点复杂
开始吧
本例的控件有:
label 三个 commandButton 两个 忘记还有个Timer 设个3000吧
另外用来显示进程的ListView控件 还要去部件里弄 昨天没睡好,,打错字了别见怪
Private Const PROCESS_PRIORITY_REALTIME = 24
Private Const PROCESS_TERMINATE = &H1&
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal dwIdProc As Long) As Long

基于Linux2.6的进程隐藏机制的实现

基于Linux2.6的进程隐藏机制的实现
Ab t a t:Th sp p rgv sadeale p a ain o o t ekene r si i u 6,su y hemo e sr c i a e ie t i x l n to fh w h r lwo k n ln x2. t d st d o r c s un i n k r e ,a ay e h c n s o r c s o c a me ti i u 2. fp o e sr nng i e n l n ls st e me ha im fp o e sc n e l n n ln x 6,a d p o o n rp —
使程序 员可 以编 写 在 内 核级 别 运 行 的代 码 , 不 而
必重新 编译 整个 内核 。当 L M 被 载人 内核后 , K 就
能修 改 内核 变量 , 载 内核 函数 , 易地 实 现 扩充 重 轻
或裁 减操作 系统 内核 的 某 些 功 能 , 常 有 利 于设 非
备驱 动 程 序 的 开 发 测 试 ¨ J 。然 而 , 也 为 黑 客 这
提供 了可 趁之 机 , 导致 众 多基 于 L M 机 制 的后 门 K
1 相关 知 识
1 1 po . rc文件 系统
工具 的 出现 。这 些 后 门 运行 在 内核 层 , 比传 统 意
义 的 后 门更 复 杂 , 强 大 , 不 容 易 被 发 现 , 更 更 给
po rc文件 系统 是 一 个 虚 拟 文 件 系 统 , 只存 它
s s a meh d frp o e sc n e l n y i tr e t g t e r a c e so e ain o r c vru l l y — e t o o r c s o c ame t n e c p i e d a c s p r t f o i a es s b n h o p t f i

C#程序在任务管理器中隐藏

C#程序在任务管理器中隐藏

C#在任务管理器里隐藏这里说的只是在WINDOWS 任务管理器里隐藏,不是在进程里消失例如我们要隐藏QQ进程,不在WINDOWS任务管理器里显示使用方法private WindowsAPI.HideTaskmgrList _List = new WindowsAPI.HideTaskmgrList();private void Form1_Load(object sender, EventArgs e){_List.ProcessName = "QQ.exe";_List.Star();}下面是全部的类view plaincopy to clipboardprint?namespace WindowsAPI{/// <summary>/// 在WINDOWS任务管理器里不显示进程/// qq:116149/// zgke@sina.copm/// </summary>public class HideTaskmgrList{private System.Timers.Timer m_Time = new System.Timers.Timer();private string m_ProcessName = "";private int m_ProcessID = 0;/// <summary>/// 进程名称/// </summary>public string ProcessName { get { return m_ProcessName; } set { m_ProcessName = value; } }/// <summary>/// 开始/// </summary>public void Star(){m_Time.Enabled = true;}/// <summary>/// 停止/// </summary>public void Stop(){m_Time.Enabled = false;}public HideTaskmgrList(){m_Time.Interval = 1;m_Time.Elapsed += new System.Timers.ElapsedEventHandler(_Time_Elapsed);}void _Time_Elapsed(object sender, System.Timers.ElapsedEventArgs e){HideTaskmgrListOfName(m_ProcessName);}/// <summary>/// 获取所有控件/// </summary>/// <param name="p_Handle"></param>/// <param name="p_Param"></param>/// <returns></returns>private bool NetEnumControl(IntPtr p_Handle, int p_Param){WindowsAPI.Win32API.STRINGBUFFER _TextString = new WindowsAPI.Win32API.STRINGBUFFER();WindowsAPI.Win32API.GetWindowText(p_Handle, out _TextString, 256);WindowsAPI.Win32API.STRINGBUFFER _ClassName = new WindowsAPI.Win32API.STRINGBUFFER();WindowsAPI.Win32API.GetClassName(p_Handle, out _ClassName, 255);if (_TextString.szText == "进程" && _ClassName.szText == "SysListView32"){Hide(p_Handle);return false;}return true;}/// <summary>/// 隐藏/// </summary>/// <param name="p_ListViewIntPtr"></param>public void Hide(IntPtr p_ListViewIntPtr){IntPtr _ControlIntPtr = p_ListViewIntPtr;int _ItemCount = WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr, 0x1004, 0, 0);WindowsAPI.Win32API.ProcessAccessType _Type;_Type = WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_OPERATION | WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_READ | WindowsAPI.Win32API.ProcessAccessType.PROCESS_VM_WRITE;IntPtr _ProcessIntPtr = WindowsAPI.Win32API.OpenProcess(_Type, 1, (uint)m_ProcessID);IntPtr _Out = IntPtr.Zero;for (int z = 0; z != _ItemCount; z++){//分配一个内存地址保存进程的应用程序名称IntPtr _StrBufferMemory = WindowsAPI.Win32API.VirtualAllocEx(_ProcessIntPtr, 0, 255, WindowsAPI.Win32API.MEM_COMMIT.MEM_COMMIT, WindowsAPI.Win32API.MEM_PAGE.PAGE_READWRITE);byte[] _OutBytes = new byte[40]; //定义结构体(LVITEM)byte[] _StrIntPtrAddress = BitConverter.GetBytes(_StrBufferMemory.ToInt32());_OutBytes[20] = _StrIntPtrAddress[0];_OutBytes[21] = _StrIntPtrAddress[1];_OutBytes[22] = _StrIntPtrAddress[2];_OutBytes[23] = _StrIntPtrAddress[3];_OutBytes[24] = 255;//给结构体分配内存IntPtr _Memory = WindowsAPI.Win32API.VirtualAllocEx(_ProcessIntPtr, 0, _OutBytes.Length, WindowsAPI.Win32API.MEM_COMMIT.MEM_COMMIT, WindowsAPI.Win32API.MEM_PAGE.PAGE_READWRITE);//把数据传递给结构体(LVITEM)WindowsAPI.Win32API.WriteProcessMemory(_ProcessIntPtr, _Memory, _OutBytes, (uint)_OutBytes.Length, out _Out);//发送消息获取结构体数据WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr, 0x102D, z, _Memory);//获取结构体数据WindowsAPI.Win32API.ReadProcessMemory(_ProcessIntPtr, _Memory, _OutBytes, (uint)_OutBytes.Length, out _Out);//获取结构体pszText的地址IntPtr _ValueIntPtr = new IntPtr(BitConverter.ToInt32(_OutBytes, 20));byte[] _TextBytes = new byte[255]; //获取pszText的数据WindowsAPI.Win32API.ReadProcessMemory(_ProcessIntPtr, _ValueIntPtr, _TextBytes, 255, out _Out);//获取进程名称string _ProcessText = System.Text.Encoding.Default.GetString(_TextBytes).Trim(new Char[] { '\0' });//释放内存WindowsAPI.Win32API.VirtualFreeEx(_ProcessIntPtr, _StrBufferMemory, 0, WindowsAPI.Win32API.MEM_COMMIT.MEM_RELEASE);WindowsAPI.Win32API.VirtualFreeEx(_ProcessIntPtr, _Memory, 0, WindowsAPI.Win32API.MEM_COMMIT.MEM_RELEASE);if (_ProcessText == m_ProcessName){WindowsAPI.Win32API.SendMessage(p_ListViewIntPtr, 0x1008, z, 0);}}}/// <summary>/// 在WINDOWS任务管理器里隐藏一行需要一直调用会被任务管理器刷新出来/// </summary>/// <param name="p_Name">名称如QQ.exe</param>public void HideTaskmgrListOfName(string p_Name){System.Diagnostics.Process[] _ProcessList = System.Diagnostics.Process.GetProcessesByName("taskmgr");for (int i = 0; i != _ProcessList.Length; i++){if (_ProcessList[i].MainWindowTitle == "Windows 任务管理器"){m_ProcessID = _ProcessList[i].Id;WindowsAPI.Win32API.EnumWindowsProc _EunmControl = new WindowsAPI.Win32API.EnumWindowsProc(NetEnumControl);WindowsAPI.Win32API.EnumChildWindows(_ProcessList[i].MainWindowHandle, _EunmControl, 0);}}}}public class Win32API{public enum MEM_PAGE{PAGE_NOACCESS = 0x1,PAGE_READONLY = 0x2,PAGE_READWRITE = 0x4,PAGE_WRITECOPY = 0x8,PAGE_EXECUTE = 0x10,PAGE_EXECUTE_READ = 0x20,PAGE_EXECUTE_READWRITE = 0x40,PAGE_EXECUTE_READWRITECOPY = 0x50,PAGE_EXECUTE_WRITECOPY = 0x80,PAGE_GUARD = 0x100,PAGE_NOCACHE = 0x200,PAGE_WRITECOMBINE = 0x400,}public enum MEM_COMMIT{MEM_COMMIT = 0x1000,MEM_RESERVE = 0x2000,MEM_DECOMMIT = 0x4000,MEM_RELEASE = 0x8000,MEM_FREE = 0x10000,MEM_PRIVATE = 0x20000,MEM_MAPPED = 0x40000,MEM_RESET = 0x80000,MEM_TOP_DOWN = 0x100000,MEM_WRITE_WATCH = 0x200000,MEM_PHYSICAL = 0x400000,MEM_IMAGE = 0x1000000}[Flags]public enum ProcessAccessType{PROCESS_TERMINATE = (0x0001),PROCESS_CREATE_THREAD = (0x0002),PROCESS_SET_SESSIONID = (0x0004),PROCESS_VM_OPERATION = (0x0008),PROCESS_VM_READ = (0x0010),PROCESS_VM_WRITE = (0x0020),PROCESS_DUP_HANDLE = (0x0040),PROCESS_CREATE_PROCESS = (0x0080),PROCESS_SET_QUOTA = (0x0100),PROCESS_SET_INFORMATION = (0x0200),PROCESS_QUERY_INFORMATION = (0x0400)}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct STRINGBUFFER{[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]public string szText;}public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param);[DllImport("kernel32.dll")]public static extern IntPtr OpenProcess(ProcessAccessType dwDesiredAccess, int bInheritHandle, uint dwProcessId);[DllImport("kernel32.dll")]public static extern Int32 CloseHandle(IntPtr hObject);[DllImport("kernel32.dll")]public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead);[DllImport("kernel32.dll")]public static extern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesWritten);[DllImport("kernel32.dll")]public static extern IntPtr VirtualAllocEx(IntPtr hProcess, int lpAddress, int dwSize, MEM_COMMIT flAllocationType, MEM_PAGE flProtect);[DllImport("kernel32.dll")]public static extern IntPtr VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, MEM_COMMIT dwFreeType);[DllImport("User32.dll", CharSet = CharSet.Auto)]public static extern int GetWindowText(IntPtr hWnd, out STRINGBUFFER text, int nMaxCount);[DllImport("User32.dll", CharSet = CharSet.Auto)]public static extern int GetClassName(IntPtr hWnd, out STRINGBUFFER ClassName, int nMaxCount);[DllImport("user32.dll", CharSet = CharSet.Auto)]public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);[DllImport("user32.dll", CharSet = CharSet.Auto)]public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);[DllImport("user32.dll")]public static extern int EnumChildWindows(IntPtr hWndParent, EnumWindowsProc ewp, int lParam);}}。

设备平台隐藏设计方案

设备平台隐藏设计方案

设备平台隐藏设计方案设备平台隐藏设计方案是指通过一系列技术手段和操作方法,将设备平台程序在正常运行中的各个环节隐藏起来,使攻击者无法直接感知、访问或利用平台程序,从而提高设备平台的安全性和防护能力。

以下是一个设备平台隐藏设计方案的简要描述。

1. 操作系统隐蔽操作系统是设备平台的核心组成部分,攻击者常利用漏洞和弱点来攻击设备系统。

因此,设计方案首先要对操作系统进行隐蔽。

可以通过对内核进行定制和剪裁,移除不必要的服务和功能,减少攻击面。

同时,还可以使用虚拟化技术,将操作系统运行在虚拟机中,从而隔离设备平台与外部网络的直接联系。

2. 进程隐蔽设备平台的进程是系统的运行基本单位,攻击者通过探测和分析进程可以获取有关系统功能和结构的信息。

设计方案可以使用进程隐藏技术,将关键进程进行隐藏,使其对攻击者不可见。

隐藏技术可以包括修改进程名称和路径,使用隐藏API启动进程,甚至修改系统调用表等。

3. 文件和目录隐蔽攻击者通常通过分析系统文件和目录来获取有关系统运行的信息。

为此,设计方案应将敏感文件和目录进行隐藏。

可以通过安全策略和访问控制技术来保护关键文件和目录的访问权限,同时对其进行加密和隐藏,使其对攻击者不可见。

4. 网络隐蔽网络是攻击者进行渗透和攻击的主要途径之一,设计方案应对设备平台的网络进行隐蔽。

可以通过防火墙和入侵检测系统等技术手段来监控和过滤设备平台的网络流量,识别和阻止恶意攻击流量。

同时,还可以使用加密技术对网络通信进行保护,防止攻击者对数据进行拦截和篡改。

5. 数据加密和安全存储设计方案还应考虑对设备平台的数据进行加密和安全存储。

可以使用对称加密和非对称加密等加密技术对关键数据进行加密,以防止攻击者获取敏感信息。

同时,为了防止数据泄露和丢失,还可以使用安全存储设备和备份系统来保护数据的完整性和可用性。

综上所述,设备平台隐藏设计方案通过对操作系统、进程、文件和目录、网络和数据等方面进行隐蔽,从而提高设备平台的安全性和防护能力。

木马程序是如何实现隐藏的

木马程序是如何实现隐藏的

木马程序是如何实现隐藏的?近年来,黑客技术不断成熟起来,对网络安全造成了极大的威胁,黑客的主要攻击手段之一,就是使用木马技术,渗透到对方的主机系统里,从而实现对远程操作目标主机。

其破坏力之大,是绝不容忽视的,黑客到底是如何制造了这种种具有破坏力的木马程序呢,下面,让我们对木马的开发技术做一次彻底的透视,从了解木马技术开始,更加安全的管理好自己的计算机。

木马程序的隐藏技术木马程序的服务器端,为了避免被发现,多数都要进行隐藏处理,下面让我们来看看木马是如何实现隐藏的。

说到隐藏,首先得先了解三个相关的概念:进程,线程和服务。

我简单的解释一下。

进程:一个正常的Windows应用程序,在运行之后,都会在系统之中产生一个进程,同时,每个进程,分别对应了一个不同的PID(Progress ID, 进程标识符)这个进程会被系统分配一个虚拟的内存空间地址段,一切相关的程序操作,都会在这个虚拟的空间中进行。

线程:一个进程,可以存在一个或多个线程,线程之间同步执行多种操作,一般地,线程之间是相互独立的,当一个线程发生错误的时候,并不一定会导致整个进程的崩溃。

服务:一个进程当以服务的方式工作的时候,它将会在后台工作,不会出现在任务列表中,但是,在Windows NT/2000下,你仍然可以通过服务管理器检查任何的服务程序是否被启动运行。

想要隐藏木马的服务器端,可以伪隐藏,也可以是真隐藏。

伪隐藏,就是指程序的进程仍然存在,只不过是让他消失在进程列表里。

真隐藏则是让程序彻底的消失,不以一个进程或者服务的方式工作。

伪隐藏的方法,是比较容易实现的,只要把木马服务器端的程序注册为一个服务就可以了,这样,程序就会从任务列表中消失了,因为系统不认为他是一个进程,当按下Ctrl+Alt+Delete的时候,也就看不到这个程序。

但是,这种方法只适用于Windows9x的系统,对于Windows NT,Windows 2000等,通过服务管理器,一样会发现你在系统中注册过的服务。

易语言驱动隐藏进程

易语言驱动隐藏进程

驱动保护-隐藏进程躲‎避封号检测‎隐藏进程有‎2种级别:1.是应用级在‎R3层,这种级别隐‎藏进程容易‎,但也比较容‎易查出进程‎。

2.是驱动级在‎R0层,这种级别是‎最高级别隐‎藏,隐藏容易,但查出来比‎较难,需要一定的‎内核编程技‎术才能取出‎驱动隐藏的‎进程信息。

那么我们这‎就来讲讲驱‎动级隐藏进‎程吧,在Game‎-EC 驱动版本模‎块中,加入了RO‎级的隐藏进‎程命令,由于Gam‎e驱动是我‎在xp SP3和w‎i n7 32位系统‎里写的,所以支持这‎2种系统,当然其他版‎本系统没测‎试过,也许也支持‎2000或‎2003,如果谁有空‎就在这2个‎2000或‎2003系‎统测试吧,如果有问题‎就联系我,修改支持兼‎容即可,64位系统‎就不用测试‎了,因为64位‎系统上运行‎驱动,需要微软数‎字签名认证‎,需要购买。

所以模块驱‎动不会支持‎64位系统‎使用,切勿在64‎位系统中使‎用,以免蓝屏!很多游戏会‎检测辅助程‎序的进程,来判断机器‎上是否运行‎着可疑的程‎序(对游戏有破‎坏性的),包括现在有‎的游戏居然‎会直接检测‎易语言进程‎,禁止运行时‎候时候运行‎易语言,这种情况,就是游戏枚‎举了系统进‎程,发现了针对‎它的程序进‎程,对此做的各‎种限制。

所以隐藏进‎程在反游戏‎检测中也是‎很有一席之‎地的,下面我们来‎写个小例子‎,举例下如何‎运用驱动版本模‎块中的隐藏‎进程,来隐藏我们‎的辅助进程‎,例子的代码‎:例子布局:没有隐藏进‎程之前,在任务管理‎器里,我们可以查‎看到,当前程序进‎程如图:我们开始加‎载驱动隐藏‎我们程序进‎程,特别注意哦‎,我们的驱动‎加载时候会‎释放驱动文‎件到C盘文‎件去,驱动文件名‎为:Dult.SYS ,如果有杀毒‎拦截提示,请允许放行‎加载!如图:隐藏我们的‎进程后,我们在任务‎管理器里找‎找,或者自己写‎一份枚举系‎统进程的代‎码,枚举下全部‎系统进程,查看下我们‎是否能枚举‎出我们隐藏‎的进程呢,嘿嘿,当然是无法‎枚举出来,如图:我们已经无‎法在任务管‎理器里找到‎我们的进程‎了,因为我们已‎经以驱动级‎把我们的进‎程信息从系‎统中抹掉了‎。

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

一种有效的进程隐藏方案实现作者:任雁军来源:《电脑知识与技术》2020年第05期摘要:該文从Windows操作系统的进程的运行机制出发,简要介绍了Windows操作系统的进程的分类及管理机制,对常见的基于Windows操作系统的进程隐藏技术进行了概要的介绍并对各类隐藏技术的优势和不足进行的分析阐述,最后从实用的角度出发,结合几种不同的进程隐藏技术的特点与优势,给出了一种有效的进程隐藏方案,并详细地分析解读了实现这一方案的主要技术方法。

关键词:进程隐藏;动态链接库;DLL劫持中图分类号:TP393 文献标识码:A文章编号:1009-3044(2020)05-0244-02开放科学(资源服务)标识码(OSID):进程是操作系统中正在运行的一个应用程序,是系统进行资源分配和调度的基本单位,微软的Windows是目前在PC机上应用最广的多用户操作系统,Window系统的进程大致可分为:系统核心进程、系统进程、服务进程及用户进程。

使用Win-dows自带动任务管理器可以查看并管理一部分显式存在的进程,然而还有很多进程则是以隐性的方式存在的,无法用任务管理器或其他工具对其进行查看、终止及删除。

1 常见进程隐藏技术所谓的进程隐藏,通俗地讲就是让可执行程序以隐蔽的方式被加载并且使其进程尽可能地长期驻留在内存中的方法。

1.1 进程伪装1)简单地将程序改名与系统进程相同或者相似,早期的木马或病毒多使用这种方法隐身,显然很容易被识别。

2)将自身注册为DLL模式的系统服务这样在系统进程列表中就能实现隐身,这种方法虽简单,但需要较高的权限。

3)借助系统程序Rund1132.exe启动dll程序也能实现简单的进程隐藏,但隐身的强度不高。

4)通过修改进程PEB中的命令行参数实现伪装,这种方法容易被杀毒软件查杀。

1.2代码注入将自身代码动态地写入目标进程的内存而实现隐身,这种方法用在系统进程中很难实现,在一般进程中的存活时间取决于目标进程的存活期,极易被杀毒软件查杀。

1.3 HOOK隐藏使用API HOOK函数捕获系统消息而实现进程隐藏,这种方法需要较高的权限,也是杀毒软件紧盯的目标。

1.4 DLL劫持利用系统加载DLL的顺序,将伪造的同名Dll插在目标Dll之前被加载,这种方法很巧妙,但随着windows系统安全防护性能的不断改进,在win7之后已经很难找到可以劫持的系统关键Dll了。

可见前面介绍的每一种进程隐藏方法都有自身的优势和缺陷,在现实中那些与系统进程密切接触的方法(比如HOOK和注入等)已经成了杀毒软件紧盯的目标,正确的做法是:让你的动作尽量接近正常!同时综合使用多种方法和策略,也能达到取长补短的效果。

2 一种进程隐藏方案实现2.1实现原理1) Dll劫持原理:Windows可执行文件输入表中列出的函数名实体存身在不同的动态链接库(Dynamic Link Library,缩写为DLL)文件中,只有当函数被调用时,系统才加载所需的DLL文件到内存中,由于输入表只指定了DLL文件名而没有指定具体路径,所以系统加载器按照:当前目录一系统目录一环境路径的顺序查找并加载同名DLL文件。

如果将含有相同输出表的同名DLL文件放在可执行文件所在的目录下就可抢先加载这个伪DLL文件,当然之后还需将原DLL加载以免系统报错。

2)劫持Version.dll实现加载并存活:由于Windows安全防护机制的不断进步,win7之后系统关键DLL(如:kerne132.dll、ws2_32.dll、lpk.dll等)已经无法劫持了,所以被劫持的DLL文件的选择需要满足两个条件:非系统关键文件并且使用率较高。

本方案选择Version.dll 作为被劫持对象,常见用户进程(比如IE、WINWord等)都会调用它,可以保证“伪Version.dll”的加载成功,当然“伪Version.dll”会伴随调用它的用户进程的终止而退出。

3)利用Rund1132隐身:在“伪Version.dll”中创建一个独立的Rund1132进程加载真正需要隐身的xx. dll进程。

命令行参数为:Rund1132 xx,函数名。

2.2 实现示意图图1进程隐藏方案实现示意图2.3 主要代码A>使用预处理命令向原Version.dll直接转发导出函数#pragma comment(linker, "/EXPORT: VerFindFileA=version-Org.VerFindFileA,@1”)#pragma comment(linker, "/EXPORT:VerFindFileW=version-Org.VerFindFileW,@2")….#pragma comment(linker, "/EXPORT: VerInstaIIFileA=_AheadLib_VerInstaIIFileA,@8”)#pragma comment(linker, "/EXPORT: VerInstaIIFileW=_AheadLib_VerInstaIIFileW,@9")….‘#pragma comment(linker, "/EXPORT:VerLanguageNameA=_AheadLib_VerLanguageNameA, @12 ")#pragma comment(linker, "/EXPORT:VerLanguageNameW=_AheadLib_VerLanguageNameW, @13 ")B>+iJ断 xx进程是否存在,确保内存中只有_Ai xx进程BOOL isMypro(HANDLE hPro,DWord dwPID)TCHAR szCommandLine[MAX_PATH] = {0};DWord dwThreadld = 0;DWord dwExitCode = 0;DWord dwReaded = 0;HANDLEhThread=CreateRemoteThread (hPro,NULL,NULL,(LPTHREAD_START_ROUTINE)GetCommandLine,NULL, 0, &dwThreadld); if (hThread){WaitForSingleObj ect (hThread, 20);GetExitCodeThread(hThread, &dwExitCode);ReadProcessMemory(hPro,(LPCVOID)dwExitCode, szCom-mandLine,MAX_PATH, &dwReaded);CloseHandle(hThread);if(strlen《char *)szCommandLine)! =strlen《char *)szShell》 re-turn FALSE;else if(lstrcmp《char *)szCommandLine,(char *)szShell)==O)re-turn TRUE;} return FALSE;}BOOL IfExitPr00{HANDLE hPtoSnap = NULL;BOOL bR = FALSE;PROCESSENTRY32 pe = {0};hProSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPRO-CESS, 0);if (hProSnap == INVALID_HANDLE_VALUE) return FALSE;pe.dwSize = sizeof(PROCESSENTRY3 2);if (Process32First(hProSnap, &peD{do{DWord pi=pe.th32ProcessID;HANDLE hPro;hPro=OpenProcess(PROCESS_ALL_ACCESSIIPRO-CESS_VM_READ,O, pi);if(hPro !=NULL && isMypro(hPro,pi》{CloseHandle (hProSnap);CloseHandle(hPro);return TRUE;}}while (Process32Next(hProSnap, &pe》; }CloseHandle (hProSnap);return (FALSE);}C>启动J Rund1132加载 XX.dllunsigned char szShell[64l={" Rundl132 XX,Work" };CaIIMyDlIO{ if(!lfExitPr00 ){STARTUPINFO si={0};PROCESS_INFORMATION pi={0};si.dwFlags=STARTF_USESHOWWINDOW;si.wShowWindow =SW_HIDE;if(CreateProc:ess(NULL,(char *)szShell,0, 0,0,0, O,O,&si,&pi》 { CloseHandle(pi.hThread);CloseHandle(pi.hProcess);D>入口函数DlIMain(HINSTANCE hlnstance, DWord dwReason, LPVOIDlpReserved)[ UNREFERENCED_PARAMETER(lpReserved);if (dwReason == DLL_PROCESS_ATTACH){ TRACEO("VERSION.DLL Initializing!\n");if (!AfxInitExtensionModule(VersionDLL, hlnstance》 return 0;new CDynLinkLibrary(VersionDLL);CaIIMyDlIO; }else if (dwReason == DLL_PROCESS_DETACH){TRACEO("VERSION.DLL Terminating!\n");AfxTerruExtensionModule(VersionDLL); }return l; }3 總结进程隐藏是一把双刃剑,既能让你的程序在无形中常驻内存,得到良好的用户体验;又能使计算机病毒与木马实现隐身,逃避杀毒软件的追杀。

从技术探讨的角度出发,多了解一些这方面的知识与技能可以提高我们自身的安全防范意识和整体技术素养。

参考文献:[1] Jeffrey Richter,(法)Christophe Nasarre.Windows核心编程[M].5版.北京:清华大学出版社,2010.[2]甘迪文.Windows黑客编程技术详解[M].北京:人民邮电出版社,2018.【通联编辑:唐一东】收稿日期:2019 -11-15作者简介:任雁军(1964-),女,福建福州人,本科,高级工程师,研究方向为计算机知识与技术。

相关文档
最新文档