Так, в теме про The Neverhood подробности написал, теперь давайте здесь закончим.
Короче, в начале недели написал мне
Corvin, что нашёл какой-то CD с Exhumed Demo. Я было подумал, что там какая-то особенная версия, но оказалась, что она уже известна. Как он потом объяснил, это для людей которые хотят эстетики - не просто скачать откуда-то демо-версию, а взять её с оригинального диска... Нда... ну, не важо. Помимо этого там были демки и других игр, в том числе C&C:RA1.
Заглянул я, значит, демку RA1 посмотреть, а там, ох-ты-ж-охренеть-просто, остались дебажные символы с именами переменных и функций от Watcom. Я не смог пройти мимо такого подарка и загрузил всё это дело в IDA. Увы и ах, игра безвозвратно изуродована классами и прочими объектами, так что код практически не восстанавливается толком. Зато я теперь знаю что функция считающая хеш от строк называется Obfuscate(). Мелочь, а приятно, да.
Но ещё я обнаружил, что она, помимо тех уже известных двух хешей, считает хеши и от трёх массивов, которые тоже используются как слова из командной строки (в полной версии их не было).
Вот эти списки с оригинальными именами взятые из дебажных символов игры, а также строки для них подобранные атакой по словарю:
CODE
PlayCodes[]
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
Сразу оговорюсь, что режимы Play и Cheat ничем не отличаются по коду (возможно, когда-то и были разные), а вот Editor не запускается, ибо требует файл сценария какой-то (возможно, в этом режиме игра грузит их из каталога, а не из .MIX архива).
Да, демка на современном компьютере запускается весьма неохотно, так что нужно несколько приседаний сделать:
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;
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.
А ещё в файле "REDALERT.INI" добавить:
CODE
[Options]
Resolution=yes
Чтобы оно в 640x480 запускалось, ибо у меня монитор 640x400 не поддерживает.
В отличие от 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. (*улыбается*)