366 lines
7 KiB
NASM
366 lines
7 KiB
NASM
P386
|
|
IDEAL
|
|
|
|
no_debug = 1
|
|
|
|
SEGMENT koodi para public
|
|
ASSUME cs:koodi, ds:nothing
|
|
INCLUDE 'run1.inc'
|
|
run1start=$-2
|
|
|
|
db 12h,34h,56h,78h
|
|
|
|
PROC cstart
|
|
|
|
mov bx, 0d
|
|
xor si,si
|
|
mov cx, OFFSET cstart
|
|
mov eax, 22a53341h
|
|
@@l1:
|
|
add eax, 0a753cd3dh
|
|
add bx, 2*4
|
|
and bx, 3ffh
|
|
add eax, [dword cs:bx+randtau]
|
|
add bx, 23*4
|
|
and bx, 3ffh
|
|
add eax, [dword cs:bx+randtau]
|
|
sub bx, 24*4
|
|
and bx, 3ffh
|
|
xor [cs:si],al
|
|
mov [dword cs:bx+randtau], eax
|
|
inc si
|
|
loop @@l1
|
|
jmp run1start
|
|
ENDP
|
|
rptr dw 0
|
|
|
|
LABEL randtau WORD
|
|
db 12h,34h,56h,78h
|
|
|
|
;---------------------------------------------------------------------------
|
|
|
|
ORG OFFSET cstart+768d
|
|
mdd dw 55a2h
|
|
|
|
start:
|
|
cli
|
|
xor ax, ax
|
|
mov ds, ax
|
|
mov [word ds:4], OFFSET int01
|
|
mov [word ds:4+2], cs
|
|
|
|
mov [word ds:4*3], OFFSET int03
|
|
mov [word ds:4*3+2], cs
|
|
|
|
mov ax, cs
|
|
mov ss, ax
|
|
mov sp, OFFSET apino
|
|
|
|
PROC int01
|
|
pop [r_ip] ; remove ip
|
|
add sp, 2d ; remove cs
|
|
pusha ; = 8*2 bytes
|
|
push ds es ; + 2*2 bytes = total 20 bytes
|
|
|
|
ASSUME ds:koodi
|
|
|
|
mov ax, cs
|
|
mov ds, ax
|
|
|
|
mov bx, [pptr]
|
|
mov [sptau+bx], sp ; save SP
|
|
mov ax, [r_ip]
|
|
sub ax, OFFSET runrun
|
|
add [iptau+bx], ax ; save IP
|
|
add bx, 2d
|
|
cmp bx, 8d
|
|
jbe @@l1
|
|
mov bx, 0d
|
|
@@l1: mov [pptr], bx
|
|
mov sp, [sptau+bx] ; get SP
|
|
mov ax, [iptau+bx] ; get IP
|
|
|
|
add ax, 29787d
|
|
mov bp, 15553d
|
|
mul bp
|
|
lea si, [runrun]
|
|
mov cx, 8d
|
|
@@l2:
|
|
mov bx, ax
|
|
and bx, 511d
|
|
mov dl, [BYTE bx+cstart+256]
|
|
xor dl, 77h
|
|
mov [si], dl
|
|
inc bx
|
|
inc si
|
|
add ax, bp
|
|
loop @@l2
|
|
|
|
ASSUME ds:NOTHING
|
|
|
|
pop es ds
|
|
popa
|
|
push cs
|
|
push OFFSET runrun
|
|
int03:
|
|
iret
|
|
ENDP
|
|
db 12h,34h,56h,78h ; end of randtau
|
|
;----------------------------------------------------------------------------
|
|
|
|
IF randtau+1024 LT $
|
|
ERR
|
|
ENDIF
|
|
|
|
ORG OFFSET randtau+1024
|
|
|
|
r_cnt dw 1
|
|
r_ip dw ?
|
|
pptr dw 7*2
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
sptau dw OFFSET pino1, OFFSET pino2, OFFSET pino5, OFFSET pino3, OFFSET pino4
|
|
|
|
ORG sptau+8*2
|
|
iptau dw OFFSET rout1, OFFSET rout2, OFFSET rout5, OFFSET rout3, OFFSET rout4
|
|
ORG iptau+8*2
|
|
|
|
|
|
; dw 10 dup(?) ; free space
|
|
pino1: dw 2 dup(?) ; es, ds
|
|
dw 8 dup(?) ; di si bp sp bx dx cx ax
|
|
dw 0100h
|
|
|
|
; dw 10 dup(?) ; free space
|
|
pino2: dw 2 dup(?) ; es, ds
|
|
dw 8 dup(?) ; di si bp sp bx dx cx ax
|
|
dw 0100h
|
|
|
|
; dw 10 dup(?) ; free space
|
|
pino3: dw 2 dup(?) ; es, ds
|
|
dw 8 dup(?) ; di si bp sp bx dx cx ax
|
|
dw 0100h
|
|
|
|
; dw 10 dup(?) ; free space
|
|
pino4: dw 2 dup(?) ; es, ds
|
|
dw 8 dup(?) ; di si bp sp bx dx cx ax
|
|
dw 0100h
|
|
|
|
; dw 10 dup(?) ; free space
|
|
pino5: dw 2 dup(?) ; es, ds
|
|
dw 8 dup(?) ; di si bp sp bx dx cx ax
|
|
dw 0100h
|
|
|
|
|
|
dw 10h dup(?) ; reserved
|
|
apino: dw OFFSET runrun
|
|
dw 0
|
|
dw 0
|
|
|
|
|
|
PROC runrun
|
|
REPT 4
|
|
nop
|
|
ENDM
|
|
|
|
mov ds, ax
|
|
mov es, ax
|
|
mov ax, 13h
|
|
int 10h
|
|
mov si, OFFSET runrun
|
|
mov di, 0d
|
|
rep movsb
|
|
mov si, bx
|
|
|
|
and si, 8191
|
|
mov eax, [cs:bx]
|
|
xor eax, [cs:si]
|
|
mov [cs:(dword runrun)], eax
|
|
mov eax, [cs:bx+4]
|
|
xor eax, [cs:si+4]
|
|
mov [cs:(dword runrun+4)], eax
|
|
|
|
int 1
|
|
|
|
loop runrun
|
|
ENDP
|
|
|
|
;---------------
|
|
|
|
cmp_dt db 12 dup(?)
|
|
doexit dw 4
|
|
nnull dd 0
|
|
|
|
;------------------------------------------------------------------------------
|
|
jmp start
|
|
;------------------------------------------------------------------------------
|
|
|
|
|
|
MACRO scall l1
|
|
LOCAL l2
|
|
push OFFSET l2
|
|
jmp l1
|
|
l2:
|
|
ENDM
|
|
|
|
MACRO sret
|
|
LOCAL l2
|
|
pop bx
|
|
sub bx, OFFSET l2 - OFFSET runrun
|
|
l2: jmp bx
|
|
ENDM
|
|
|
|
|
|
; This code is crypted at randtau of crypter.
|
|
; maximum length 1024 bytes.
|
|
;
|
|
|
|
db 12h,34h,56h,78h
|
|
crypt_start:
|
|
|
|
PROC rout1
|
|
mov bx, OFFSET cstart
|
|
mov cx, 256d
|
|
@@l1: add ax, 7a33h
|
|
imul ax, 2345h
|
|
xor [cs:bx], al
|
|
inc bx
|
|
IFDEF no_debug
|
|
int 1
|
|
ENDIF
|
|
loop @@l1
|
|
ENDP
|
|
|
|
PROC rout2
|
|
mov bx, OFFSET cstart
|
|
mov cx, 256d
|
|
@@l1: add ax, 455ch
|
|
imul ax, 825dh
|
|
xor [cs:bx], al
|
|
inc bx
|
|
IFDEF no_debug
|
|
int 1
|
|
ENDIF
|
|
loop @@l1
|
|
ENDP
|
|
|
|
PROC kill_sice
|
|
|
|
REPT 8
|
|
xor si, si
|
|
ENDM
|
|
|
|
sgdt [pword cs:cmp_dt]
|
|
REPT 8
|
|
xor si, si
|
|
ENDM
|
|
add eax, 23f50000h
|
|
lea ebp, [ebx+esi+0001fffah]
|
|
REPT 7
|
|
nop
|
|
ENDM
|
|
sidt [pword cs:cmp_dt+6]
|
|
|
|
mov cl, [cs:cmp_dt+6]
|
|
sub [cs:cmp_dt], cl
|
|
mov cl, [cs:cmp_dt+6+1]
|
|
sbb [cs:cmp_dt+1], cl
|
|
REPT 8
|
|
xor si, si
|
|
ENDM
|
|
mov cl, [cs:cmp_dt+6+2]
|
|
sbb [cs:cmp_dt+2], cl
|
|
mov cl, [cs:cmp_dt+6+3]
|
|
sbb [cs:cmp_dt+3], cl
|
|
mov cl, [cs:cmp_dt+6+4]
|
|
sbb [cs:cmp_dt+4], cl
|
|
mov cl, [cs:cmp_dt+6+5]
|
|
sbb [cs:cmp_dt+5], cl
|
|
|
|
cmp [word cs:cmp_dt+4], 0000h
|
|
jne rout3
|
|
mov edx, 0805f8c9h
|
|
cmp [dword cs:cmp_dt], edx
|
|
je @@dumpsice
|
|
mov edx, 0805f899h ; 99f80508 0000
|
|
cmp [dword cs:cmp_dt], edx
|
|
jne @@skip
|
|
REPT 8
|
|
xor si, si
|
|
ENDM
|
|
@@dumpsice:
|
|
IFDEF no_debug
|
|
add [cs:mdd],0a54dh
|
|
add ax, [cs:mdd]
|
|
ENDIF
|
|
@@skip:
|
|
|
|
ENDP
|
|
|
|
PROC rout3
|
|
mov bx, OFFSET cstart
|
|
mov cx, 256d
|
|
@@l1: add ax, 0aa4bh
|
|
; imul ax, 0de88h
|
|
xor [cs:bx], al
|
|
inc bx
|
|
IFDEF no_debug
|
|
int 1
|
|
ENDIF
|
|
loop @@l1
|
|
ENDP
|
|
|
|
PROC rout4
|
|
dec [doexit]
|
|
jz @@l2
|
|
@@l3:
|
|
xor ax, ax
|
|
dw 10 dup(0)
|
|
@@l4: dw 10 dup(0)
|
|
mov si, 'FG'
|
|
mov di, 'JM'
|
|
dw 5 dup(0)
|
|
mov ax, 0911h
|
|
IFDEF no_debug
|
|
int 3h
|
|
ENDIF
|
|
jmp @@l3
|
|
|
|
@@l2:
|
|
REPT 20
|
|
xor si, si
|
|
ENDM
|
|
mov [word ds:3*4+0], OFFSET cstart
|
|
mov [word ds:3*4+2], cs
|
|
IFNDEF no_debug
|
|
int 3
|
|
ENDIF
|
|
jmp rout5
|
|
|
|
mov ax, 4c00h
|
|
int 21h
|
|
ENDP
|
|
|
|
|
|
PROC rout5
|
|
|
|
IFDEF no_debug
|
|
int 01
|
|
ENDIF
|
|
dw 5 dup(0)
|
|
add [byte es:bx], 0d
|
|
inc bx
|
|
dw 50 dup(0)
|
|
jmp rout5
|
|
ENDP
|
|
|
|
IF ($-crypt_start) GT 1000d
|
|
ERR
|
|
ENDIF
|
|
|
|
ENDS
|
|
END
|
|
|
|
|
|
|