Jelcyn
Admin forum
Typ:
admin
Postów: 895
Zarejestrowany: Apr 2002
|
|
Plik LAN.ASM ------------
; ============================================================ ; Polozenie na nosniku: \lan\lan.asm ; ============================================================ ; Program demonstracyjny zalaczony do ksiazki ; Adam Blaszczyk ; "Jak pisac wirusy i antywirusy?" ; Wydawnictwo RM, 2001 ; ============================================================ ; Nazwa programu: lan ; Srodowisko: WINDOWS 9x/Me ; Bezpieczenstwo: To nie jest wirus ; Opis: Program wyswietla wszystkie zasoby ; udostepnione w sieci LAN ; Kompilacja: ml /c /coff lan.asm ; Zasoby: rc.exe /v rc.rc ; cvtres.exe /machine:ix86 rc.res ; Linkowanie: link.exe /SUBSYSTEM:WINDOWS lan.obj rc.obj ; Uwagi: Kompilacje i linkowanie mozna wykonac ; przy pomocy pliku c.bat ; Uwagi.2: Program musi byc uruchomiony w sieci LAN, ; aby wyswietlone przez niego rezultaty ; mialy sens ; Uwagi.3: Program dziala dosc WOLNO!!! ; Nalezy uzbroic csie w cierpliwosc!!! ; mialy sens ; Uruchomienie: Dwukrotne klikniecie w oknie Exploratora ; lub z wiersza polecen (plik z programem ; musi znajdowac sie w biezacym katalogu): ; ; lan.exe ; ============================================================
.386 ; instrukcje 386 .MODEL FLAT,STDCALL ; \ 'plaski' model pamieci ; | kod i dane sa umieszczone ; | w liniowej przestrzeni ; / adresowej o rozmiarze 4GB
OPTION CASEMAP :NONE ; rozrozniaj wielkosc liter
NUL = 00h ; \ CR = 0Dh ; | definicje znakow ASCII LF = 0Ah ; /
; dolacza pliki naglowkowe include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\gdi32.inc include \MASM32\INCLUDE\mpr.inc
; dolacza biblioteki includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\gdi32.lib includelib \MASM32\LIB\mpr.lib
; stale elementow okna dialogu ID_LISTA = 2000 ; lista przewijana ID_ETYKIETA = 2001 ; pole etykiety ID_OK = 2002 ; przycisk [OK] ID_ODSWIEZ = 2003 ; przycisk [ODSWIEZ]
OFS equ OFFSET ; prototypy funkcji DlgProc PROTO WORD, WORD, WORD, WORD ListaZasobowLan PROTO WORD
.data? hInstance dd ? ; instancja okna hLista dd ? ; uchwyt do listy
.data ; nazwa okna dialogu TxNazwaDialogu db 'DLG_GLOWNY',0
; etykieta korzenia TxTytulOkna db 'Lan',NULL TxCopyright label dword ; komunikat o prawach autorskich db '========================================' ,CR,LF db ' Program demonstracyjny zalaczony do ksiazki',CR,LF db ' Adam Blaszczyk' ,CR,LF db ' "Jak pisac wirusy i antywirusy?"' ,CR,LF db ' Wydawnictwo RM, 2001' ,CR,LF db '========================================' ,CR,LF db NUL
.code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; program glowny ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start: invoke GetModuleHandle,NULL ; pobierz instancje mov hInstance,eax ; zapisz instancje
; komunikat o prawach autorskich invoke MessageBox,0,OFS TxCopyright,OFS TxTytulOkna,\ MB_ICONEXCLAMATION
; wczytaj okno dialogu invoke DialogBoxParam,hInstance,ADDR TxNazwaDialogu,\ 0,ADDR DlgProc,0
invoke ExitProcess,eax ; zakoncz proces
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; procedura obslugi okna dialogu ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DlgProc proc hDlg WORD,uMsg WORD,wParam WORD,lParam WORD ; -- inicjacja okna dialogu .if uMsg==WM_INITDIALOG ; pobierz uchwyt do listy invoke GetDlgItem,hDlg,ID_LISTA mov hLista,eax ; zapisz uchwyt
; wyslij komunikat ODSWIEZ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; jesli program ma listowac od razu przy starcie ; nalezy z ponizszej linii usunac komentarz ; invoke SendMessage,hDlg,WM_COMMAND,ID_ODSWIEZ,0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; -- zamykanie okna dialogu .elseif uMsg==WM_CLOSE
invoke EndDialog,hDlg,0 ; zakoncz dialog
; -- obsluga przyciskow .elseif uMsg==WM_COMMAND
; -- obsluga przycisku [OK] .if wParam==ID_OK ; zakoncz program invoke SendMessage,hDlg,WM_CLOSE,0,0
; -- obsluga przycisku [ODSWIEZ] .elseif wParam==ID_ODSWIEZ ; wyczysc zawartosc ListBoxa invoke SendMessage,hLista,LB_RESETCONTENT,0,0
; przeszukaj siec LAN invoke ListaZasobowLan,NULL .endif .endif
xor eax, eax ; \ zwroc FALSE, aby system ; / obsluzyl inne komunikaty
ret ; powrot z procedury
DlgProc endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; procedura listujaca udostepnione zasoby sieci LAN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ListaZasobowLan proc lpnr WORD LOCAL hNetEnum : DWORD LOCAL Ile : DWORD LOCAL DlugBufora : DWORD LOCAL Bufor[4096] : BYTE
; rozpocznij przeszukiwanie invoke WNetOpenEnum,RESOURCE_GLOBALNET,\ RESOURCETYPE_DISK,\ RESOURCEUSAGE_CONTAINER,\ lpnr,ADDR hNetEnum
.if eax==NO_ERROR ; jesli nie ma bledu
Listuj: mov Ile,0FFFFFFFFh ; domyslnie tyle pozycji mov DlugBufora,4096 ; ustal dlugosc bufora
; przeszukaj zasoby invoke WNetEnumResource,hNetEnum,ADDR Ile,\ ADDR Bufor,ADDR DlugBufora
; \ jesli nie ma bledu ; / i istnieja jakies zasoby .if (! \ ((eax==ERROR_NO_MORE_ITEMS)\ || (eax!=NO_ERROR)) \ ) ; jesli nie ma bledu
mov ecx,Ile ; ECX=Ile=liczba zasobow lea esi,Bufor ; \ ESI=wskazuje na ; / wypelniony bufor
KolejneZasoby: pushad ; zachowaj rejestry
; czy zasob zawiera podzasoby? mov eax,[esi.NETRESOURCE.dwUsage] and eax,RESOURCEUSAGE_CONTAINER .if eax!=0 ; TAK ; listuj rekurencyjnie invoke ListaZasobowLan,esi
.else ; NIE ; czy zasob jest dyskiem? mov eax,[esi.NETRESOURCE.dwUsage] and eax,RESOURCETYPE_DISK .if eax!=0 ; TAK ; dodaj do listy invoke SendMessage,hLista,LB_ADDSTRING,\ 0,[esi.NETRESOURCE.lpRemoteName] .endif ; #-- eax!=0 .endif ; #-- eax!=0
popad ; przywroc rejestry
; ESI=kolejny zasob add esi,SIZEOF NETRESOURCE
dec ecx ; ECX=liczba zasobow jnz KolejneZasoby ; \ skacz jesli nie wszystkie ; / wylistowane
jmp Listuj ; listuj kolejny zasob .endif .endif ; zakoncz przeszukiwanie invoke WNetCloseEnum,hNetEnum
ret ; powrot z procedury ListaZasobowLan endp
END Start ; poczatek programu ------------
_____________________________________________ Jelcyn vb4all(małpka)canpol.pl http://www.vb4all.pl * http://www.jelcyn.com
|