Автор Тема: про взлом  (Прочитано 834 раз)

Оффлайн crazy_bender

  • Jr. Member
  • **
  • Сообщений: 62
  • Karma: +6/-0
    • Просмотр профиля
про взлом
« : Апрель 12, 2013, 11:00:46 am »
Захотелось мне поковыряться в кишках демки. только вот не пойму как узнать с какого адреса она стартует. как посмотреть бейсик лоадер на предмет старта. может гуру объяснят ил скажут какой прогой можно узнать?

Оффлайн jaws

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 10194
  • Karma: +504/-0
    • Просмотр профиля
Re: про взлом
« Ответ #1 : Апрель 12, 2013, 12:14:17 pm »
Ну может "Супер гуру" и скажут, а я лично, могу сообщить, что нет никакой программы для "взлома", разве что просто "freezer"ы в картриджах.
Первое это то, что дэмки написаны и упакованы, соответственно нужно, чтобы прошла распаковка сначала, потом начинается исходник так сказать, но во время работы кода он может меняться, ввиду самого кода.
Второе - это только ручной способ просматривания кода. Ну как вариант с чего может начинаться код:
 SEI, JMP, JSR
или даже с LDA.

Поэтому всегда были интересны открытые исходники, а не скомпилированная программа.

Но это моё мнение, не претендую на 100% правильность сказанного....

Ну и еще: рекомендую всё таки поподробнее изучить такие картриджи, как Action replay и Final cartridge III.
При загрузке файла, они показывают адрес памяти на который этот файл грузится, тоже возможный стартовый адрес программы.
 
« Последнее редактирование: Апрель 12, 2013, 12:20:56 pm от jaws »

Оффлайн BRE

  • Newbie
  • *
  • Сообщений: 16
  • Karma: +3/-0
    • Просмотр профиля
Re: про взлом
« Ответ #2 : Апрель 12, 2013, 01:08:30 pm »
Проще всего это делать в мониторе VICE. Запускаешь интересующую демку, ждешь пока она запуститься (ждешь пока она полностью развернется в памяти) и жмешь Alt+H.
Вот дока : http://www.viceteam.org/vice_9.html

На реальном железе, есть программы-мониторы, которые загружаются по адресу $C000 и позволяющие почти тоже, что и монитор VICE: просматривать память, ассемблировать/дизассеблировать код, сохранять участки памяти и т.д. И в картриджах такие программы есть.

Адрес с которой грузится программа это первое слово в файле (первые два байта). Все бейсиковые программы загружаются с адреса $0801 и состоят из передачи управлению ассемблерному коду (например):
10 sys 2061

Вот с этого адреса можно начинать смотреть. Как правило с начала, как написал jaws, произойдет запуск депакера, который распакует и развернет программу и данные по нужным адресам памяти, а потом он передает управление коду самой программы. Код депакера не большой и завершается JMP на точку входа  программы.
« Последнее редактирование: Апрель 12, 2013, 02:00:00 pm от BRE »

Оффлайн crazy_bender

  • Jr. Member
  • **
  • Сообщений: 62
  • Karma: +6/-0
    • Просмотр профиля
Re: про взлом
« Ответ #3 : Апрель 13, 2013, 05:39:13 pm »
спасибо!!! просто меня удивила убогость монитора по сравнению со спектрумом. например я так и не понял можно ли поменять значение какого либо регистра. да и если честно не информативен он. я говорю про VICE монитор. информацию по старту  демок я смотрел в диск докторе который на форуме выкладывался но это тоже не очень удобно.

Оффлайн BRE

  • Newbie
  • *
  • Сообщений: 16
  • Karma: +3/-0
    • Просмотр профиля
Re: про взлом
« Ответ #4 : Апрель 13, 2013, 05:47:21 pm »
например я так и не понял можно ли поменять значение какого либо регистра.
Из доки по ссылке приведенной выше:
registers [<reg_name> = <number> [, <reg_name> = <number>]*]
    Assign respective registers. With no parameters, display register values.

Если чуть чуть посидеть в мониторе, то к нему можно привыкнуть.
Что по сути нужно. Остановиться в заданной точке, дизассемблировать участок кода, просмотреть память. Даже по-шагово пройтись по коду можно.  Все это он предоставляет. :)

Оффлайн crazy_bender

  • Jr. Member
  • **
  • Сообщений: 62
  • Karma: +6/-0
    • Просмотр профиля
Re: про взлом
« Ответ #5 : Апрель 13, 2013, 05:58:12 pm »
спасибо еще раз! доку на монитор читал утром но бегло, мог и не заметить. а всему остальному научился ранее методом тыка. у меня реальный комодор меньше года. а заинтересовался я им зимой. поэтому опыта мало.
по сравнению с ZX очень сложная машинка поэтому и инетересно какие есть особенности в ковырянии кода.
я уже понял что на до смотреть ячейку памяти 01 на предмет включенного/выключенного Керналя. от него зависит где расположены адреса процедуры прерывания. в $314-315 или FFFE-FFFF
надо смотреть DD00 чтобы знать где лежит картинка.
может еще что то надо знать?
например не знаю как найти музыку. знаю что многие скомпилены под $1000, но ведь многие под другие адреса. какие?

Оффлайн BRE

  • Newbie
  • *
  • Сообщений: 16
  • Karma: +3/-0
    • Просмотр профиля
Re: про взлом
« Ответ #6 : Апрель 13, 2013, 06:30:49 pm »
я уже понял что на до смотреть ячейку памяти 01 на предмет включенного/выключенного Керналя.
Да, три младших бита отвечают за включение/отключение ROM basic, kernal, font и I/O. Т.е. можно вообще отключить все ROM и будет 64Кб RAM или выключить бейсик, но оставить kernal.

от него зависит где расположены адреса процедуры прерывания. в $314-315 или FFFE-FFFF
Вообще процессор всегда берет вектор IRQ из $fffe-$ffff, просто при включенном kernal этот вектор указывает вглубь него, на код сохраняющий регистры в стеке и передающий управление по адресу из вектора $0314-$0315.

надо смотреть DD00 чтобы знать где лежит картинка.
Эта ячейка (2 младших бита) отвечает за активный видеобанк. VIC может работать с 16Кб памяти из 64.
%00 - Bank#3 $c000-$ffff
%01 - Bank#2 $8000-$bfff
%10 - Bank#1 $4000-$7fff
%00 - Bank#0 $0000-$3fff

может еще что то надо знать?
Управляющие регистры VIC/SID/CIA. Их не много, в сети есть описания на английском, если не найдешь пиши.

например не знаю как найти музыку. знаю что многие скомпилены под $1000, но ведь многие под другие адреса. какие?
На сколько я помню ты сам указываешь в трекере с какого адреса должен будет работать плеер. Т.е. это может быть любой адрес.
Тут только просмотром кода можно понять, плеере активно работает с SID, если ты видишь кучу обращений по адресам SID, скорее всего это плеер. :)

Оффлайн crazy_bender

  • Jr. Member
  • **
  • Сообщений: 62
  • Karma: +6/-0
    • Просмотр профиля
Re: про взлом
« Ответ #7 : Апрель 15, 2013, 11:01:07 am »
а вообще сколько прерываний существует? кроме NMI и IRQ в 314-315?

Оффлайн BRE

  • Newbie
  • *
  • Сообщений: 16
  • Karma: +3/-0
    • Просмотр профиля
Re: про взлом
« Ответ #8 : Апрель 15, 2013, 11:10:30 am »
а вообще сколько прерываний существует? кроме NMI и IRQ в 314-315?
И еще одно: прерывание от команды BRK.
IRQ генерируется как VIC, так и CIA (таймеры).

Оффлайн crazy_bender

  • Jr. Member
  • **
  • Сообщений: 62
  • Karma: +6/-0
    • Просмотр профиля
Re: про взлом
« Ответ #9 : Апрель 15, 2013, 03:08:42 pm »
тоесть их одновременно может быть несколько? но я  читал что основное используемое все таки от VIC?

Оффлайн BRE

  • Newbie
  • *
  • Сообщений: 16
  • Karma: +3/-0
    • Просмотр профиля
Re: про взлом
« Ответ #10 : Апрель 15, 2013, 04:32:52 pm »
тоесть их одновременно может быть несколько?
Нет. Одновременно может быть только одно, но вот источник этого IRQ может быть раст, перо или таймер.

но я  читал что основное используемое все таки от VIC?
Да. Остальные прерывания, как правило, отрубаются сразу. Таймер может быть полезен, но тогда, нужно самому смотреть от чего пришло прерывание и разруливать.
« Последнее редактирование: Апрель 15, 2013, 05:05:02 pm от BRE »

Оффлайн Biga

  • Jr. Member
  • **
  • Сообщений: 68
  • Karma: +4/-0
    • Просмотр профиля
Re: про взлом
« Ответ #11 : Октябрь 13, 2014, 02:15:36 pm »
Возродим темку.  :) Из моих наблюдений, большинство пакеров работает в адресах от $100 и приблизительно до $300. Кинув взор на код можно найти или JMP или JSR ведущие далеко от этих адресов, например JMP $2000. Стоит отметить что код пакера на наличие адреса надо просматривать по окончании распаковки, ибо во время распаковки некоторые пакеры модифицируют свой код и изначально перехода на основную программу в них нет.