Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Программирование (http://zx-pk.ru/forumdisplay.php?f=14)
-   -   Быстрое самоуничтожение (http://zx-pk.ru/showthread.php?t=6185)

Barmaley_m 21st September 2007 02:10

Быстрое самоуничтожение
 
Задача - как можно быстрее затереть содержимое памяти (чтобы хакер не успел нажать NMI).

Вот так решил ее ASC:

SELF_DESTRUCT:
LD DE,0D5D5H
LD HL,DESTRU
LD SP,HL
LD BC,-4
DESTRU:
PUSH DE
PUSH DE
ADD HL,BC
JP (HL)

Команды PUSH DE заполняют память кодами D5 (PUSH DE). С каждым проходом цикла команд PUSH DE становится все больше. Таким образом, память затирается практически непрерывной серией команд PUSH, которые на Z80 являются наиболее быстрым способом записи в память.

Можно заметить, что команд PUSH DE этим фрагментом генерируется больше, чем используется. Андрей Гетало (FOCAL Soft) придумал, как это оптимизировать:

SELF_DESTRUCT:
LD SP,DESTRU
LD DE,0D5D5H
DESTRU:
PUSH DE
LD HL,0
ADD HL,SP
JP (HL)

Теперь все коды D5 (PUSH DE), которыми заполняется память, выполняются при каждом последующем проходе цикла. Их количество растет экспоненциально (как 3^n). 64кб адресного пространства Z80 перетираются (если пренебречь последними командами цикла) за 32768*11 = ~360448 тактов. При частоте 3.5МГц это ~0,1 секунды.

Lethargeek 21st September 2007 09:43

Прыкольно! Только для практической применимости (затереть только что отработавший кусок допустим защиты, "пока хакер не успел нажать NMI") нужно остановку предусмотреть. Типа dec+retz на #D5D5...

Barmaley_m 21st September 2007 17:30

Этот фрагмент срабатывает только тогда, когда обнаружена чрезвычайная ситуация (например, код обработки NMI в ПЗУ бейсика нестандартный) - в этом случае приходится жертвовать работоспособностью программы ради защищенности :)

char 21st September 2007 19:04

инструкции в DE занести POP'ом.

psndcj 21st September 2007 21:37

может я и чайник - но почему бы не стирать PUSH'ами с конца подпрограммы? без всякого ADD.. быстрее же на порядок

himik 21st September 2007 21:45

щас вспомню, блин, я уже и код то забыл, как команды правильно писать :)

Code:

        ld sp,sux_1
sux_1    pop hl
        ex (sp),hl

такты и прочее считайте сами, мну не помнит ни фига.

char 21st September 2007 23:33

psndcj, расшифруй - что сказал?

himik, у тебя медленно (29 тактов на 2 байта) забивает вперед память и сбрасывается на 0 адресе пзу ;)

himik 22nd September 2007 00:20

Quote:

Originally Posted by char (Post 102852)
psndcj, расшифруй - что сказал?

himik, у тебя медленно (29 тактов на 2 байта) забивает вперед память и сбрасывается на 0 адресе пзу ;)

зато коротко :)
в STS обман хорошо вставлять, пока страницу не обновишь при трассировке фиг увидишь подмену...

valeron 22nd September 2007 00:50

Quote:

Originally Posted by himik (Post 102860)
зато коротко :)
в STS обман хорошо вставлять, пока страницу не обновишь при трассировке фиг увидишь подмену...

Хитр! А главное - коварен!:v2_wink2:
Только к чему эти подстраховки если в эмуляторе, в том же Анрыле можно посмотреть все что хочешь и сохранить снапшот. В чем актуальность?

himik 22nd September 2007 00:54

Quote:

Originally Posted by valeron (Post 102865)
Хитр! А главное - коварен!:v2_wink2:
Только к чему эти подстраховки если в эмуляторе, в том же Анрыле можно посмотреть все что хочешь и сохранить снапшот. В чем актуальность?

ну это же не сию минуту придумано :)
я это из недр башни своей вытащил, давным давно, когда писюков еще столько не было, когда свопились софтом через снейл мейл, а интернет был чем-то заоблачным...
мы все разбирали в ручную в том же STS, и вот чтоб обходить таких умельцев мы делали разного рода защиты. Сей код кусочек защиты, троссируя которую на обычном реале, ты не замечаешь подвоха, а он есть :)


All times are GMT +4. The time now is 21:16.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.