Добро пожаловать, гость ( Вход | Регистрация )
| -=CHE@TER=- |
Jul 9 2011, 12:33
Сообщение
#1
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,401 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 323 раз(а) |
Пишу сейчас страничку для сайта (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" - тоже сойдёт. |
![]() ![]() |
| Axsis |
Jul 9 2011, 20:07
Сообщение
#2
|
|
Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 121 Регистрация: 6-February 08 Пользователь №: 374 Спасибо сказали: 149 раз(а) |
$10410127 - "AACCHFFD"
Правда у меня демка с какими-то артефактами работает... _ttp://fastpic.ru/view/25/2011/0710/5d5d4d76cb7d379fd6feb5c044daacc0.png.html Алгоритм опишу чуть позже, а может к тому времени и сам разберёшь, он на самом деле довольно прост. Спасибо сказали:
|
-=CHE@TER=- The Neverhood Jul 9 2011, 12:33
-=CHE@TER=- $10410127 - "AACCHFFD" ;)Вай!... Jul 10 2011, 04:30
Axsis В общем каждый символ кода (цифра или буква) сдвиг... Jul 11 2011, 14:15
-=CHE@TER=- Спасибо большое!
Примерно понял, в ближайшее в... Jul 11 2011, 17:05
-=CHE@TER=- Вот так:
Function HashToStr(Hash: Longword... Jul 16 2011, 08:44
Axsis google на запрос "c:\NevShot.bmp" п... Jul 16 2011, 20:00
-=CHE@TER=- google на запрос "c:\NevShot.bmp" п... Jul 17 2011, 07:29
-=CHE@TER=- Так, почистил и переместил тему сюда.
Ещё раз отде... Jan 1 2012, 14:14
-=CHE@TER=- Вчера обновил (так, мелкое обновление перед переме... Apr 22 2014, 13:00
Siberian GRemlin Ты уверен, что смотрел второе, исправленное издани... Apr 23 2014, 12:50
-=CHE@TER=- Тут проблема в том, что фиг знает как отличить пер... Apr 24 2014, 05:46
Siberian GRemlin Проверил. Второе издание отличается только исправл... Apr 24 2014, 13:14
-=CHE@TER=- Ну, значит моё исправление точно лишним не будет. ... Apr 24 2014, 14:11
Siberian GRemlin Какие технические сложности могут возникнуть при п... Mar 26 2018, 08:45
-=CHE@TER=- Какие технические сложности могут возникнуть при п... Mar 26 2018, 09:47
-=CHE@TER=- Товарищ закончил видео:
[url=https://www.youtube.c... Mar 28 2018, 10:16
Siberian GRemlin Нет, «hood» это суффикс, используемый в существите... Mar 28 2018, 13:54
-=CHE@TER=- Кстати, что-то я протупил - в игре есть несколько ... Apr 12 2018, 15:55
-=CHE@TER=- Ну, начну в хронологическом порядке про хеши - с з... Apr 11 2020, 13:25
hidefromkgb Я верно понимаю, что перебиралось всё со скоростью... Nov 23 2020, 10:42
-=CHE@TER=- Я верно понимаю, что перебиралось всё со скоростью... Nov 23 2020, 13:01
-=CHE@TER=-
Siberian GRemlin, извини, что я тебя не предупре... Jul 19 2022, 15:22
Siberian GRemlin Э-э, а я тут каким боком? Меня хороший человек, ко... Jul 19 2022, 15:36
-=CHE@TER=- Спасибо!
Просто ты на предыдущей странице спра... Jul 19 2022, 15:45
Siberian GRemlin Просто ты на предыдущей странице спрашивал про то ... Jul 19 2022, 16:05
Siberian GRemlin Друг спрашивает, стоит ли ждать перевода «Skullmon... Aug 13 2022, 09:51
-=CHE@TER=- Мы с Rigel даже никогда не затрагивали этот вопрос... Aug 13 2022, 15:02![]() ![]() |
| Упрощённая версия | Сейчас: 2nd December 2025 - 02:21 |