特洛伊木马原理.doc

特洛伊木马原理.doc

ID:59297250

大小:28.01 KB

页数:2页

时间:2020-09-06

特洛伊木马原理.doc_第1页
特洛伊木马原理.doc_第2页
资源描述:

《特洛伊木马原理.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、摘要:本文针对于黑软隐藏程序的技术对其基本原理和多种实现方法做了较为深入的剖析。  关键字:黑客软件、隐藏程序、VisualC++   一、引言  “特洛伊木马”曾在网上造成很大恐慌,此类黑客程序通过欺骗手段在普通网络用户端安装木马的服务端,使用户的计算机在上网时留有后门,而黑客则可以通过这个后门对被感染的计算机随心所欲地进行监视、破坏。显然这种黑软对于普通网络用户的危害是非常严重的。  就本质而言黑客软件仍然属于应用程序,是基于套接字的网络通讯程序。因此黑客能成功攻击被感染计算机的一个非常必要的先决条件就是此时被攻击方已经有木马程序的服务端在运行。由于木马程序是一种恶意程序,能在被攻击者没有

2、察觉的情况下悄悄启动运行为攻击者打开后门,故显然不能象其他程序一样堂而皇之的显示在任务栏和任务列表中,否则会立即为用户所察觉而将其关闭,也就失去了为攻击者提供后门的作用。本文下面就针对其隐藏程序的机理展开讨论。  二、程序在任务栏中的隐藏原理  程序在任务栏的隐藏比较简单,首先要保证程序主界面的隐藏,一般是通过修改应用程序类的初始化实例函数InitInstance()的ShowWindow()语句的SW_SHOW参数为SW_HIDE来实现的。主界面隐藏的同时任务栏虽然也会消失,但在程序启动时会闪一下,因此需要修改程序的扩展属性。一种方法是SDK的写法,即直接利用GetWindowLong()获

3、取到当前的扩展属性然后通过逻辑运算去掉原有的WS_EX_APPWINDOW属性,并新添加一个WS_EX_TOOLWINDOW属性,这样系统会将其认为是一个工具条窗口而不会再在任务栏中加以显示。最后需要将修改过的扩展属性通过SetWindowLong()函数将其写回。这两个函数的声明分别如下:LONG GetWindowLong(HWND hWnd,int nIndex);LONGSetWindowLong(HWNDhWnd,intnIndex,LONGdwNewLong);  另一种很简便的是MFC的写法:在程序框架类的预创建窗口函数里通过直接对CREATESTRUCT结构对象的逻辑操作而将程

4、序属性进行改变:cs.style=WS_POPUP;cs.dwExStyle

5、=WS_EX_TOOLWINDOW;  这两种写法虽然表现形式各不相同,其本质都是一样的。  三、程序在任务列表中的隐藏原理  任务列表(Ctrl+Alt+Del时弹出的对话框)显示了当前系统正在运行的一些应用程序,如果实现了上一步,虽然在任务栏看不见程序,但有经验的用户可以通过观察任务列表而发现一些值得怀疑的应用程序而在此将其关闭。所以大多数黑软也都通过较复杂的手段实现了自身在任务列表中的隐藏,使被发现的机会大大降低。   在Win9x/2000中,一般每个应用程序都要通过一个API(应用程序接口)函数Regist

6、erServiceProcess()向系统申请注册成为一个服务进程,并且也是通过这个函数注销其服务进程来结束这个服务进程的运行。如果一个进程注册为一个服务进程,通过Ctrl+Alt+Del就可以在任务列表里看见该进程的标题。而如果一个进程运行了但没有向系统申请注册成为服务进程那么就不会在任务列表里显示。黑软也正是利用这个原理使自身在运行时能在任务列表中实现隐藏。该函数存放于系统内核Kernel32.dll中,具体声明如下:DWORDRegisterServiceProcess(DWORDdwProcessId,DWORDdwType);  其第一个参数指定为一个服务进程的进程标识,如果是0则注

7、册当前的进程;第二个参数指出是注册还是注销当前的进程,其状态分别为:RSP_SIMPLE_SERVICE和RSP_UNREGISTER_SERVICE。黑软一般是在程序启动初始化时首先从Kernel32.dll动态连接库中将RegisterServiceProcess()函数加载到内存,然后再通过该函数将程序从任务列表中隐藏://从Kernel32.dll中加载RegisterServiceProcess()HMODULEm_hKernel=::GetModuleHandle("Kernel32.DLL");RSPm_rsp=(RSP)::GetProcAddress(m_hKernel,"R

8、egisterServiceProcess");m_rsp(::GetCurrentProcessId(),1);//此时为隐藏,当第二个参数为0时显示  另外,还有一部分黑软是通过ShowWindowAsync()函数启动一个新的线程来显示一个新窗口的。该函数的原形为:BOOLShowWindowAsync(HWNDhWnd,intnCmdShow);  而黑软正是钻了该函数的第二个参数可以设置

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。