zoukankan      html  css  js  c++  java
  • 记一次MBR锁机病毒分析

    有一天,在机缘巧合之下我获得了一个锁机软件(是多巧合阿喂!),然后兴高采烈的把它拖入了虚拟机里蹂躏(>_<!)。

    很巧,软件有虚拟机检测。。。

    1.jpg

    Emmmm好吧,随便过一下。。。

    我用的虚拟机是VMware12,网上查到了一段过检测的代码:

    isolation.tools.setVersion.disable = "TRUE"

    isolation.tools.getVersion.disable = "TRUE"

    把上面两行加到虚拟机配置文件结尾,保存然后重新打开虚拟机即可。

    好了,这次程序直接运行了起来。

    2.jpg

    靠!连一点暗示都不给,直接重启的嘛!这个人好坏好坏的,都不稍稍伪装下!

    幸亏做了快照备份。。赶紧还原虚拟机,下面就开始简单分析一下这个程序的行为吧!

    当然,少不了表姐的PeDoll~这时,表姐C/S的软件架构就很好的解决了测试机重启的问题~表白表姐~

    好了,具体怎么抓的实在太简单,这里我就不写了,也就一个脚本的事,不耽误大家时间了。我们只看最后。

    从PeDoll里保存下来两个512字节的数据文件,我断定这一定是这个智障软件写入到MBR的内容(废话嘛!)。其中一个很明显是锁机的,另一个可能是我虚拟机原始的MBR。看到这里谢天谢地。。至少这软件知道把原来的数据保存下来,这样就代表还原不是不可能拉!

    在分析之前,我把虚拟机还原了一遍,又抓了一次数据。结果表明这丫两次写入的数据一模一样!诶,都不加个随机密码之类的吗!

    好了,下面是这款软件写入到MBR的内容。

    3.jpg

    恩,这样乱七八糟的是要我怎么看嘛!还好,我有nasm! 于是,我随手从官网下载了nasm的二进制文件。就下面这货。

    4.jpg

    其中我们只用到ndisasm.exe这个程序来反汇编我们的MBR文件。最后来让我们看看结果~

    5.jpg

    嗯,,这回看着顺眼多了。把结果保存到文件中,我们来仔细分析下吧。

    00000000  E90000            jmp 0×3

    00000003  8CC8              mov ax,cs

    00000005  8ED8              mov ds,ax

    00000007  8ED0              mov ss,ax

    00000009  8EC0              mov es,ax

    0000000B  BC0001            mov sp,0×100

    0000000E  BDED7C            mov bp,0x7ced   ;;;提示字符串偏移

    00000011  BBED7C            mov bx,0x7ced

    00000014  E8B000            call 0xc7       ;;;计算字符串长度

    00000017  89C1              mov cx,ax       ;;;cx=字符串长度

    00000019  B80113            mov ax,0×1301

    0000001C  BB0C00            mov bx,0xc      ;;;页号0,黑底红字

    0000001F  B200              mov dl,0×0

    00000021  CD10              int 0×10        ;;;打印提示字符串

    00000023  B800B8            mov ax,0xb800

    00000026  05A000            add ax,0xa0

    00000029  8ED8              mov ds,ax       ;;; ds=0xb8a0

    0000002B  31C9              xor cx,cx       ;;;初始化cx

    0000002D  31DB              xor bx,bx       ;;;初始化bx

    0000002F  31C0              xor ax,ax       ;;;初始化ax

    00000031  CD16              int 0×16        ;;;等待输入密码

    00000033  3C08              cmp al,0×8      ;;;退格

    00000035  7413              jz 0x4a

    00000037  3C0D              cmp al,0xd      ;;;回车

    00000039  741B              jz 0×56

    0000003B  B402              mov ah,0×2

    0000003D  8807              mov [bx],al

    0000003F  886701            mov [bx+0x1],ah

    00000042  81C30200          add bx,0×2

    00000046  41                inc cx

    00000047  E9E5FF            jmp 0x2f

    0000004A  81EB0200          sub bx,0×2      ;;;退格键按下

    0000004E  49                dec cx

    0000004F  31C0              xor ax,ax

    00000051  8907              mov [bx],ax

    00000053  E9D9FF            jmp 0x2f

    00000056  8CC8              mov ax,cs       ;;;回车键按下

    00000058  8EC0              mov es,ax

    0000005A  31DB              xor bx,bx

    0000005C  BEDA7C            mov si,0x7cda   ;;;密码字符串偏移

    0000005F  2E8A0ED97C        mov cl,[cs:0x7cd9]

    00000064  B500              mov ch,0×0

    以上参考了链接http://slab.qq.com/news/tech/1293.html,有兴趣的可以自己去看看。

    经分析,这个MBR文件跟上面链接中的应该是同一种,特征完全一致,我只是写了一点注释方便大家对照(顺便学习一下汇编,嘿嘿嘿)。

    最后得出密码的十六进制是C6C6BDE2C4E3C2E8B1C6A8BAA8DEA4A2(嗯,我就不翻译了),所以最后困扰我的就是这个密码要怎么输入?经研究发现有人说用ALT+小键盘数字来输入,不过我没有小键盘(求好心人赞助。。。),试了其他方法也没有成功,这里希望能有大佬指教一下~

    最后一个不算结束的结束吧。经(xiao)此(da)一(xiao)战(nao)之后,我的功力又有了不小的提升。以后还是要多练练手才能不生疏阿。

    此次用到的程序文件我全都打包放到了附件中点击原文下载),感兴趣的小伙伴可以下载研究,欢迎交流~

  • 相关阅读:
    Grid表格的js触发事件
    C# 在获得鼠标点击事件时,如何判断Control键,Shift键被按下
    纠错《COM技术内幕》之ProgID
    C# 日期格式化
    C# 操作系统防火墙
    C# 开发和调用Web Service
    谓侠
    高维FWT
    单位根反演
    容斥 反演
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/8000435.html
Copyright © 2011-2022 走看看