;Copyright (c) 1994, 1995, 1996 Takayuki Hosoda. All rights reserved.
;fnxcrypt version 1.3.9
;for Borland C(tm)
HACK equ 0
.186
DGROUP group _DATA
assume cs:_TEXT,ds:DGROUP
_TEXT segment byte public 'CODE'
assume cs:_TEXT
_fealnx proc near
push bp
mov bp, sp
mov al, byte ptr [bp+8]
cmp al, 0
jg short encrypt
jmp decrypt
encrypt:
push cx
push si
mov si, word ptr [bp+4]
push di
mov di, word ptr k_n
mov bx, word ptr [si]
mov cx, word ptr [si+2]
mov ax, word ptr [si+4]
mov dx, word ptr [si+6]
xor bx, word ptr [di]
xor cx, word ptr [di+2]
xor ax, word ptr [di+4]
xor dx, word ptr [di+6]
xor ax, bx
xor dx, cx
push di
push bp
mov bp, offset k
mov si, ax
mov di, dx
enloop:
xor ah, al
xor dl, dh
xor ah, byte ptr [bp]
xor dl, byte ptr [bp+1]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, bx
xor dx, cx
mov bx, ax
mov cx, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp+2]
xor dl, byte ptr [bp+3]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, si
xor dx, di
mov si, ax
mov di, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp+4]
xor dl, byte ptr [bp+5]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, bx
xor dx, cx
mov bx, ax
mov cx, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp+6]
xor dl, byte ptr [bp+7]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, si
xor dx, di
mov si, ax
mov di, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp+8]
xor dl, byte ptr [bp+9]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, bx
xor dx, cx
mov bx, ax
mov cx, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp+10]
xor dl, byte ptr [bp+11]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, si
xor dx, di
mov si, ax
mov di, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp+12]
xor dl, byte ptr [bp+13]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, bx
xor dx, cx
mov bx, ax
mov cx, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp+14]
xor dl, byte ptr [bp+15]
add ah, dl
inc dh
inc ah
add bp, 16
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, si
xor dx, di
if HACK
db 81h, 0fdh
kn dw offset k+62
else
cmp bp, word ptr k_n
endif
mov si, ax
jz short here
mov di, dx
jmp enloop
here:
pop bp
pop si
mov di, word ptr [bp+6]
xor bx, ax
xor cx, dx
xor ax, word ptr [si+8]
xor dx, word ptr [si+10]
xor bx, word ptr [si+12]
xor cx, word ptr [si+14]
mov word ptr [di], ax
mov word ptr [di+2], dx
mov word ptr [di+4], bx
mov word ptr [di+6], cx
mov ax, di
pop di
pop si
pop cx
pop bp
ret
decrypt:
push cx
push si
mov si, word ptr [bp+4]
push di
mov di, word ptr k_n
mov bx, word ptr [si]
mov cx, word ptr [si+2]
mov ax, word ptr [si+4]
mov dx, word ptr [si+6]
xor bx, word ptr [di+8]
xor cx, word ptr [di+10]
xor ax, word ptr [di+12]
xor dx, word ptr [di+14]
xor ax, bx
xor dx, cx
push di
push bp
mov bp, di
mov si, ax
mov di, dx
deloop:
xor ah, al
xor dl, dh
xor ah, byte ptr [bp-2]
xor dl, byte ptr [bp-1]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, bx
xor dx, cx
mov bx, ax
mov cx, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp-4]
xor dl, byte ptr [bp-3]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, si
xor dx, di
mov si, ax
mov di, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp-6]
xor dl, byte ptr [bp-5]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, bx
xor dx, cx
mov bx, ax
mov cx, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp-8]
xor dl, byte ptr [bp-7]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, si
xor dx, di
mov si, ax
mov di, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp-10]
xor dl, byte ptr [bp-9]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, bx
xor dx, cx
mov bx, ax
mov cx, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp-12]
xor dl, byte ptr [bp-11]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, si
xor dx, di
mov si, ax
mov di, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp-14]
xor dl, byte ptr [bp-13]
add ah, dl
inc dh
inc ah
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, bx
xor dx, cx
mov bx, ax
mov cx, dx
xor ah, al
xor dl, dh
xor ah, byte ptr [bp-16]
xor dl, byte ptr [bp-15]
add ah, dl
inc dh
inc ah
sub bp, 16
rol ah, 2
add dl, ah
rol dl, 2
add al, ah
add dh, dl
rol al, 2
rol dh, 2
xor ax, si
xor dx, di
cmp bp, offset k
mov si, ax
jz short there
mov di, dx
jmp deloop
there:
pop bp
pop si
mov di, word ptr [bp+6]
xor bx, ax
xor cx, dx
xor ax, word ptr [si]
xor dx, word ptr [si+2]
xor bx, word ptr [si+4]
xor cx, word ptr [si+6]
mov word ptr [di], ax
mov word ptr [di+2], dx
mov word ptr [di+4], bx
mov word ptr [di+6], cx
mov ax, di
pop di
pop si
pop cx
pop bp
ret
_fealnx endp
_fealskey proc near
push bp
mov bp, sp
push cx
push si
push di
mov al, byte ptr [bp+6]
cmp al, 0
jg short pos
jmp skend
pos:
cmp al, 8
mov ah, 3
je short validn
cmp al, 16
mov ah, 4
je short validn
cmp al, 32
mov ah, 7
je short validn
cmp al, 64
mov ah, 12
je short validn
mov ax, -1
pop di
pop si
pop cx
pop bp
ret
validn:
mov si, [bp+4]
mov byte ptr counter, ah
shl al, 1
xor ah, ah
mov dx, offset k
add dx, ax
mov di, offset q0
mov word ptr k_n, dx
if HACK
mov word ptr cs:kn, dx
endif
mov ax, word ptr [si]
mov dx, word ptr [si+2]
mov bx, word ptr [si+4]
mov cx, word ptr [si+6]
mov word ptr [di+16], ax
mov word ptr [di+18], dx
mov word ptr [di+20], bx
mov word ptr [di+22], cx
mov ax, word ptr [si+8]
mov dx, word ptr [si+10]
mov bx, word ptr [si+12]
mov cx, word ptr [si+14]
mov word ptr [di+4], ax
mov word ptr [di+6], dx
mov word ptr [di+8], bx
mov word ptr [di+10], cx
xor ax, bx
xor dx, cx
mov word ptr [di], ax
xor ax, ax
mov word ptr [di+2], dx
mov word ptr [di+12], ax
mov word ptr [di+14], ax
mov si, di
mov ax, word ptr [di+20]
mov dx, word ptr [di+22]
skey_lp:
xor ax, word ptr [si+12]
xor dx, word ptr [si+14]
xor ax, word ptr [di]
xor dx, word ptr [di+2]
mov bx, ax
mov cx, dx
mov ax, word ptr [si+16]
mov dx, word ptr [si+18]
xor ah, al
xor dl, dh
xor bl, dl
add ah, bl
inc ah
rol ah, 2
xor bh, ah
add dl, bh
rol dl, 2
xor ch, dl
xor cl, ah
add dh, ch
add al, cl
inc dh
rol al, 2
rol dh, 2
mov word ptr [si+24], ax
mov word ptr [si+26], dx
xor ax, word ptr [si+16]
xor dx, word ptr [si+18]
xor ax, word ptr [di+4]
xor dx, word ptr [di+6]
mov bx, ax
mov cx, dx
mov ax, word ptr [si+20]
mov dx, word ptr [si+22]
xor ah, al
xor dl, dh
xor bl, dl
add ah, bl
inc ah
rol ah, 2
xor bh, ah
add dl, bh
rol dl, 2
xor ch, dl
xor cl, ah
add dh, ch
add al, cl
inc dh
rol al, 2
rol dh, 2
mov word ptr [si+28], ax
mov word ptr [si+30], dx
xor ax, word ptr [si+20]
xor dx, word ptr [si+22]
xor ax, word ptr [di+8]
xor dx, word ptr [di+10]
mov bx, ax
mov cx, dx
mov ax, word ptr [si+24]
mov dx, word ptr [si+26]
xor ah, al
xor dl, dh
xor bl, dl
add ah, bl
inc ah
rol ah, 2
xor bh, ah
add dl, bh
rol dl, 2
add si, 12
xor ch, dl
xor cl, ah
add dh, ch
add al, cl
inc dh
rol al, 2
rol dh, 2
mov word ptr [si+20], ax
dec byte ptr counter
mov word ptr [si+22], dx
jz short skend
jmp skey_lp
skend:
mov ax, ds
mov bx, es
mov es, ax
mov cx, 12
xor ax, ax
cld
rep stosw
mov es, bx
pop di
pop si
pop cx
pop bp
ret
_fealskey endp
_TEXT ends
_DATA segment word public 'DATA'
q0 dw 0, 0
q1 dw 0, 0
q2 dw 0, 0
a dw 0, 0
b dw 0, 0
c dw 0, 0
k dw 72 dup (0)
k_n dw offset k+62
counter dw 0
_DATA ends
public _fealnx
public _fealskey
end