Часто можна зустріти програми, кряки, в яких чиїсь праці приписує собі звичайний користувач. Просто відкриває файл і править інформацію про автора. Особисто мене подібний хід подій абсолютно не влаштовує.
Ось і прийшла ідея написати захист від дурня. Юзверя нічого не прочитає, а хакеру — все одно. Я вирішив створити маленький код, який би змінював свій зовнішній вигляд com файлу до невпізнання.
Прикинув, що писати її за принципом вірусу (замінювати перші три байти програми — аналізатори антивірусів будуть бунтувати — а воювати з ними бажання не було. Крім того, є можливість поправити вихідну програму, на стадії написання. Для цього замість директиви org 100h треба писати org 115.
Втрата в 15h байт не є катострофой для багатьох дрібних програмулик.
Тепер вибір алгоритму… Стандартний — не цікаво, складний — довго. Результат — використання xor mem, mem-byte.

;——- Нижче йде лістинг…
.286
.model tiny
.code
endl macro
db 0ah, 0dh, “$”
endm
Print macro string
mov dx, offset string
mov ah, 9h
int 21h
endm
CloseFile macro
mov ah, 3eh
int 21h
endm

org 100h
mov ax, 3d00h+11000011b
mov cx, 0
mov dx, offset aDataFileName
int 21h
jc @@error
mov bx, ax

mov ah, 3fh
mov cx, 0fffeh-200h
mov dx, offset ReadBuff
int 21h
jc @@erxit
push ax
CloseFile

pop cx
push cx
inc cx
mov DataLen, cx
mov di, offset ReadBuff
dec cx
inc di
XorLoop:

mov al, [di]
xor al, [di-1]
mov [di], al
inc di
loop XorLoop
mov ah, 3ch
xor cx, cx
mov dx, offset aOutFileName
int 21h
jc @@errCreate

mov bx, ax
pop ax
add ax, 14h; коригування довжини результатирующего файлу
mov cx, ax
mov ah, 40h
mov dx, offset OUT_COM
int 21h
jc @@errCreate
mov ah, 3eh
int 21h
ret
@@errCreate:
CloseFile
pop cx
Print aFalture1
ret
@@erxit:
CloseFile
@@error:
Print aFalture
ret
.data
aDataFileName db «DATA.DAT»,0
aOutFileName db «CRACK.COM»,0
aFalture db «can’t working… Data file was lost!»
endl
aFalture1 db «can’t create outgoing file!»
endl
.data
OUT_COM db 0b9h
DataLen dw ?
; Нижче йде код распаковщика…
db 0BFh, 15h, 01, 03h, 0f9H
db 8Ah, 5h, 4fh, 8ah, 25h, 32h, 0c4h, 88h
db 45h, 1, 0e2h, 0f4h, 90h
ReadBuff db ?
end start