Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
HoRRoR RRC2008


Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Июл 21, 2006 9:02 am Заголовок сообщения: Контрольная сумма |
|
|
Скажите пожалуста, каким путем подсчитывается контрольная сумма и что она вообще из себя представляет(я так понял, это слово)? Речь идет не именно о РОМах, а о всех файлах. |
|
Вернуться к началу |
|
 |
Virtual_Killer

Зарегистрирован: 25.03.2004 Сообщения: 610 Откуда: Чекагинск
|
Добавлено: Пт Июл 21, 2006 11:38 am Заголовок сообщения: |
|
|
Контро́льная су́мма — некоторое значение, рассчитанное путём применения определенных операций (обычно сложения) над входными данными.
Самыми известными методами подсчёта контрольной являются методы семейства CRC. CRC (англ. cyclic redundancy check) — контроль циклически избыточным кодом.
Как подсчитывается? Зависит от применяемого метода.  _________________ Не поймите меня правильно |
|
Вернуться к началу |
|
 |
HoRRoR RRC2008


Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Июл 21, 2006 11:46 am Заголовок сообщения: |
|
|
Спасибо. А как понять "над входными данными"? |
|
Вернуться к началу |
|
 |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пт Июл 21, 2006 12:27 pm Заголовок сообщения: |
|
|
Ну, в моёй программе она подсчитывается так (взято из справочника)
1 Пропускается заголовок. (начинаем с 512 байта)
2 Считывается байт
3 он умножается на 256 и прибавляется в переменную
4 считывается следующий байт и прибавляется в переменную
5 если конец файла не достигнут, то возрашаемся на 2-ю строчку.
6 переводим переменную в бинарный формат
7 Берём слева 16 бит и переводим в 16-ричный формат. Это контрольная сумма. |
|
Вернуться к началу |
|
 |
HoRRoR RRC2008


Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Июл 21, 2006 12:57 pm Заголовок сообщения: |
|
|
Спасибо. |
|
Вернуться к началу |
|
 |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пт Июл 21, 2006 10:25 pm Заголовок сообщения: |
|
|
Я немного не правилно объяснил, 16 бит надо брать не слева, а справа. В общем, отделяем слово.
Я тот смотрел код ROM-ов и вычислил новый метод. Всё просто.
1. Пропускаем заголовок.
2. Считываем байт.
3. Добавляем в переменую.
4. Если не достигнут конец файла то возвращаемся на шаг 2
5. Отделяем от переменной слово.
6. Это контрольная сумма.
Так же я узнал, что контрольная сумма хранится по адрессу 18Eh, поэтому можно добавить шаг: 7. Если полученная контролная сумма не равна сохранёной, то ROM битый. |
|
Вернуться к началу |
|
 |
АнС RRC2008


Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пт Июл 21, 2006 11:53 pm Заголовок сообщения: |
|
|
Вот как раз на 7 стадии игра сверяет рассчитанную и имеющуюся чексумму и выдаёт красный экран в случае несовпадения.
Если в Gens поставить галочку AutoFIX CRC, то сам эмулятор перед запуском просчитает чексумму по этому алгоритму и запишет её в заголовок, откуда игра читает на 7 шаге.
Но некоторые игры считают чексумму по нестандартному алгоритму (у программистов был синдром NIH), поэтому при галочке AutoFIX CRC ваш Gens подсчитает н то число, которое хочет увидеть игра в заголовке своего РОМа. А значит красный (/чёрный/синий/...) экран всё равно появится, игра зависнет.
Вроде бы, в Alien Soldier с этим проблем нет. |
|
Вернуться к началу |
|
 |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Сб Июл 22, 2006 9:25 am Заголовок сообщения: |
|
|
АнС писал(а): | Вот как раз на 7 стадии игра сверяет рассчитанную и имеющуюся чексумму и выдаёт красный экран в случае несовпадения. |
Ну, а я что, не так сказал?
АнС писал(а): | Вроде бы, в Alien Soldier с этим проблем нет. |
Ага, не знаю в каком состоянии были разработчики, когда писали проверку ЧекСуммы. Команду Add (A0)+,D0 писали тридцать раз, а потом переход и всё сначало. Или это ещё один метод защиты? |
|
Вернуться к началу |
|
 |
Ghost

Зарегистрирован: 24.04.2004 Сообщения: 237
|
Добавлено: Вс Июл 23, 2006 8:33 pm Заголовок сообщения: |
|
|
Это просто ускорение процесса. Ну и что, что там идёт add.w 128 раз подряд, чем тебя это смущает? Зато команда dbra используется реже. Причём, как известно, с помощью одной команды dbra можно организовать цикл до 65536 итераций, а для подсчёта чексуммы в мегабайтовом роме одного цикла не хватит, поэтому делают вложенный цикл и добавляют ещё одну команду dbra (в других играх так). Вообще, независимо от способа подсчёта чексуммы, просто пропускай код её подсчёта до сравнения с $18E, если идёт команда BNE, просто пропускай её, если BEQ, прыгай туда, куда она указывает, и не парься.
Вообще, чексумма - самый примитивный способ защиты, его легко можно обойти. Есть вещи похуже, например, в Harry Potter (R). _________________ Мысль - это интеллектуальный эксцесс данного индивидуума. |
|
Вернуться к началу |
|
 |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Вс Июл 23, 2006 8:47 pm Заголовок сообщения: |
|
|
Ghost писал(а): | Вообще, чексумма - самый примитивный способ защиты, его легко можно обойти. Есть вещи похуже, например, в Harry Potter (R). |
Хотелось бы посмотреть, она на SEGA? |
|
Вернуться к началу |
|
 |
АнС RRC2008


Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вс Июл 23, 2006 10:58 pm Заголовок сообщения: |
|
|
Ghost писал(а): | Вообще, чексумма - самый примитивный способ защиты, его легко можно обойти. Есть вещи похуже, например, в Harry Potter (R). |
Так чексумма - это ж и не защита вовсе, а просто меры по обеспечению целостности программы - вдруг китайские копиры случайно модифицируют один бит в коде игры, и она вдруг вместо заставки покажет что-то типа goatse. Уж лучше тогда красный экран. |
|
Вернуться к началу |
|
 |
|