IPB

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

2 Страниц V < 1 2  
Reply to this topicStart new topic
> Command & Conquer: Red Alert [Hidden Easter Egg], хеши для кодов
-=CHE@TER=-
Apr 11 2020, 14:53
Сообщение #21


Walter Sullivan
***

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



Так, в теме про 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. (*улыбается*)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Siberian GRemlin
Apr 11 2020, 15:12
Сообщение #22


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=-
Apr 11 2020, 15:18
Сообщение #23


Walter Sullivan
***

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



Это та, которая была у тебя в последней новости на сайте?
Ну, я хотел посмотреть правда ли что там можно собаками загрызть танк (в журнале Game.exe про этот баг писали), но к тому времени как я обнаружил у тебя на сайте эту новость ссылка на закачку уже протухла.
А тебе что из беты нужно? Тоже коды?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Siberian GRemlin
Apr 12 2020, 07:58
Сообщение #24


Advanced Member
***

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



QUOTE(-=CHE@TER=- @ Apr 11 2020, 22:18) *

Это та, которая была у тебя в последней новости на сайте?
Ну, я хотел посмотреть правда ли что там можно собаками загрызть танк (в журнале 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


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Apr 12 2020, 13:49
Сообщение #25


Walter Sullivan
***

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



Поглядел бегло бету. Код для пасхального яйца есть, но вот хеша нет. Видимо, код с чатом вырезали. Сами цитаты есть, но их меньше - например, нет той строки, про макинтош, которую я в первом сообщении процитировал.
Я игру скачал по твоим ссылкам отсюда.
И, блин, там уже есть "rabeta_instructions_and_notes.pdf" с подобранными словами для простых хешей (с составными те кто работал над этим руководством, не заморачивались), там даже горячие клавиши описаны, которые появляются в отладочном режиме.
Ах, да, отладочные символы есть только у "GAME.DAT" для DOS, так что я только его смотрел.
Особо нового я там ничего не увидел, но всё равно спасибо!

Пардон, что не по теме, но если у тебя доступ на BetaArchive есть, то можешь достать оттуда Turok private beta demo to 3dfx int.? Спасибо!
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Siberian GRemlin
Apr 14 2020, 15:42
Сообщение #26


Advanced Member
***

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



QUOTE(-=CHE@TER=- @ Apr 12 2020, 20:49) *
Пардон, что не по теме, но если у тебя доступ на BetaArchive есть, то можешь достать оттуда Turok private beta demo to 3dfx int.? Спасибо!

Там доступ даётся за заслуги по заливке файлов. Я так и не понял, дали его мне или нет, и как им воспользоваться.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Apr 15 2020, 10:36
Сообщение #27


Walter Sullivan
***

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



Понятно, жаль, а то я за ней уже не один год охочусь. Ну, может, ещё где всплывёт.

А ещё меня тут попросили отбрутфорсить хеши для всяких 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=-
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Jun 5 2020, 16:11
Сообщение #28


Walter Sullivan
***

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



QUOTE(Siberian GRemlin @ Jun 4 2020, 18:02) *
О-о-о! Спасибо!
Неожиданно, они опубликовали оригинальные исходные коды с минимальным количеством изменений.

Во-первых, хочу нас всех поздравить, потому что:
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
/*
** Perform a self referential transformation. This makes a reverse engineering
** by using a cause and effect attack more difficult.
*/
code = code ^ copy;
Что такое "cause and effect attack", которую данный код должен был по мощной задумке автора затруднить, я так понять и не смог, если даже по ассемблерному коду ненужность этой операции была очевидна и её можно было тупо выбросить, оставив только хеш от развёрнутой строки.

Если же говорить в общем, то в профессиональной среде очень часто замечаю за программистами такую вещь: чем больше человек пишет на ООП, классах и прочих объектах, тем меньше он понимает, умеет и может элементарных вещей. В предпоследней фирме где я работал приходилось программистам объяснять как с .BAT файлов можно автоматическую компиляцию настроить для быстрой сборки свежего выпуска новой версии. Что, вообще говоря, очень странно программистам не знать и не уметь. И, да, при этом там были классы-объекты-ООП-гроб-кладбище-сидор.
Я могу ещё более адовые примеры из практики привести, но мне всегда была непонятна эта победа упорства над здравым смыслом в попытке втащить дополнительный уровень головняка в код, при этом ещё и без внятного обоснования зачем.
Да, это я к тому, что обе игры написаны с применением ООП, при этом с вот такой вот заумно "обоснованной" дурью в простых местах.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Aug 5 2020, 13:48
Сообщение #29


Walter Sullivan
***

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



Если, вдруг, кому интересно будет:
Код игры Command & Conquer: баги из 90-х. Том первый
Код игры Command & Conquer: баги из 90-х. Том второй
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Siberian GRemlin
Dec 10 2020, 14:47
Сообщение #30


Advanced Member
***

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



QUOTE(-=CHE@TER=- @ Aug 5 2020, 20:48) *

Случайно наткнулся на другой разбор.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Dec 10 2020, 17:09
Сообщение #31


Walter Sullivan
***

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



QUOTE(Siberian GRemlin @ Dec 10 2020, 14:47) *
Случайно наткнулся на другой разбор.
Перевод, прямо скажем, ну такой себе. Плюс автор плавает во многих моментах. Вот, например:
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
Подробнее про аргументы можно прочитать здесь, если интересно будет.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

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

 



Упрощённая версия Сейчас: 19th March 2024 - 02:25