![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Пишу сейчас страничку для сайта (ctpax-cheater) для игры The Neverhood.
В игре во всю используется вот такая хеш-функция (я её немножно переписал под свои нужды): CODE // The Neverhood hash routine Const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; Function StrHash(S: String): Longword; Var I, C, K: Longword; Begin result:=0; C:=0; For I:=1 To Length(S) Do Begin S[I]:=UpCase(S[I]); K:=Pos(S[I], chars); If K <> 0 Then Begin If K <= 10 Then // Digits C:=C + (Ord(S[I]) + $16 - $40) Else C:=C + (Ord(S[I]) - $40); If C >= $20 Then C:=C - $20; result:=result xor (1 ShL C); End; End; End; Т.е. игнорируется всё, что не цифры и английские буквы, затем от получившегося считается хеш. В demo-версии эта функция находится в sub_425C10. Ею зашифрованы как коды, так и имена файлов в .BLB архивах. В Интернете нагуглил только два кода (там ещё один есть, но он неработающий - что-то забыли): fastforward - увеличивает скорость игры в два раза (хеш $843070C0) happybirthdayklaymen - работает только на первом экране - перекидывает игрока на второй (*улыбается*) (хеш $188B2105) После набора кода нужно нажать ENTER. Перед набором, кстати, тоже неплохо будет - вдруг уже что-то нажимали (ENTER отправляет код на обработку и чистит буфер ввода для кода). Однако, если поглядеть под отладчиком даже demo-версию - кодов там дохрена и больше (вернее хешей). Плюс они раскиданы по нескольким разным функциям (как два кода выше), что затрудняет работу с ними. Есть, например, хеш $10410127 - он сохраняет текущий кадр игры в c:\NevShot.bmp (даже во время проигрывания smack-видео!). Но вот какой код ему соответствует - хрен знает. Есть два способа посмотреть все коды: 1) Заменить хеши на известные значения. 2) Brute-force (полный перебор). 1-ый способ очень неудобен, потому что: а) Все хеши кодов внутри какого-то case/switch и они должны быть заменены на соответствующие (т.е. отсортированы по возрастанию, а не как попало). б) Они разбросаны по разным функциям, так что бегать между ними очень неудобно. в) Этот способ неудобен ещё и тем, что его нельзя предложить всем имеющим игру - им придётся её как минимум патчить. Перебор же очень трудоёмкий, даже если выбросить оттуда UpCase (т.е. заведомо перебирать только заглавные буквы и цифры) и оптимизировать. Я заметил, что в этом алгоритме на каждом шаге зажигается или гасится (если уже был зажжён) 1 бит в хеше. Т.е. для упомянутого хеша $10410127 слово-пароль должно состоять как минимум из 8 знаков (с учётом того, что ни один бит не выключался), так как в этом числе 8 не нулевых бит. Собственно, вопрос: кто-нибудь может предложить простой и быстрый алгоритм для перебора? Может быть я чего-то не вижу и здесь можно гораздо быстрее и проще хеш подобрать. Мне не обязательно получить именно тот код, который задумывался создателями - какая-нибудь последовательность типа "bsb99dc" - тоже сойдёт. |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
QUOTE Rigel (перевод и графика) и -=CHE@TER=- (техническая часть) выпустили полный русский текстовый корректный перевод игры The Neverhood Chronicles (DreamWorks Interactive / The Neverhood, Inc. / 1996). "Корректный перевод" означает, что перевод сделан максимально близко к оригиналу, а не так, как это было у издателей "Дядюшка Рисёч" и "Фаргус". Переведено всё: видеоролики, записки, стена, все рисунки с надписями и даже головоломка с уменьшающей машиной (в этом месте существующие прохождения не помогут, думайте сами). Перевод полностью текстовый. Это означает, что в видеороликах, где есть речь или надписи на английском языке, были добавлены внешние текстовые субтитры. Также добавлена поддержка двух упомянутых выше русских версий от издателей "Дядюшка Рисёч" и "Фаргус", где "на лету" исправляются поломанные файлы ресурсов, позволяя играть без ошибок и вылетов. В этом случае необходимо выбрать "<original>" при запуске, чтобы эти версии работали "как есть", без подключения перевода (который настоятельно рекомендуется использовать только с оригинальной английской версией игры). По технической части перевод включает в себя такие вещи, как: - исправление ошибок оригинальной игры; - игра больше не работает с реестром и при полной установке полностью переносима (portable); - режимы "DirectDraw Emulated" и новый "Compatibility renderer", работающий на любой системе; - поддержка джойстиков и игровых устройств; - автоматическое исправление ресурсов у версий от издателей "Дядюшка Рисёч" и "Фаргус", чтобы они не рушили игру (исправлены только ошибки, приводящие к аварийному завершению программы, всё остальное нетронуто и оставлено как есть); - возможность добавлять свои переводы на других языках - сделан полный набор утилит переводчика (Language Translation Kit); - и многое-многое другое - см. файл "NHC-READ.TXT" с полным списком изменений. Перевод, исходные коды и утилиты ко всему можно взять здесь: http://ctpax-cheater.losthost.org/htmldocs/nvh.htm#nvh_addon Также рекомендуется к просмотру обновлённый обзор русских переводов издателей "Дядюшка Рисёч" и "Фаргус" от Rigel, приуроченный к выходу перевода - это второе издание обзора - переработанное и дополненное многими новыми интересными находками, а также теперь без ненормативной лексики и другого шок-контента: https://www.youtube.com/watch?v=qbe2C0uTC3c Siberian GRemlin, извини, что я тебя не предупредил, но, во-первых, Rigel ещё до тебя предлагал мне переводом заняться, а, во-вторых, мы выпустили перевод под максимально свободными лицензиями (для технической и творческой части) - каждый может делать с ним всё что захочет - мы полностью отдаём перевод и все его файлы в свободный доступ. В частности мы пытаемся договориться с разработчиками SCUMMVM, чтобы его поддержку туда добавили. |
![]() ![]() |
Упрощённая версия | Сейчас: 1st May 2025 - 02:14 |