教你如何找到线程插入式木马

简介:
目前网络上最猖獗的病毒估计非木马程序莫数了,特别是在过去的2004年木马程序的攻击性也有了很大的加强,在进程隐藏方面,做了较大的改动,不再采用独立的EXE可执行文件形式,而是改为内核嵌入方式、远程线程插入技术、挂接PSAPI等,这些木马也是目前最难对付的。本期就教你查找和清除线程插入式木马。
    操作步骤:
    1、通过自动运行机制查木马
    一说到查找木马,许多人马上就会想到通过木马的启动项来寻找“蛛丝马迹”,具体的地方一般有以下几处:
    1)注册表启动项:
    在“开始/运行”中输入“regedit.exe”打开注册表编辑器,依次展开[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\]和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\],查看下面所有以"Run"开头的项,其下是否有新增的和可疑的键值,也可以通过键值所指向的文件路径来判断,是新安装的软件还是木马程序。
    另外[HKEY LOCAL MACHINE\Software\classes\exefile\shell\open\command\]键值也可能用来加载木马,比如把键值修改为“X:\windows\system\ABC.exe "%1"%”。
    2)系统服务
    有些木马是通过添加服务项来实现自启动的,大家可以打开注册表编辑器,在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Runservices]下查找可疑键值,并在[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\]下查看的可疑主键。
    然后禁用或删除木马添加的服务项:在“运行”中输入“Services.msc”打开服务设置窗口,里面显示了系统中所有的服务项及其状态、启动类型和登录性质等信息。找到木马所启动的服务,双击打开它,把启动类型改为“已禁用”,确定后退出。也可以通过注册表进行修改,依次展开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\服务显示名称”键,在右边窗格中找到二进制值“Start”,修改它的数值数,“2”表示自动,“3”表示手动,而“4”表示已禁用。当然最好直接删除整个主键,平时可以通过注册表导出功能,备份这些键值以便随时对照。
    3)开始菜单启动组
    现在的木马大多不再通过启动菜单进行随机启动,但是也不可掉以轻心。如果发现在“开始/程序/启动”中有新增的项,可以右击它选择“查找目标”到文件的目录下查看一下,如果文件路径为系统目录就要多加小心了。也可以在注册表中直接查看,它的位置为[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders],键名为Startup。
    4)系统INI文件Win.ini和System.ini
    系统INI文件Win.ini和System.ini里也是木马喜欢隐蔽的场所。选择“开始/运行”,输入“msconfig”调出系统配置实用程序,检查Win.ini的[Windows]小节下的load和run字段后面有没有什么可疑程序,一般情况下“=”后面是空白的;还有在System.ini的[boot]小节中的Shell=Explorer.exe后面也要进行检查。
    5)批处理文件
    如果你使用的是WIN 9X系统,C盘根目录下“AUTOEXEC.BAT”和WINDOWS目录下的“WinStart.bat”两个批处理文件也要看一下,里面的命令一般由安装的软件自动生成,在系统默认会将它们自动加载。在批处理文件语句前加上“echo off”,启动时就只显示命令的执行结果,而不显示命令的本身;如果再在前面加一个“@”字符就不会出现任何提示,以前的很多木马都通过此方法运行。
    2、通过文件对比查木马
    最近新出现的一种木马。它的主程序成功加载后,会将自身做为线程插入到系统进程SPOOLSV.EXE中,然后删除系统目录中的病毒文件和病毒在注册表中的启动项,以使反病毒软件和用户难以查觉,然后它会监视用户是否在进行关机和重启等操作,如果有,它就在系统关闭之前重新创建病毒文件和注册表启动项。下面的几招可以让它现出原形(下面均以Win XP系统为例):
    1)对照备份的常用进程
    大家平时可以先备份一份进程列表,以便随时进行对比查找可疑进程。方法如下:开机后在进行其他操作之前即开始备份,这样可以防止其他程序加载进程。在运行中输入“cmd”,然后输入“tasklist /svc >X:\processlist.txt”(提示:不包括引号,参数前要留空格,后面为文件保存路径)回车。这个命令可以显示应用程序和本地或远程系统上运行的相关任务/进程的列表。输入“tasklist /?”可以显示该命令的其它参数。
    2)对照备份的系统DLL文件列表
    对于没有独立进程的DLL木马怎么办吗?既然木马打的是DLL文件的主意,我们可以从这些文件下手,一般系统DLL文件都保存在system32文件夹下,我们可以对该目录下的DLL文件名等信息作一个列表,打开命令行窗口,利用CD命令进入system32目录,然后输入“dir *.dll>X:\listdll.txt”敲回车,这样所有的DLL文件名都被记录到listdll.txt文件中。日后如果怀疑有木马侵入,可以再利用上面的方法备份一份文件列表“listdll2.txt”,然后利用“UltraEdit”等文本编辑工具进行对比;或者在命令行窗口进入文件保存目录,输入“fc listdll.txt listdll2.txt”,这样就可以轻松发现那些发生更改和新增的DLL文件,进而判断是否为木马文件。
    3)对照已加载模块
    频繁安装软件会使system32目录中的文件发生较大变化,这时可以利用对照已加载模块的方法来缩小查找范围。在“开始/运行”中输入“msinfo32.exe”打开 “系统信息”,展开“软件环境/加载的模块”,然后选择“文件/导出”把它备份成文本文件,需要时再备份一个进行对比即可。
    4)查看可疑端口
    所有的木马只要进行连接,接收/发送数据则必然会打开端口,DLL木马也不例外,这里我们使用netstat命令查看开启的端口。我们在命令行窗口中输入“netstat -an”显示出显示所有的连接和侦听端口。Proto是指连接使用的协议名称,Local Address是本地计算机的IP地址和连接正在使用的端口号,Foreign Address是连接该端口的远程计算机的IP地址和端口号,State则是表明TCP连接的状态。Windows XP所带的netstat命令比以前的版本多了一个-O参数,使用这个参数就可以把端口与进程对应起来。输入“netstat /?”可以显示该命令的其它参数。
    接着我们可以通过分析所打开的端口,将范围缩小到具体的进程上,然后使用进程分析软件,例如《Windows优化大师》目录下的WinProcess.exe程序,来查找嵌入其中的木马程序。有些木马会通过端口劫持或者端口重用的方法来进行通信的,一般它们会选择139、80等常用端口,所以大家分析时要多加注意。也可以利用网络嗅探软件(如:Commview)来了解打开的端口到底在传输些什么数据


本文转自 goldwinner 51CTO博客,原文链接:http://blog.51cto.com/355665/88317,如需转载请自行联系原作者
相关文章
|
1月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
39 1
C++ 多线程之初识多线程
|
17天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
13 3
|
17天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
13 2
|
17天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
27 2
|
17天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
26 1
|
17天前
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
28 1
|
17天前
|
Java
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件成立时被唤醒,从而有效解决数据一致性和同步问题。本文通过对比其他通信机制,展示了 `wait()` 和 `notify()` 的优势,并通过生产者-消费者模型的示例代码,详细说明了其使用方法和重要性。
22 1
|
2月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
44 6