IPB

Добро пожаловать, гость ( Вход | Регистрация )

> The Neverhood, хеш алгоритм
-=CHE@TER=-
Jul 9 2011, 12:33
Сообщение #1


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Пишу сейчас страничку для сайта (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" - тоже сойдёт.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
2 Страниц V < 1 2  
Reply to this topicStart new topic
Ответов(20 - 27)
hidefromkgb
Nov 23 2020, 10:42
Сообщение #21


Newbie
*

Группа: Delegated
Сообщений: 8
Регистрация: 8-March 19
Пользователь №: 18,032
Спасибо сказали: 1 раз(а)



Я верно понимаю, что перебиралось всё со скоростью 370100² / 35 / 60 ~ 65 миллионов XOR операций в секунду?

Спрашиваю, потому что у меня здесь есть игровая видеокарта NVidia RTX 2070s с теоретической пиковой производительностью в 10 триллионов (т.е. 10 миллионов миллионов) операций в секунду, а это означает что третью степень она посчитает за менее чем два часа.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Nov 23 2020, 13:01
Сообщение #22


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



QUOTE(hidefromkgb @ Nov 23 2020, 10:42) *
Я верно понимаю, что перебиралось всё со скоростью 370100² / 35 / 60 ~ 65 миллионов XOR операций в секунду?
Ну, наверное. Я не знаю какая тут производительность - Pentium 1,5 ГГц.

QUOTE(hidefromkgb @ Nov 23 2020, 10:42) *
Спрашиваю, потому что у меня здесь есть игровая видеокарта NVidia RTX 2070s с теоретической пиковой производительностью в 10 триллионов (т.е. 10 миллионов миллионов) операций в секунду, а это означает что третью степень она посчитает за менее чем два часа.
Так я ж и пишу - больше 2-х слов перебирать смысла нет - там столько коллизий будет, что ты запаришься их отсматривать в поисках осмысленных выражений. Там уже анализатор текста, ИИ и прочие нейронные сети писать придётся. (*улыбается*)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Jul 19 2022, 15:22
Сообщение #23


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



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, чтобы его поддержку туда добавили.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Siberian GRemlin
Jul 19 2022, 15:36
Сообщение #24


Advanced Member
***

Группа: CTPAX-X
Сообщений: 533
Регистрация: 4-February 08
Пользователь №: 2
Спасибо сказали: 221 раз(а)



Э-э, а я тут каким боком? Меня хороший человек, конечно, просил не так давно перевести эту игру за вознаграждение, но у меня на это времени совсем не было и я даже не брался.

Ссылку я ему отправил, надеюсь, ему понравится.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Jul 19 2022, 15:45
Сообщение #25


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Спасибо!
Просто ты на предыдущей странице спрашивал про то какие технические проблемы могут возникнуть при переводе и я подумал, что ты размышляешь над тем чтобы самому перевод сделать. А прошу прощения, потому что ты, возможно (я предполагаю), какие-то утилиты уже сделал или даже какую-то работу провёл и она, вроде как, получается не совсем нужной при таком раскладе.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Siberian GRemlin
Jul 19 2022, 16:05
Сообщение #26


Advanced Member
***

Группа: CTPAX-X
Сообщений: 533
Регистрация: 4-February 08
Пользователь №: 2
Спасибо сказали: 221 раз(а)



QUOTE(-=CHE@TER=- @ Jul 19 2022, 22:45) *
Просто ты на предыдущей странице спрашивал про то какие технические проблемы могут возникнуть при переводе и я подумал, что ты размышляешь над тем чтобы самому перевод сделать.
Я и размышлял, так как меня просили об этом. Просто, к тому времени я уже взял на себя куда большие обязательства и никак не мог ими пренебречь. Выкроить время на эту игру так и не удалось. Офигеть, прошло уже 4 года.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Siberian GRemlin
Aug 13 2022, 09:51
Сообщение #27


Advanced Member
***

Группа: CTPAX-X
Сообщений: 533
Регистрация: 4-February 08
Пользователь №: 2
Спасибо сказали: 221 раз(а)



Друг спрашивает, стоит ли ждать перевода «Skullmonkeys»?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Aug 13 2022, 15:02
Сообщение #28


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Мы с Rigel даже никогда не затрагивали этот вопрос в переписке.
Точно скажу, что у меня в планах нет, да, думаю, и у него тоже.
Причины по которым я таким переводом заниматься вряд ли буду:
1. Это не моя любимая игра и кроме видосов на тытрубе ничего о ней не знаю. Сюда же отнесу что меня эта аркада не заинтересовала, к тому же, судя по многочисленным отзывам, она ещё и достаточно капризная (например, чтобы убить врага нужно точно пиксель-в-пиксель приземлиться ровно на середину его головы сверху иначе сразу гибнешь сам).
2. Это игра для PSX, а, значит, красивого решения с перехватчиком не получиться сделать - нужно будет именно пересобирать и менять ресурсы.
3. Не особо понимаю что там переводить кроме пуктов меню и пары субтитров в видеороликах. Это же аркада, там нет стен текста. Иными словами усилий для перевода по технической части будет нужно много, а переводить-то толком и нечего (возможно, конечно, я чего-то не знаю, т.к. никогда не играл сам, и где-то в этой игре есть большой объём текста...). Это даже не как из пушки по воробьям стрелять, а как ядерной боеголовкой по муравьям.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

2 Страниц V < 1 2
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 13th May 2024 - 05:00