Сейчас на форуме: asfa, _MBK_, Rio (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Взлом крякми FSC08
Посл.ответ Сообщение

Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 19 декабря 2008 21:04
· Личное сообщение · #1

Давно (месяца 4 назад) увидел на кряклабовском форуме тему, где предлагалось поучаствовать в конкурсе от F-Secure по взлому крякмисов. В теме была ссылка на первый крякми. В соревнование я участвовать не собирался, ибо не мой уровень (сынок я для таких конкурсов), но крякми все-таки скачал, ради интереса. Тогда был напряг с курсачем (август!), потом просто забыл и вот только сейчас на закате очередной сессии я взялся за этот крякми. Кстати, на странице www.f-secure.com/security_center/asm.html доступны для скачивания все 3 крякми.
Старую тему в поиске я не нашел. Собственно вопрос. Ломал ли кто-нибудь эти крякми на конкурсе или после? Интересно узнать, как взломали 2 и 3 уровень. Может у кого-то остались наработки?
Ключ для первого крякми я нашел. Опишу как.
Итак, FSC08_Level1. Консольное приложение, PEid говорит, что написано на «Microsoft Visual C++ v7.1 EXE», энтропия 5.23 (Not Packed) – значит можно дизассемблировать. Я использовал IDA v4.9.
Но для начала, я просто запустил крякми и увидел предложение ввести ключ. От балды ввел 111 и увидел сообщение «Sorry, this key is not valid!». Эта строка легко находится в окне string windows в IDA, а рядом с ней лежит строка «\nCongratulations! Please send an e-mail to %s@khallenge.com\n\n». Строка с извинением находится по адресу 6900112A. Если заглянуть по коду выше, то можно найти строку "Enter the key: ". Что ж, кусок кода, отвечающий за проверку правильности ключа, найден. Он начинается по адресу 6900105F и заканчивается в 69001134.
Вот первый интересный участок:
Code:
  1. .text:69001081 loc_69001081:
  2. .text:69001081           mov     cl, [eax]       ; Проверка длины ключа
  3. .text:69001083           add     eax, 1
  4. .text:69001086           test    cl, cl
  5. .text:69001088           jnz     short loc_69001081
  6. .text:6900108A          sub     eax, edx
  7. .text:6900108C          cmp     eax, 4
  8. .text:6900108F         jnz     loc_6900112A    ; Если длина не равна 4 символам, то уходим на сообщение об ошибке.

Теперь стало известно, что длина ключа = 4 символа. Я поставил брэйкпоинт на адрес 69001095, т.е. на следующую за проверкой длины команду и трассировал код с ключом 1234.
Первые две команды
Code:
  1. movzx   edx, byte_69003102
  2. mov     al, byte_69003100

пересылают в регистры какие-то данные. Что за данные? А вот они:
Code:
  1. .data:69003100 byte_69003100 db 31h
  2. .data:69003101 byte_69003101 db 32h
  3. .data:69003102 byte_69003102 db 33h
  4. .data:69003103 byte_69003103 db 34h

Значит, по этим адресам лежит, введенный мною ключ 1234.
Следующие 3 команды
Code:
  1. xor     byte_690030D4, al
  2. xor     byte_690030D6, dl
  3. xor     byte_690030D8, al

хорят какие-то данные, элементами введенного ключа.
Дальше следуют аналогичные блоки кода. Понятно, что с помощью введенного ключа расшифровываются данные (если xor можно назвать расшифровкой). Данные расшифровываются не по порядку, видимо для того, чтобы запутать исследователя. Но все равно видно, что диапазон расшифровываемых данных следующий 690030D4 – 690030DB. Вот эти данные:
Code:
  1. byte_690030D4   db 7
  2. byte_690030D5   db 2Eh
  3. byte_690030D6   db 35h
  4. byte_690030D7   db 29h
  5. byte_690030D8   db 70h
  6. byte_690030D9   db 20h
  7. byte_690030DA   db 76h
  8. byte_690030DB   db 68h

И последний интересный момент. После всех расшифровок идут 4 проверки. Вот их код:
Code:
  1. .text:690010F3      cmp     cl, 61h
  2. .text:690010F6      mov     byte_690030D5, cl
  3. .text:690010FC     jnz     short loc_6900112A
  4. .text:690010FE     cmp     byte_690030D7, 79h
  5. .text:69001105      jnz     short loc_6900112A
  6. .text:69001107      cmp     byte_690030D8, 32h
  7. .text:6900110E      jnz     short loc_6900112A
  8. .text:69001110      cmp     byte_690030DA, 30h
  9. .text:69001117      jnz     short loc_6900112A
  10. .text:69001119      push    offset byte_690030D4
  11. .text:6900111E      push    offset aCongratulation 
  12. .text:69001123      call    esi ; printf

Вся соль в этих проверках. Их именно 4, столько же, сколько и символов в пароле. И каждая проверка дает нам правильный результат на каждый символ пароля. Чтобы охватить всю картину целиком, я составил такую табличку:
Адрес данных Данные Результат Номер символа
от xor в ключе
690030D4 7h
690030D5 2Eh 61h 2
690030D6 35h
690030D7 29h 79h 4
690030D8 70h 32h 1
690030D9 20h
690030DA 76h 30h 3
690030DB 68h
Иными словами, получается следующее:
70h xor x1 = 32h
2Eh xor x2 = 61h
76h xor x3 = 30h
29h xor x4 = 79h, где x1-x4 символы правильного ключа.
Так как, если n xor m = z, то m = n xor z. Значит можно найти все 4 символа пароля:
x1 = 70h xor 32h = 42h
x2 = 2Eh xor 61h = 4Fh
x3 = 76h xor 30h = 46h
x4 = 29h xor 79h = 50h
Из таблицы символов ASCII видно, что
42h – B
4Fh – O
46h – F
50h – P
Пароль найден. Если ввести его в крякми, то нас поздравят сообщением:
«Congratulations! Please send an e-mail to Easy2o08@khallenge.com» Отсылать на этот емаил ничего не надо, т.к. конкурс закончился почти 5 месяцев назад 6-0.

Жду ответ с описанием взлома FSC08_Level2 и FSC08_Level3. 6-0




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 19 декабря 2008 21:15
· Личное сообщение · #2

http://exelab.ru/f/action=vthread&forum=1&topic=12457

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 19 декабря 2008 21:34
· Личное сообщение · #3

Да уж, действительно не для среднего ума Тока я не понял, кто всё-таки iPod выиграл?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 49.3 (посетитель), 43thx
Активность: 0.060
Статус: Участник

Создано: 19 декабря 2008 22:33
· Личное сообщение · #4

Все понятно, тему можно закрывать.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 20 декабря 2008 00:31
· Личное сообщение · #5

user_ оформил бы как следует и отослал в статьи, давно новых не было, чего труду пропадать.
P.S. тему ты и сам можешь закрыть.

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 20 декабря 2008 14:28
· Личное сообщение · #6

Тема закрывается успешно и автором, кнопка Закрыть тему под кнопкой Отправить сообщение.
З.Ы. Что забавно, пишу это регулярно, но людей, не знающих об этом, меньше не становится.


 eXeL@B —› Вопросы новичков —› Взлом крякми FSC08
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати