Command & Conquer: Red Alert [Hidden Easter Egg], хеши для кодов |
Добро пожаловать, гость ( Вход | Регистрация )
Command & Conquer: Red Alert [Hidden Easter Egg], хеши для кодов |
-=CHE@TER=- |
Apr 11 2020, 14:53
Сообщение
#21
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Так, в теме про The Neverhood подробности написал, теперь давайте здесь закончим.
Короче, в начале недели написал мне Corvin, что нашёл какой-то CD с Exhumed Demo. Я было подумал, что там какая-то особенная версия, но оказалась, что она уже известна. Как он потом объяснил, это для людей которые хотят эстетики - не просто скачать откуда-то демо-версию, а взять её с оригинального диска... Нда... ну, не важо. Помимо этого там были демки и других игр, в том числе C&C:RA1. Заглянул я, значит, демку RA1 посмотреть, а там, ох-ты-ж-охренеть-просто, остались дебажные символы с именами переменных и функций от Watcom. Я не смог пройти мимо такого подарка и загрузил всё это дело в IDA. Увы и ах, игра безвозвратно изуродована классами и прочими объектами, так что код практически не восстанавливается толком. Зато я теперь знаю что функция считающая хеш от строк называется Obfuscate(). Мелочь, а приятно, да. Но ещё я обнаружил, что она, помимо тех уже известных двух хешей, считает хеши и от трёх массивов, которые тоже используются как слова из командной строки (в полной версии их не было). Вот эти списки с оригинальными именами взятые из дебажных символов игры, а также строки для них подобранные атакой по словарю: CODE PlayCodes[] Сразу оговорюсь, что режимы Play и Cheat ничем не отличаются по коду (возможно, когда-то и были разные), а вот Editor не запускается, ибо требует файл сценария какой-то (возможно, в этом режиме игра грузит их из каталога, а не из .MIX архива).E0792D6D SONY 90046ECF ANTHRAXROCKAWAY C3EE9A26 FUNK ED382178 SLICK CheatCodes[] A0E2AB53 JUPITER 00532693 NATE 7DDFF824 PASSWORD 2CB5CF01 CHEATER // (*улыбается*) B5B63531 BLUB DFABC23A ADEN или ATEN (ещё можно ADUN или ATUN) 52B19A22 NUKE BE79088C EARTHIMPROVED B216AE7E SPOON 0E07B213 CARPET // см. ниже EditorCodes[] A2C09326 BUILD 1F944BB3 MOBIUS DE07154D CYCLONE 0E07B213 CARPET // да, тот же самый код - он одновременно включает режимы Cheat и Editor 16B170B1 EDITOR Да, демка на современном компьютере запускается весьма неохотно, так что нужно несколько приседаний сделать: CODE RA95.EXE // set framerate to 60 FPS 001AC080: 53 B8 001AC081: 51 3C 001AC082: 52 00 001AC083: 56 00 001AC084: 57 00 001AC085: B8 C3 И заменить файл THIPX32.DLL такой пустышкой (скомпилировать перед этим), иначе оно будет пытаться вызвать какие-то функции в ядре системы, которых на Windows XP уже нет (в демке игры по сети всё равно нет, так что не страшно что заглушка очень тупая и внутреннему формату не соответствует): CODE library THIPX32; А ещё в файле "REDALERT.INI" добавить:function _Thipx_ThunkData32: integer; begin result:=1; end; function _IPX_Initialise: integer; begin result:=1; end; function _IPX_Open_Socket95: integer; begin result:=1; end; function _IPX_Close_Socket95: integer; begin result:=1; end; function _IPX_Get_Connection_Number95: integer; begin result:=1; end; function _IPX_Send_Packet95: integer; begin result:=1; end; function _IPX_Broadcast_Packet95: integer; begin result:=1; end; function _IPX_Get_Local_Target95: integer; begin result:=1; end; function _IPX_Start_Listening95: integer; begin result:=1; end; function _IPX_Shut_Down95: integer; begin result:=1; end; function _IPX_Get_Outstanding_Buffer95: integer; begin result:=1; end; exports _Thipx_ThunkData32, _IPX_Initialise, _IPX_Open_Socket95, _IPX_Close_Socket95, _IPX_Get_Connection_Number95, _IPX_Send_Packet95, _IPX_Broadcast_Packet95, _IPX_Get_Local_Target95, _IPX_Start_Listening95, _IPX_Shut_Down95, _IPX_Get_Outstanding_Buffer95; end. CODE [Options] Чтобы оно в 640x480 запускалось, ибо у меня монитор 640x400 не поддерживает.Resolution=yes В отличие от The Neverhood здесь из-за хитровыделанного алгоритма ничего оптимизировать особо не получилось, поэтому разбив на 4 ядра пришлось ждать все 6+ часов, пока оно отбрутфорсится. Искал, как нетрудно догадаться, хеши для 90046ECF и BE79088C, но заодно и уже известные два решил тоже забрутфорсить - раз всё равно считается, то что добру пропадать, верно? Хеш 90046ECF - смешной. Не любите Anthrax? Пожалуйста, есть Nirvana: 90046ECF NIRVANAERRANT 90046ECF NIRVANASBRAKY 90046ECF NIRVANASFRAGS Nirvana не нравится? А, может, вы в Worms играете? 90046ECF FIREARMEDBANANA И в Worms не играете? Ну, есть тогда несколько экзотических, на выбор: 90046ECF RAINERAMULET 90046ECF JAILOREXPRESSWAY 90046ECF BAILOREXPRESSWAY Для BE79088C, кстати, было ещё одно нормальное (более или менее) совпадение - EUROPESAPLING. Что касается кодов, про которые мы говорили в этой теме ранее, то, например, у кода для пасхального яйца тоже было много совпадений, но все дурацкие. Вот ещё несколько, если интересно: 72A47EF6 NONPRIZABLE // да и не надо - я человек скромный 72A47EF6 NONPROFITGOD // эх, какой код хороший (погуглите с запросом "новости взаимное безвозмездное одаривание" без кавычек) 72A47EF6 NORTHGLOOMS // ну, а что вы хотите - тут холодно и дни короткие 72A47EF6 ELECTROCONTRACTILITYCHECKROLL // приз за самое длинное словосочетание Тот старый хеш командной строки интересен тем, что когда для других сотни совпадений (в файле с результатами практически 2 тысячи строк), то для D95C68A2 их было, натурально, всего 10: D95C68A2 CYAATHIAHIELAMEN D95C68A2 FRAGORJAMBING D95C68A2 FRAZEDBOLIMBA D95C68A2 FRISONNUCLEOLATE D95C68A2 FROMINSTALL D95C68A2 FROWSHOMOGENIES D95C68A2 FRUGALLYPIMLICO D95C68A2 OFFENSELESSNESSENCLARET D95C68A2 ORLEANSCONVIVIALIZE D95C68A2 RABBINATEPERLING Такие дела. Теперь по хешам уже точно всё. Если, конечно, не объявится кто-нибудь из разработчиков игры и не заявит, что код для хеша 72A47EF6 от пасхального яйца на самом деле был BOLDLYSIXTEEN или DADDYRAISING. (*улыбается*) |
Siberian GRemlin |
Apr 11 2020, 15:12
Сообщение
#22
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
А бету ты смотрел?
|
-=CHE@TER=- |
Apr 11 2020, 15:18
Сообщение
#23
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Это та, которая была у тебя в последней новости на сайте?
Ну, я хотел посмотреть правда ли что там можно собаками загрызть танк (в журнале Game.exe про этот баг писали), но к тому времени как я обнаружил у тебя на сайте эту новость ссылка на закачку уже протухла. А тебе что из беты нужно? Тоже коды? |
Siberian GRemlin |
Apr 12 2020, 07:58
Сообщение
#24
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Это та, которая была у тебя в последней новости на сайте? Ну, я хотел посмотреть правда ли что там можно собаками загрызть танк (в журнале Game.exe про этот баг писали), но к тому времени как я обнаружил у тебя на сайте эту новость ссылка на закачку уже протухла. А тебе что из беты нужно? Тоже коды? Просто какой-то идиот написал жалобу на этот файл. Но образ гуляет по сети. Там, вроде как, содержатся отладочные данные, и пр., что было потом вырезано. Лично мне ничего не нужно, но там может быть что-то полезное для тебя. https://w3dhub.com/forum/topic/418934-red-alert-v-009c-beta/ https://www.reddit.com/r/commandandconquer/...e_cc_community/ https://www.betaarchive.com/forum/viewtopic.php?f=16&t=40379 Спасибо сказали:
|
-=CHE@TER=- |
Apr 12 2020, 13:49
Сообщение
#25
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Поглядел бегло бету. Код для пасхального яйца есть, но вот хеша нет. Видимо, код с чатом вырезали. Сами цитаты есть, но их меньше - например, нет той строки, про макинтош, которую я в первом сообщении процитировал.
Я игру скачал по твоим ссылкам отсюда. И, блин, там уже есть "rabeta_instructions_and_notes.pdf" с подобранными словами для простых хешей (с составными те кто работал над этим руководством, не заморачивались), там даже горячие клавиши описаны, которые появляются в отладочном режиме. Ах, да, отладочные символы есть только у "GAME.DAT" для DOS, так что я только его смотрел. Особо нового я там ничего не увидел, но всё равно спасибо! Пардон, что не по теме, но если у тебя доступ на BetaArchive есть, то можешь достать оттуда Turok private beta demo to 3dfx int.? Спасибо! |
Siberian GRemlin |
Apr 14 2020, 15:42
Сообщение
#26
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Пардон, что не по теме, но если у тебя доступ на BetaArchive есть, то можешь достать оттуда Turok private beta demo to 3dfx int.? Спасибо! Там доступ даётся за заслуги по заливке файлов. Я так и не понял, дали его мне или нет, и как им воспользоваться. Спасибо сказали:
|
-=CHE@TER=- |
Apr 15 2020, 10:36
Сообщение
#27
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Понятно, жаль, а то я за ней уже не один год охочусь. Ну, может, ещё где всплывёт.
А ещё меня тут попросили отбрутфорсить хеши для всяких demo/beta версия разных C&C под разные платформы (даже под Saturn). Они там в разных местах используются, в том числе в .INI файлах для включения каких-то опций. Мне лень переводить, так что я просто свой e-mail процитирую: QUOTE Hello! Alright, I finished brute-forcing hashes pairs. I must warn you that hash algo not very consistent and because of that there only few collisions for some and many for others. And most of them useless. Probably there is no right collisions for used dictionary or two words pairs (probably original phrase consists of 3 or more words). And I assume that Saturn and other versions you're mention uses exactly the same hash routine as Red Alert 1. Since you need to go through all the hashes manually I write below few of them which looks meaningful. But since I'm not familiar with Saturn or any other version of the game - feel free to take a look into attachment file and pick any hash that you want, which has more sense to the actions they actually do. If I comment "no good matches" it's mean: 1) Only few collisions, no meaningful matches. 2) Or too much matches and I may miss something. 3) Maybe there is a perfect match and I've seen it, but since as I said I didn't know what these codes actually do, I may miss something thinking it's not a good fit for a code. 4) Also please note that I'm not a native English speaker so I used translate program to understand most of the words in codes and may miss something. Please note that all codes must be entered !WITHOUT! spaces. I just separate words with spaces since English isn't my native language and sometimes it's hard to tell which two words produce this exactly result (as example: GRAY MULTIPLEX must be entered as GRAYMULTIPLEX). 7F65F13C - no good matches: GRAY MULTIPLEX CRASH ABSTRACTLY OPSY UNENCRYPTED // it's funny that's why it's here EDGESHOT PLATOONS SNOWLESS ZOOBLAST SNOWMAKER SKITTER SNOWPACK ROUTINES C2AA509B - 18 matches, only one solid, so I'm sure it's right one: SUPER EDIT DFABC23A - 73 matches, but this one looks ok (I guess) for debugging mode (although it's a bit rude): ATONE SLACKER 9F38A19D - as I said before there is no more suitable than this one: SUPER 39D01821 - same as one above: WIZARD 2E7FE493 - no good matches, probably this one (not sure): LOOPHOLES ROCKET 7E7C4CCA - no good matches: OUTSEARCH LID AIRCHECK VICTORY SAFE COUNTRYFOLK B1A34435 - that's one was unexpected, but I remembered this code from another Westwood game (Kyrandia II: Hand of Fate) where it's used as code for commandline argument, so I'm sure it's right one: TARBOSH (I've already tested KRAMER and KRAMER-TARBOSH pairs - no matches) 9CAFC93B - I don't think there is a better match than this (since you're already said it's sets Players to 6 - it's a crowd): CROWDED F7867BF0 - no good matches: PUDDING PRECOMBATING BLUEBOTTLE PARABOLIST DILLYDALLIED HALFLIFE DC57C4B2 - only 5 (!) matches and no good ones: ECHO TUCKERING FLICHTERED PERLUSTRATE UNILATERALIST ORDINARIEST DETERMINISM UNDERCONSUMING ERYTHROXYLACEAE TRICHOSCHISTIC ACB58F61 - only 15 matches, no good ones: LEADER JAMBE METALLICALLY FIELD C87AD5A4 - only 3 (!) matches, no good ones: UNANALAGOUSLY PANT MACHINIST BARRACUDAS INTROSPECTING UNTREADING 51842BF3 - no good matches (since you're said it sends some command, it's probably one of this): FIXES IVA NONSYNC FAD NONSYNC FED NONSYNC FID I've used "words_alpha.txt" (words without digits) as dictionary for attack from this site: https://github.com/dwyl/english-words I will not brute-force three words combination since it will be: 370100 words * 6 hours (time for two-words combinations) = 2220600 hours = ((2220600 / 24) / 365) ~ 254 years And another problem is amount of false matches which you'll need to manually examine - this may took another hundred years. Well, that's all. --- With best regards, -=CHE@TER=- |
-=CHE@TER=- |
Jun 5 2020, 16:11
Сообщение
#28
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
О-о-о! Спасибо!
Неожиданно, они опубликовали оригинальные исходные коды с минимальным количеством изменений. Во-первых, хочу нас всех поздравить, потому что: CODE ==> /REDALERT/INIT.CPP: Т.е. первый хеш я взломал правильно./* ** Special flag - is C&C being run from the install program? */ case PARM_INSTALL: Special.IsFromInstall = true; // If uncommented, will disable the <ESC> key during the first movie run. // BreakoutAllowed = false; break; ==> /REDALERT/DEFINES.H #define PARM_INSTALL 0xD95C68A2 // "FROMINSTALL" Во-вторых, к сожалению, строки для второго хеша, увы, нет: CODE /REDALERT/NETDLG.CPP if (Obfuscate(Session.GPacket.Message.Buf) == 0x72A47EF6) { Session.WWChat = 1; Clear_Listbox (&playerlist); Start_WWChat(&playerlist); } В третьих, в файлах "DEFINES.H" от обеих игр можно посмотреть несколько других хешей (которые я по просьбе перебирал в сообщении выше), но там, увы, тоже строки только к парочке есть. Зато я глянул в /REDALERT/INIT.CPP код функции Obfuscate() и офигел. Комментарии заставили меня хохотать в голос! Писал эту глупость JLB - Joe L. Bostic, главный (!) программист игры. Просто почитайте комментарии перед функцией и в ней самой. Пафосные рассуждения про CRC, PGP и "thwart casual hackers" особенно смешные. Кстати, помните наркоманию про: k = key1 xor key2 xor key1; которая вырождалась просто в key2? CODE /* Что такое "cause and effect attack", которую данный код должен был по мощной задумке автора затруднить, я так понять и не смог, если даже по ассемблерному коду ненужность этой операции была очевидна и её можно было тупо выбросить, оставив только хеш от развёрнутой строки.** Perform a self referential transformation. This makes a reverse engineering ** by using a cause and effect attack more difficult. */ code = code ^ copy; Если же говорить в общем, то в профессиональной среде очень часто замечаю за программистами такую вещь: чем больше человек пишет на ООП, классах и прочих объектах, тем меньше он понимает, умеет и может элементарных вещей. В предпоследней фирме где я работал приходилось программистам объяснять как с .BAT файлов можно автоматическую компиляцию настроить для быстрой сборки свежего выпуска новой версии. Что, вообще говоря, очень странно программистам не знать и не уметь. И, да, при этом там были классы-объекты-ООП-гроб-кладбище-сидор. Я могу ещё более адовые примеры из практики привести, но мне всегда была непонятна эта победа упорства над здравым смыслом в попытке втащить дополнительный уровень головняка в код, при этом ещё и без внятного обоснования зачем. Да, это я к тому, что обе игры написаны с применением ООП, при этом с вот такой вот заумно "обоснованной" дурью в простых местах. |
-=CHE@TER=- |
Aug 5 2020, 13:48
Сообщение
#29
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Если, вдруг, кому интересно будет:
Код игры Command & Conquer: баги из 90-х. Том первый Код игры Command & Conquer: баги из 90-х. Том второй |
Siberian GRemlin |
Dec 10 2020, 14:47
Сообщение
#30
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Если, вдруг, кому интересно будет: Код игры Command & Conquer: баги из 90-х. Том первый Код игры Command & Conquer: баги из 90-х. Том второй Случайно наткнулся на другой разбор. |
-=CHE@TER=- |
Dec 10 2020, 17:09
Сообщение
#31
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Случайно наткнулся на другой разбор. Перевод, прямо скажем, ну такой себе. Плюс автор плавает во многих моментах. Вот, например:QUOTE Я не стал заморачиваться проверкой его работы; похоже, код сканирует элементы, указанные в командной строке в кавычках, а затем пытается интерпретировать их как разделённые кавычками (") группы. Думаю, командная строка Windows не обрабатывала бы такую схему правильно, поэтому обработка выполнена в самой игре. На самом деле я не уверен, реализована ли в cmd.exe логика работы кавычек даже сегодня. Непонятный, на самом деле, кусок кода, там ещё комментарий сверху "Get pointers to command line arguments just like if we were in DOS", но дело в том, что в DOS не было двойных кавычек, они появились только в Windows, т.к. в DOS нельзя было использовать пробелы в имени файла, отсюда и необходимости в указании аргумента командной строки с пробелом не было. Т.е. в DOS такая строка:test.exe "My Progam" Вернёт три аргумента: 1 test.exe 2 "My 3 Program" В то время как в Windows будет только два: 1 test.exe 2 My Program Подробнее про аргументы можно прочитать здесь, если интересно будет. |
Упрощённая версия | Сейчас: 5th November 2024 - 16:45 |