清香白莲 发表于 2017-9-26 20:02

简单硬盘锁病毒分析

本帖最后由 清香白莲 于 2017-11-1 09:54 编辑

1.前言
样本来源:https://www.52pojie.cn/thread-640637-1-1.html
以前没分析过硬盘锁,分析该样本前,想着硬盘锁应该有些难度,至少不应该这么简单。。。。好吧,我还是太年轻了。
嗯,这个样本很简单,将原主引导扇区数据写入3号扇区,在主引导扇区写入新的数据,解密时就是把3号扇区的数据重新写回主引导扇区,教科书般!
解锁密码就是: 提示数字+212
2.样本分析
2.1病毒效果

2.2详细分析
2.2.1加密过程
该样本非常简单,主要流程:
(1)调用GetSystemDirectoryA获取%SYSTEM%目录,CopyFileA将自身拷贝到%SYSTEM%\svchose.exe;
(2)调用RegSetValueExA设置注册表,将svchose.exe加入开机启动项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\Writing to the Registry Example ;
(3)使用rand()生成随机数rand,rand+0xC1E生成显示的数字,rand+0xC1E+0xD4生成密码,并调用_itoa,将其转化为对应10进制数字符串;
(4)调用_system(“net user administrator 123"),修改管理员密码为123;
(5)生成需要写入MBR的数据。这部分数据是直接硬编码写在文件中的,不过修改了几个字节,将QQ信息和之前生成的rand,和rand+0xC1E+0xD4写入了其中:

生成结果:
   
(5)调用CreateFileA( ) SetFilePointer( ) ReadFile( ) ,读取"\\\\.\\\\physicaldrive0"前200字节数据,即主引导扇区数据(0柱面0磁头1扇区)。
(6)调用CreateFileA( ) SetFilePointer( ) WriteFile( ) ,将主引导扇区数据写入偏移0x400的位置(0柱面0磁头3扇区)。
(7)调用CreateFileA( ) SetFilePointer( ) WriteFile( ) ,将(4)中生成的数据写入主引导扇区数据(0柱面0磁头1扇区)。
(8)调用_system(“C:\Windows\system32\cmd.exe /c shutdown -r "),关机
2.2.2 解密过程分析
(1)调用int 10中断打印qq和rand信息;

(2)调用int 16中断获取键盘输入,输入回车则结束;

(3)循环比较密码:

(4)密码输入错误,程序从头运行:

(5)密码输入正确,调用int13中断读写扇区,恢复扇区

(6)恢复环境,启动系统(086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFF,IP=0000,即FFFF0单元中的指令时8086PC机开机后执行的第一条指令。):


嗯,到这里这个程序就分析完成了。附件是idb文件。

薛之虚 发表于 2017-9-26 20:30

虽然看不懂,但是感觉好厉害

lanlana 发表于 2017-9-26 20:39

好详细支持楼主

永久禁言 发表于 2017-9-26 20:26

MXWXZ 发表于 2017-9-26 20:32

永久禁言 发表于 2017-9-26 20:26
密码和算法放在软件的都是小学生   要我写肯定直接服务器通信产生一个随机数   发送到服务器 锁机   ...

脱离windows直接进行网络通信难度史诗级……而且可以从解密函数入手,服务器劫持或者直接爆破

linclon 发表于 2017-9-26 20:51

很详细的讲解,楼主很强

隔壁老王 发表于 2017-9-26 21:02

现在锁硬盘的很多 防不胜防啊

chaizy1 发表于 2017-9-26 21:04

看不懂支持 教教我打神

可爱的小新萌 发表于 2017-9-26 21:13

{:1_927:}楼主厉害哦,学习了

kyjzbiao 发表于 2017-9-26 21:23

永久禁言 发表于 2017-9-26 20:26
密码和算法放在软件的都是小学生   要我写肯定直接服务器通信产生一个随机数   发送到服务器 锁机   ...

系统进不去 联网 咋弄啊
页: [1] 2 3 4 5 6 7 8
查看完整版本: 简单硬盘锁病毒分析