一个木马病毒是如何诞生的?

相信大家都有这么一个经历 , 我们使用电脑 , 在某些来历不明的网站上下载一些程序 , 然后打开这些程序的时候 , 可能会出现以下的情况 。

一个木马病毒是如何诞生的?

文章插图
 
嗯没错 , 你电脑中的杀毒软件会给你发出温馨的提示 , 提醒你该程序可能含有木马病毒 , 这些病毒可能损害你的计算机 。那么这些木马病毒的本质是什么呢?他们是怎么攻击我们的电脑的呢?我们今天就来探讨下这个问题!
首先我们先来认识一下动态链接库的概念 , DLL是Dynamic Link Library的缩写 , 意为动态链接库 。在windows中 , 许多应用程序并不是一个完整的可执行文件 , 它们被分割成一些相对独立的动态链接库 , 即DLL文件 , 放置于系统中 。
Windows系统就是由许多的动态链接库(DLL文件)构成的 。它们是Windows系统最基本的应用程序 。
下面就是我们的Windows操作系统的一些动态链接库 。
一个木马病毒是如何诞生的?

文章插图
 
简单来说 , 动态链接库里面其实就是一个一个的函数 , Windows也是一个应用程序 , 它被分割成了许许多多的动态链接库 。
比较大的应用程序都由很多模块(动态链接库)组成 , 这些模块分别完成相对独立的功能 , 它们彼此协作来完成整个软件系统的工作 。下图为微信应用程序中所调用的动态链接库 。
一个木马病毒是如何诞生的?

文章插图
 
Windows 系统平台上提供了一种完全不同的较有效的编程和运行环境 , 你可以将独立的程序模块创建为较小的 DLL 文件 , 并可对它们单独编译和测试 。在运行时 , 只有当 EXE 程序确实要调用这些 DLL 模块的情况下 , 系统才会将它们装载到内存空间中 。不用的时候 , 系统将它们给从内存中卸载掉 。
这种方式不仅减少了 EXE 文件的大小和对内存空间的需求 , 而且使这些 DLL 模块可以同时被多个应用程序使用 。Windows 自己就将一些主要的系统功能以 DLL 模块的形式实现 。
因此 , 读到这里 , 我相信大家应该明白了 , 为什么杀毒软件会给你提示某个程序含有木马病毒 , 就是因为该病毒程序中可能会给你原本正常运行的其他程序注入DLL , 让你的正常程序调用病毒程序携带的DLL文件 , 以导致你的正常程序“中毒” 。
一个木马病毒是如何诞生的?

文章插图
 
DLL的编写与语言没有任何关系 , 所以我们用VS2017创建一个动态链接库 , 命名为MyDll , 他就是我们要写的病毒DLL文件 。
一个木马病毒是如何诞生的?

文章插图
 
【一个木马病毒是如何诞生的?】然后在dllmain.cpp中写我们的代码 , 我们的代码很简单 , 直接写上一个alert函数 , 功能是:当我们的病毒DLL文件被应用程序加载时 , 直接弹出一个弹窗 。
一个木马病毒是如何诞生的?

文章插图
 
OK , 最后编译生成我们的DLL文件 。
 
编写完DLL文件之后 , 我们还要写一个exe程序 , 该exe程序就是病毒程序的主体 , 它完成核心的功能:将我们的病毒DLL写进某个正常运行的应用程序 , 让该正常的应用程序调用我们的DLL代码 , 那么这就是一件很危险的事情了 , 让我们的正常运行的程序调用未知的DLL代码 , 后果可想而知 。这种技术就是DLL远线程注入技术 。
我们的病毒程序会强制给目标进程创建一个线程 , 线程的任务是:将我们的病毒木马DLL加载进目标进程 , 让目标进程执行DLL代码 。
那么 , 代码如何写呢?
我们还是使用VS2017编写 , 创建一个控制台程序 , 命名为dll_inject 。
一个木马病毒是如何诞生的?

文章插图
 
然后按照刚才提到的思路编写代码 , 这没什么难度 , 查看MSDN , 调用Win32API即可实现 。


推荐阅读