|
Move
#02
03 февраля 1997 |
|
XOR'em ALL - XOR'ки и как с ними бороться : IMP PROTECTION SYSTEM'95 & GOLDEN EAGLE PROTECTION SYSTEM.

XOR'EM ALL
──────────────────────────────────────────
(c) Ars
В этот раз я не смог найти себе более
глупого занятия, чем написать про ксорки.
Правда, сначала я хотел сказать что-нибудь
о, так сказать, приемах программирования,
типа мультиколора или скроллах по бордеру,
но потом передумал. Загрузите уж лучше са-
ми STS'ку и посмотрите сами то, что Вас
интересует. Хотя, честно говоря, сегодня
уже ни одной программы не найти, в которой
можно было бы спокойно покопаться. Всюду
поработали хакеры, понаставив ксорок и
декранчингов.
Ну с decrunching'ами уж ладно, тут все
понятно - полезная штука: то же что и рас-
паковщик, но гораздо круче и тормознее. Не
всегда можно дождаться запуска программы,
так и хочется надавить Reset ( особенно,
когда нет индикатора прогресса, как в дем-
ке FastCode). Однако, память экономится
немеряно. Взять вот к примеру Lemming'ов
(by PSG), втиснутых в 128Кб(!): а ведь
раньше целый диск занимали. Ну, ладно,
можно и подождать немного, раз такие дела.
А вот xor'ки, как раз наоборот, засоря-
ют память, причем как в прямом, так и в
переносном смыслах. В зависимости от сте-
пени изврата они пожирают от десятков байт
до десятков секторов. И не лень же кому-то
все заксоривать?! Понятно, что если не
лень, то значит это зачем-то необходимо. В
принципе, надо понимать, ксорка является
одним из способов защиты информации и ав-
торских прав, хоть и очень примитивным.
Непонятно только одно: от кого же все
защищаются? От юзеров? Ну не для всех ведь
людей слово "монитор" ассоциируется с вы-
ражениями "STS" или "кнопка NMI". От хаке-
ров? - разве можно защититься от хакеров?
Возможно лишь только приостановить процесс
взлома на несколько секунд (часов), и все
равно ведь до цели доберутся. Так что, хо-
чу сказать: если Вы собираетесь защитить
свой продукт, то не надейтесь на ксорки!
Лучше уж поставьте где-нибудь в середине
кода какую-нибудь извратскую проверку,
например:
RLC E,(IX+#13)
RET C
INC SP
SRL E
RET PO
Найти в 128 килобайтах памяти подобную
процедурку и въехать зачем она нужна всег-
да гораздо сложнее, чем раскрутить даже
самую изощренную ксорку. А вообще-то, по
моему мнению, если уж и ставить ксорку, то
только такую, которую самому будет сложно
взломать, даже зная, как она работает. Но
возможно ли это?
В заключении этого, надо полагать, не-
шуточного бреда, приведу несколько самых
ярких творений компьютерной мысли и спосо-
бы борьбы с ними:
IMP PROTECTION SYSTEM'95. Весь Mortal
Combat в свое время поголовно защищался
почему-то именно этой ксоркой. А некоторые
люди, такие как Andy2 и Warlock, даже что-
то там пытались в ней дорабатывать (пос-
ледний добавил "убивалку монитора"). Сразу
после запуска (#5D74) ксорка перекидывает-
ся в очищенный экран и получает управле-
ние. Ее начало выглядит достаточно бредо-
во: пересылки между регистрами, обращения
к ПЗУшке, какие-то расчеты на калькулято-
ре... Думаю, что трассировать ксорку и
разбираться что зачем не имеет никакого
смысла. Гораздо эффективным в данном слу-
чае является поиск более-менее "нормально-
го кода". По адресу #40C6 обнаруживаем
следующее:
#40C3 JP PO,#40CA
#40C6 LD A,R
XOR (HL)
LD (HL),A
#40CA LDI
RET PO
DEC SP
DEC SP
LD L,L
RET PE
А это и есть стандартная стековая ксорка.
Установив на этот адрес точку останова,
получим следующие значения регистров:
HL=#40D3 ;источник - заксоренный код
DE=#44CC ;назначение - выполнимый код
BC=#00FF ;длина блока
Обратим внимание также на стек, а точнее
на его содержимое:
SP=#402F (SP)=#44CB (SP-2)=#40C3
То есть: пока BC не равно 0, адрес выхода
#44CB пропускается в стеке и управление по
команде RET PE передается на адрес #40C3.
Как только, после очередного LDI, регистр
BC станет нулем, срабатывает RET PO и осу-
ществляется выход из цикла. Прокрутим раза
три цикл ксорки в мониторе и далее поста-
вив точку останова на адрес #44CB, мы по-
падем на загрузчик. В ячейке #40DE сохра-
няется адрес загрузки блока, а в #40E0-его
длина. Остается добавить, что после того
как мигнет синий border и начнется загруз-
ка с диска, управление по стеку передается
на адрес #412E.
GOLDEN EAGLE PROTECTION SYSTEM. Защита
ставилась на loader'ы Silicon Brains. Ос-
нована на оригинальной идее использования
стека в теле ксорки. Работа с памятью идет
только с помощью PUSH'ей и POP'ов. Я видел
несколько вариантов защиты, но они отлича-
лись только несколькими командами:
#5DC5 DI | EXX
LD SP,#5DFB | LD A,R
LD BC,#005F | XOR L
LD A,#28 | LD L,A
LD R,A | LD A,R
#5DD0 POP DE | XOR H
POP HL | LD H,A
EXX | PUSH HL
POP HL | LD A,R
POP DE | XOR E
LD A,R | LD E,A
XOR E | LD A,R
LD E,A | XOR D
LD A,R | LD D,A
XOR D | PUSH DE
LD D,A | #5DFA POP DE
PUSH DE | #5DFB POP HL
LD A,R | POP DE
XOR L | POP HL
LD L,A | DEC BC
LD A,R | LD A,B
XOR H | OR C
LD H,A | JR NZ,#5DD0
PUSH HL | #5E03 ....
Разумеется, что первоначально ничего по-
добного на цикл не наблюдается (здесь по-
казан уже расксоренный блок), а начиная с
адреса #5DFB (сюда устанавливается стек
при запуске) идет невразумительный бред.
Первым делом ксорка восстанавливает свои
последние 8 байт (4 раза POP и 4 PUSHа), и
дойдя до адреса #5DFA она обретает свой
"естественный" вид. Ну a дальше с помощью
4-х POP'ов стек смещается на 8 байт вверх,
т.е. на адрес #5E03, и круг замыкается...
(maybe to be continued...)
Другие статьи номера:
Предисловие - О новой оболочке газеты. |
Список BBS - Список, работающих BBS г.Минска. |
Размышления - Бредовые мысли о дальнейшем развитии оболочки газеты. Почему газета "нерегулярная". |
Обзор - Обзор устройств для SPECCY : Видеопорт. Контроллер любой IBM клавиатуры. |
Программистам - Пишем Multicolor... |
XOR'em ALL - XOR'ки и как с ними бороться : IMP PROTECTION SYSTEM'95 & GOLDEN EAGLE PROTECTION SYSTEM. |
Интервью - Интервью с Николаем Кежевниковым (NICK SOFT) |
Тест - Тест "Умеете ли вы слушать собеседника". |
Реклама - Реклама и объявления. |
Похожие статьи:
В этот день... 24 октября