![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
QUOTE 2020.04.11 note: Original codes found with dictionary attack performed by -=CHE@TER=-. Special thanks to kampaster for first brute-force attack attempt! Hidden commandline argument for hash 0xD95C68A2: FROMINSTALL Hidden word for network chat which triggers developer easter egg quotes for hash 0x72A47EF6: FELTPLAYWORK This topic below contains some historic details for anyone interested. Товарищ Siberian GRemlin, у меня к тебе вопрос, как к знатоку игр Westwood. В первом C&C:RA в исполняемом файле (RA95.EXE - только я не помню, это он такой и был, или я в него RA95.DAT переименовал) есть строчки текста типа таких: QUOTE Denzil L Я так понимаю, что это шуточные цитаты от разработчиков.This would be better on the Mac. Greg H But does it fit into 2 MB? Подумал было, что они есть в титрах - просмотрел их до конца, но ничего не вылезло. Ты не в курсе где и как этот текст в игре выводится? Гуглунием "c&c red alert easter egg quotes" ничего не нашёл. |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
О-о-о! Спасибо!
Неожиданно, они опубликовали оригинальные исходные коды с минимальным количеством изменений. Во-первых, хочу нас всех поздравить, потому что: 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 файлов можно автоматическую компиляцию настроить для быстрой сборки свежего выпуска новой версии. Что, вообще говоря, очень странно программистам не знать и не уметь. И, да, при этом там были классы-объекты-ООП-гроб-кладбище-сидор. Я могу ещё более адовые примеры из практики привести, но мне всегда была непонятна эта победа упорства над здравым смыслом в попытке втащить дополнительный уровень головняка в код, при этом ещё и без внятного обоснования зачем. Да, это я к тому, что обе игры написаны с применением ООП, при этом с вот такой вот заумно "обоснованной" дурью в простых местах. |
![]() ![]() |
Упрощённая версия | Сейчас: 1st May 2025 - 01:00 |