|
Move
#03
15 марта 1997 |
|
XOR'em ALL - Ксорка с командой LDIR , Обратные ксорки.

КСОРКИ
──────────────────────────────────────────
(c) Mastsoft
Привет всем! В этой статье я решил про-
должить тему про ксорки, которую в преды-
дущем номере начал обсуждать ARS. И в этой
статье я просто внесу некоторые дополнения
и расскажу о некоторых новых приемах защи-
ты. Итак, поехали!
Первый, и пожалуй самый интересный при-
ем связан со всем известной командой LDIR.
Начну с особенностей этой команды. Что де-
лает процессор когда встречает команду
LDIR?
1. Процессор считывает код команды.
2. Из регистра HL берется байт.
3. Байт записывается в регистр DE.
4. Увеличивается регистр HL (HL=HL+1)
5. Увеличивается регистр DE (DE=DE+1)
6. Уменьшается регистр BC (BC=BC-1)
Так продолжается до того, как BC станет
равен 0.
Самое главное в этой последовательности
команд то, что ПРОЦЕССОР ПОСТОЯННО СЧИТЫ-
ВАЕТ КОД КОМАНДЫ LDIR.
Что же произойдет если HL залезет на
код команды LDIR ?. Я думаю, что вы намек
поняли. Поэкспериментировав с этой коман-
дой, можно добиться интересных результа-
тов.
Теперь я расскажу о примитивной привяз-
ке ксорки к определенной области памяти.
Вот, например, примитивная ксорка:
JR START
STACK POP DE
PUSH DE
RET
START
XOR A
LD R,A
LD HL,BEG_DATA
LD BC,длина в байтах.
LOOP LD A,R
XOR (HL)
XOR H
XOR L
CALL STACK
XOR E
XOR D
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
JR NZ,LOOP
BEG_DATA...............
Когда выполняется комманда CALL на стек
устанавливается тот адрес, который шел не-
посредственно за CALL. Процедура STACK
снимает этот адрес в DE. После комманды
CALL стоит XOR E, XOR D. Получается, что
если взломщик перенесет ксорку в другое
место в регистре DE будет другое значение
и раскрутка ксорки произойдет неправильно.
ОБРАТНЫЕ КСОРКИ.
В последнее время появилось много так
называемых ОБРАТНЫХ КСОРОК. Отличие обрат-
ной ксорки от простой в том, что расксори-
вание начинается не с начала расксоривае-
мого блока а с конца.
Например:
START DI
XOR A
LD R,A
LD HL,END_DATA
LD BC,длина в байтах.
LOOP LD A,R
XOR (HL)
XOR H
XOR L
LD (HL),A
DEC HL
DEC BC
LD A,B
OR C
JR NZ,LOOP
***
END_DATA...............
Преимущество такой ксорки перед простой
в том, что никак нельзя поставить точку
останова (стандартными средствами). Прихо-
дится трассировать ксорку от начала до
конца. Согласитесь, довольно утомительное
занятие.
И напоследок я приведу оригинальную об-
ратную ксорку :
DI
XOR A
LD R,A
LD IX,END_DATA
LD HL,LOOP
LOOP LD A,R
XOR (IX+0)
LD (IX+0),A
DEC IX
JP (HL)
***
END_DATA..............
Не правда ли красиво? я думаю дога-
даться как она работает не составит
больмого труда.
Другие статьи номера:
Похожие статьи:
В этот день... 17 ноября