Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZX-Review-1992-01-12.pdf
Скачиваний:
243
Добавлен:
28.03.2015
Размер:
2.43 Mб
Скачать

Листинг ассемблера программы в кодах, которая содержится в строке 30 DATA.

7F00

XOR A

Обнуление аккумулятора.

7F01

SCF

Принудительное включение флага переноса.

7F02

LD IX,7F10

В регистр IX поместили адрес с которого

 

 

начнется размещение хэдера в памяти компьютера.

7F06

CALL 0556

Вызов загружающей процедуры ПЗУ.

7F09

RET

 

Глава 2. Блокировка автозапуска.

Введение.

После внимательного ознакомления со структурой фирменных программ, читателю становится очевидно, что для взлома программы необходимо, прежде всего, исследовать Бейсик файл (первичный загрузчик), этот вывод стал очевидным и для фирм производителей программного обеспечения. Вот почему многие методы защиты направлены в основном на защиту Бейсик файла.

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

В этой главе рассмотрены три концепции блокировки автозапуска программ. Естественно, каждую из этих концепций можно использовать независимо от других. Можно, однако применить и комплексный подход. Но основным является то, что каждый их предложенных Вашему вниманию подходов имеет свои достоинства, но он в то же время имеет и свои недостатки.

Мы думаем, что ознакомившись с этими концепциями более подробно. Вы выберете для себя ту, которая наилучшим образом удовлетворяет Вашим потребностям.

2.1 Загрузка Бейсика через блок кодов.

После того, как читатель ознакомился со структурой хэдера, ему становится ясно, что фактически между заголовком Бейсика и заголовком кодов разница небольшая. А разницы между непосредственным файлом Бейсика и непосредственным файлом кодов нет вообще никакой.

Примечание: В данном случае под файлом подразумевается та часть программы, которая загружается после хэдера. На самом деле отличия есть и заключаются они в следующем:

Бейсик файл загружается в память компьютера начиная с адреса, задаваемого системной переменной PROG, блок кодов же загружается с адреса, указанного в хэдере.

Бейсик файл обрабатывается интерпретатором как определенная последовательность символов кодов Бейсика. Блок кодов обрабатывается процессором как последовательность кодов Z80.

На этом свойстве этих файлов и основан данный метод взлома. В самом деле, нам ничего не стоит обмануть компьютер он думает, что загружает в память файл кодов, а на самом деле загружает файл Бейсика и при этом он не сможет установить никакой ошибки. Поскольку при той проверке, которую осуществляет "ZX SPECTRUM", такую ошибку установить просто напросто невозможно.

Итак, рассмотрим этот метод более подробно.

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

Для того, чтобы решить данную задачу, нам необходимо прежде всего узнать длину Бейсик файла. Это можно сделать, воспользовавшись вышеприведенной программой для анализа хэдера. То же можно сделать и воспользовавшись программой копировщиком.

Обычно в копировщике мы можем наблюдать следующую картину (рис. 2):

Имя программы

Тип программы Строка автозапуска

Длина

xxxxxxxxxxx

P

10

423

yyyyyyyyyyy

C

35000

22250

zzzzzzzzzzz

C

61200

1800

Рис. 2 После имени программы обычно появляется сообщение о типе данной программы:

PROGRAM, CODE и т. п.

Строка автозапуска появляется только для программ Бейсика (для кодов же появляется номер ячейки памяти, с которого начинается загрузка). В разделе "длина" появляется длина загружаемого вслед за хэдером файла, это не длина хэдера.

Нам в нашей работе понадобится "реальная длина" (В большинстве случаев это значение не совпадает со значением "длина" в хэдере, но бывают и исключения). Кроме этого Вам необходимо запомнить номер строки автозапуска.

Следующим этапом нашей работы является создание нового хэдера, благодаря которому мы сможем загрузить нашу программу в произвольное место памяти. Как Вам уже вероятно известно, компьютер не в состоянии отличить файл Бейсика от файла кодов. Этим мы с Вами и воспользуемся. Мы создадим хэдер, который якобы должен загружать коды с определенного места памяти, но вместо файла кодов мы загрузим туда файл Бейсика для последующего изучения.

Для создания такого хэдера нам понадобится значение "реальной длины" файла, взятое из кодировщика. Теперь запишем на ленту этот хэдер кодов командой с клавиатуры: save "имя файла" code 30000, реальная длина

В графе "имя файла" Вам необходимо будет написать произвольное название файла по Вашему выбору, но не более 10 символов. Значение 30000 после CODE означает, что файл кодов, загружающийся после этого хэдера, будет загружаться с ячейки памяти 30000 (это же касается и записи информации т.е. после подачи данной команды, на ленту, должен будет записаться блок длиной "реальная длина", начиная с ячейки памяти 30000. Однако, поскольку нам необходим только хэдер, мы не будем дожидаться выгрузки на ленту файла кодов) и выключим магнитофон.

Теперь мы имеем следующие магнитофонные блоки:

Исходный хэдер (1) Бейсика

 

Файл Бейсика (1')

 

Специальный хэдер кодов (2)

Этот хэдер мы имели вместе

Этот

файл

описывался

Этот

хэдер мы

создали

с блоком Бейсик программы,

исходным

 

хэдером

и

таким

образом,

чтобы он

длина хэдера 19 байт.

загрузить

в

компьютер

описывал файл Бейсика как

 

автозапуском.

 

 

файл кодов. Длина=19 байт

Теперь нам необходимо непосредственно осуществить подмену. Для этого подадим команду с магнитофона:

LOAD "" CODE

после которой загрузим созданный нами хэдер. После этого хэдера Вам необходимо загрузить файл Бейсика (1'), однако этому файлу не должен предшествовать исходный хэдер (1). (В данном случае этот исходный хедер (1) не загружается вообще). Наилучшее техническое решение, позволяющее точно найти файл Бейсика (1'), пропустив исходный хэдер, является временное выдергивание шнура загрузки из магнитофона совместно с использованием клавиши ПАУЗА магнитофона (если такая имеется).

Итак, Вы осуществили подмену и загрузили Бейсик файл под видом кодов. Теперь Вашей задачей является просмотреть этот файл и изучить его структуру.

(Продолжение следует.)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]