一种有效的进程隐藏方案实现
- 格式:doc
- 大小:184.00 KB
- 文档页数:7
0 引言随着计算机技术的迅速发展和网络应用的日益普及,恶意代码出现的频率越来越高。
目前,隐藏功能已成为很多恶意代码的一个重要特征,分析恶意代码使用的隐藏手段和相关的技术,可以让我们更好地提高防范意识,并据此采取相应的防御和检测措施。
特洛伊木马(简称木马)是具有较强隐藏功能的一类恶意代码。
它通常伪装成合法程序或隐藏在合法程序中,通过执行恶意代码,为入侵者提供非授权访问系统的后门[1]。
本文首先简单介绍了木马实现的常用技术,接着重点分析了Windows环境下木马实现进程隐藏经常使用的技术。
1 木马实现常用技术1.1 注册表修改很多木马在实现时都会修改注册表,修改的目的通常是:借助于注册表来实现启动或隐藏。
在注册表的多个项目中都包含启动项。
启动项的数值可以设置为用户指定的、伴随系统启动或服务启动而自动运行的程序的绝对路径。
因此,将启动项的数值设置为木马程序的路径,就可以实现木马的启动。
但是,使用注册表编辑器能够很容易地将注册表项的数值删除,为此,很多木马在使用时都加入了时间控制程序段,以监视注册表中相应的数据是否存在,一旦发现被删除则会立即重新写入。
1.2 反向连接反向连接就是被攻击者主动连接攻击者的过程,通常是运行木马的服务端进程主动连接客户端控制进程并进行通信的过程,也称为反弹技术[2] [3]。
其基本原理是利用防火墙对由内到外的连接疏于防范的弱点来实现由内到外的主动连接。
NameLess木马实现时也用到了反向连接,它使用嗅探原理来取得控制端的IP地址,然后实现反向连接。
1.3 端口复用端口复用是指在一个端口上建立了多个连接,而不是在一个端口上面开放了多个服务。
一种常用的端口复用技术,就是利用系统实际存在的系统的合法端口进行通讯和控制,如21、23、80等,使一个端口除了完成正常的功能外,还可用于木马通信,而不是使用一个新开的端口号[2]。
这样的好处就是非常隐蔽,不用自己开端口也不会暴露自己的访问,因为通讯本身就是系统的正常访问。
恶意代码的实现技术摘要:本文着重讲述恶意代码实现技术中的攻击渗透技术和隐藏技术。
关键词:本地攻击网络攻击进程隐藏通讯隐藏在实现恶意代码的过程中,主要涉及到攻击渗透技术、自动升级技术、随机启动技术、隐藏技术、远程控制技术、破坏技术等六大技术体系。
这些技术中,攻击渗透技术和隐藏技术是对恶意代码编写者要求较高的技术,也是影响最为深远的技术,这两种技术的重大创新可能会影响整个安全防护体系。
下面我将对这两种技术做详细的阐述。
1 攻击渗透技术攻击渗透技术的任务是保证恶意代码能够植入到目标主机中去。
常见的攻击渗透方式有两种:本地攻击和网络攻击。
本地攻击是早期病毒常用的攻击方法,主要攻击对象是本地存储体,包括磁盘的引导区或者是磁盘上存储的文件等。
网络攻击过程包括邮件攻击和漏洞攻击两种方式。
邮件攻击的主要方式是通过获取受害主机内部存储的邮件地址列表作为邮件接收者,然后将恶意代码自身作为邮件的附件发送出去。
漏洞攻击技术主要有弱口令漏洞攻击和缓冲溢出漏洞攻击。
典型的黑客网络攻击过程包括信息搜集、弱点分析、攻击渗透、痕迹清除、潜伏等待五个阶段。
恶意代码的攻击过程和典型的黑客攻击过程并不完全相同,由于恶意代码本身短小精悍,功能相对单一,不可能完成过多的功能,并且具有自主攻击能力的恶意代码,一般都会有明显异常的网络行为,如果受害对象具有较强的安全意识,采取必要的安全措施,相对来说是比较容易防范的,只有在受害对象的网络安全意识不强的情况下才能完成攻击任务。
所以,恶意代码的攻击渗透过程很少考虑到清除痕迹,或者只是简单的进行日志清理工作。
恶意代码的攻击过程为:创造攻击环境、构造攻击目标、实施攻击过程、等待攻击结果。
创造攻击环境的方法和具体攻击方法有关。
在利用邮件进行攻击的时候,创造的条件需要能够发送邮件,实现方式可以控制现有的邮件发送程序,比如outlook,也可以自己利用socket 接口实现邮件传输协议,编写自己的邮件发送程序。
毕业论文声明本人郑重声明:1.此毕业论文是本人在指导教师指导下独立进行研究取得的成果。
除了特别加以标注地方外,本文不包含他人或其它机构已经发表或撰写过的研究成果。
对本文研究做出重要贡献的个人与集体均已在文中作了明确标明。
本人完全意识到本声明的法律结果由本人承担。
2.本人完全了解学校、学院有关保留、使用学位论文的规定,同意学校与学院保留并向国家有关部门或机构送交此论文的复印件和电子版,允许此文被查阅和借阅。
本人授权大学学院可以将此文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本文。
3.若在大学学院毕业论文审查小组复审中,发现本文有抄袭,一切后果均由本人承担,与毕业论文指导老师无关。
4.本人所呈交的毕业论文,是在指导老师的指导下独立进行研究所取得的成果。
论文中凡引用他人已经发布或未发表的成果、数据、观点等,均已明确注明出处。
论文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的研究成果做出重要贡献的个人和集体,均已在论文中已明确的方式标明。
学位论文作者(签名):年月关于毕业论文使用授权的声明本人在指导老师的指导下所完成的论文及相关的资料(包括图纸、实验记录、原始数据、实物照片、图片、录音带、设计手稿等),知识产权归属华北电力大学。
本人完全了解大学有关保存,使用毕业论文的规定。
同意学校保存或向国家有关部门或机构送交论文的纸质版或电子版,允许论文被查阅或借阅。
本人授权大学可以将本毕业论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存或编汇本毕业论文。
如果发表相关成果,一定征得指导教师同意,且第一署名单位为大学。
本人毕业后使用毕业论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为大学。
本人完全了解大学关于收集、保存、使用学位论文的规定,同意如下各项内容:按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存或汇编本学位论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版,允许论文被查阅和借阅。
隐藏应用的方法
隐藏应用的方法有多种,以下是一些常用的方法:
1. 文件夹隐藏法:将应用图标拖动到一个新建的文件夹内,然后将文件夹中的所有图标都移出,使文件夹内没有任何图标显示。
这样,应用图标就会被隐藏起来。
2. 搜索隐藏法:在应用列表或桌面上,使用搜索功能来查找应用程序,然后打开应用。
在应用打开后,按住返回键或者主页键,将应用切换到后台运行,这样应用图标就不会在桌面或应用列表中显示。
3. 第三方应用隐藏法:有一些第三方应用可以帮助隐藏应用图标。
这些应用通常会创建一个隐藏应用的专用空间,只有在输入特定的密码或手势后才能显示和访问隐藏的应用图标。
4. 设置中的隐藏法:某些Android手机系统提供了隐藏应用的设置选项。
可以在“设置”-“应用”或“应用管理器”中找到要隐藏的应用,然后选择隐藏或禁用该应用,这样它就不会在应用列表或桌面上显示。
请注意,隐藏应用的方法可能因不同品牌和型号的手机而有所差异。
所以建议在操作前先查找相关资料或咨询手机厂商的官方支持。
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.代码自删除代码自删除是一种在代码执行后将自身删除的技术。
这种方法可以有效地隐藏函数的实现和逻辑,防止代码被分析和理解。
一种有效的进程隐藏方案实现作者:任雁军来源:《电脑知识与技术》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-),女,福建福州人,本科,高级工程师,研究方向为计算机知识与技术。