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.............. Не правда ли красиво? я думаю дога- даться как она работает не составит больмого труда.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября