![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=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 раз(а) ![]() |
Короче, отриверсил я эту фигню из ассемблера.
Всё лежит там же в 5-ом сообщении. Старый код на асме на всякий случай оставил. По ходу дела выкинул, наверное, 50% кода, ибо он никогда не исполнялся или был совершенно бесполезен. Там, кстати, вообще, дикая наркомания творилась, например, как вам нравится такой код: CODE k1 = buf_hash(str, len); strrev(str); // "ABC" -> "CBA" k2 = buf_hash(str, len) ^ k1; strrev(str); // "CBA" -> "ABC" key = k2 ^ k1; Вы поняли, да, что последняя строчка разворачивается в: key = k2 ^ k1 ^ k1; Из чего получается (ибо k1 xor k1 = 0): key = k2; Что говорит нам об особых умственных способностях того, кто писал этот алгоритм. Я сократил всё такое лишнее, что не влияло на вычисления и код стал очень даже понятным и простым. Но вот сама функция вычисления этой суммы - по прежнему наркомания дранная. Я, вообще, не понимаю какой смысл был такую функцию сложную делать (её же, блин, кто-то писал, рабочее время на это тратил, а это ведь даже не защита от несанкционированного копирования). Основное, что нужно знать про хеш: 1) Он не может быть больше 128 символов. 2) Все английские бувы перед вычислением переводятся в верхний регистр. 3) Все непечатные символы (функция isgraph()), т.е. не лежащие в диапазоне от 33 до 126 включительно заменяются на заглавные латинские буквы в зависимости от позиции в строке. 4) Строка добивается теми же латинскими заглавными буквами до 16 символов в длинну, если меньше, или до значения кратного 4. 5) После этого над строчкой делается разного рода наркомания (см. исходные коды), как например пропуск через два 8-ми байтовых массива, которые часть битов в байте делают всегда 1, а часть всегда 0 (не удивляйтесь, когда у вас 2, а и то и 5 разных строк будут давать одинаковый хеш). Товарищ Axsis! У тебя здорово со всякими хешам получается - можешь чего-нибудь посоветовать для упрощения перебора? Потому что влоб там не получится, разве что можно заоптимизировать выкинув маленькие буквы из диапазона [32..126], но это всё равно дофига. |
![]() ![]() |
Упрощённая версия | Сейчас: 1st May 2025 - 00:03 |