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

 eXeL@B —› Вопросы новичков —› Crackme v1.0 by Cruehead
Посл.ответ Сообщение

Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 мая 2007 19:41
· Личное сообщение · #1

Все привет. Вообщем недавно занялся крякерством, но вот появилась проблема, ничего не могу придумать.
Короче есть crackme v1.0 by Cruehead, крякнуть его легко, чтобы он всегда выдал что верный ключ. А вот как написать кейген я так и не понял.
Вообщем как я понял этот крякми делает так: Имя пользователя представляет большими латинскими буквами и суммирует шестнадцатиричные коды этих символов в один из регистров, потом ксорит его с 5678h ну и кидает в стёк.
Затем берёт первый символ введённого серийника, его шестнадцатиричный код из него отнимает 30h и прибавляет к регистру edi(это при первой итерации). Затем повторяет ещё раз, токо edi умножает на 0Ah.
Кому не понятно вот код:

004013E2 |> /B0 0A /MOV AL,0A
004013E4 |. |8A1E |MOV BL,BYTE PTR DS:[ESI]
004013E6 |. |84DB |TEST BL,BL
004013E8 |. |74 0B |JE SHORT CRACKME.004013F5
004013EA |. |80EB 30 |SUB BL,30
004013ED |. |0FAFF8 |IMUL EDI,EAX
004013F0 |. |03FB |ADD EDI,EBX
004013F2 |. |46 |INC ESI
004013F3 |.^\EB ED \JMP SHORT CRACKME.004013E2


затем ксорит полученное с 1234h
Ну и потом забирает из стёка, то что было получено из имени пользователя и сравнивает с этим. Если равно то всё Ok, а если не равно то всё плохо =))
Так вот, получается что это какая-то хэш функция чтоли?
У меня вопрос обратима ли она? и что можно сделать, писать брут или что?



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 05 мая 2007 21:15
· Личное сообщение · #2

Ну, хэш-функцие это можно назвать весьма условно (хотя и можно назвать)
А "обратить" ее проще простого

для имени Sturgeon получаем "хэш" 540F. Где его можно посмотреть наверное знаешь. Отсюда начинаем идти по алгоритму для пароля (который ты привел) в обратном порядке.

(ВСЕ ЦИФЕРКИ В ШЕСТНАДЦАТЕРИЧНОМ ФОРМАТЕ)
540F ксорим с 1234 =
463В - 9 = (пятый символ 9)
4632 / А =
705 - 7 = (четвертый символ 7)
6FE / A =
B3 - 9 = (третий сивол 9)
АА / А =
11 - 7 = (второй символ 7)
А / А = 1 (первый символ 1)

Пароль для Sturgeon "17979"

Предвижу совершенно справедливый вопрос. Откуда я взял, что надо отнимать именно 7 или 9? Это тоже просто. Для последнего символа: переводим 463Вh в десятичный формат. Получаем 17979. Чтобы разделить на 0Ah (разделить на 10 в десятичном формате) без остатка, необходимо отнять 9. И так далее, пока от хэша ничего не останется.
Переложить этот алгоритм на ассемблер наверное можно, но для меня (чайника) довольно непросто, поэтому дальше сам.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 05 мая 2007 21:18
· Личное сообщение · #3

MaXL
Крякми не смотрел, но если ты всё описал правильно то:
1. Алгоритм который ты написал - нахождение числа из строки. Т.е. если пароль 12345 - в hex виде это будет выглядеть как строка 31 32 33 34 35 00 . После обработки этой строки этим алгоритмом в edi окажется число 3039h = 12345.
2. Получается у нас имеется
- число равное сумме байт из имени - назовём его X
- число которое является паролем - назовём его Y
- справедливо равенство (X xor 5678h) = (Y xor 1234)
3 отсюда следует Y = (X xor 1234 xor 5678)

Вот собственно и всё.



Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 мая 2007 04:46 · Поправил: MaXL
· Личное сообщение · #4

asd я не знаю, алгоритм вроде бы описал правильно, но для пароля 12345 совсем другой число получается.
Sturgeon т.е смотри 540F ксорим с 1234 = 463В, а 463B = 17979 в десятичной, т.е это и есть наш пароль. Только я не могу понять, откуда ты взял, что пароль будет состоять именно из цифр, ведь там берёться шестнадцатиричный код символа и отнимается от него 30h. Объясни плиз?



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 06 мая 2007 09:18
· Личное сообщение · #5

MaXL пишет:
смотри 540F ксорим с 1234 = 463В, а 463B = 17979 в десятичной, т.е это и есть наш пароль

Тьфу ты! Етить! А я и не обратил внимание, а только все запутал
Да я и не взял, что пароль будет только из цифр. Просто я сразу не увидел, что после ксора мы уже имеем готовый пароль. А считать в обратном порядке проще всего с маленькими цифрами.

Вот пожалуйста, например пароль из буковок (для имени Sturgeon)

463В - 45 = `E` + 30 = `u`
45F6 / A =
6FF - 47 = `G` + 30 = `w`
6B8 / A =
AC - 48 = `H` + 30 = `x`
64 / A =
A ` непечатаемый символ` + 30 = `:`

":xwu"

коллизия однако



Ранг: 3.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 мая 2007 15:21
· Личное сообщение · #6

Sturgeon всё разобрался, спасибо за помощь!


 eXeL@B —› Вопросы новичков —› Crackme v1.0 by Cruehead
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати