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

 eXeL@B —› Вопросы новичков —› не знаю как двигаться дальше
Посл.ответ Сообщение

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

Создано: 23 мая 2015 17:58
· Личное сообщение · #1

Добрый день.
Есть у меня один crack_me. Исследую я его уже несколько дней, и в каком-то смысле в небольшом тупике.
Нашел что:
- Написан на Visual C++ 2010 с испльзованием nativeAPI(ntdll).
- проверка на доступ к регистру, фалам, ничего подозрительного не вызвала.
- Есть пару защит от дебагинга, типо проверки разницы getTickCount и SendStringToDebugger - легко обходится изменением jnz -> je
- кроме того судя по стрингам использует crypto++
- каждый раз начинает бежать с разного адреса, делает импорт на CompareString и isDebugerPresent но брэкпоинт там не разу не сработал.
То что я откопал, что работает он следующим образом:
Запрашивает логин, запрашивает пароль(через zwWriteFile)
Делает криптовычесления по паролю(логин находится отноистельно легко и не зашифрован).
Меняет часть своего кода.
Идет на тот код, если после его выполнения AL != 0 то вызвает еще криптофункции, расшифровывет сообщение и выводит его(код даже если пароль не правильный и в не зависимости от того какой он(то есть если пароль не верный, то меняет на одно и тоже) - всегда какой-то мусор, но в первых строчках делает xor eax, eax поэтому если праоль не тот то AL == 0 всгеда и выдет wrong password)
В общем уже не знаю откуда подойти((( Вроде как крак второго(из 4х) уровней и должен быть вполне кракабельный.
Вопросов два)
1 - может есть какие-то техники(ссылки на хорошее почитать), как с такими вещами работать(пока что в основном я с дебаггера не вылизию, ставлю брекпоинты, изучаю, пытаюсь его обмануть, нашел что длина пароля 15 символов)? А то у меня чувство что я в лоб, а надо как-то ссзади.
2 - Я тут прикинул, что схема ведь должна быть такой
-Получаем пароль, делаем на него криптостойкий алгоритм(чтобы в одну сторону), смотрим результат, если хэш от результата подходящий, берем этот результат(он уже в данном случае как ключ), при помощи этого ключа расшифровываем сообщение об успехе.
То есть, не важно даже если я этот код соберу на C++ или C, то программа не карабельна без знания пароля. Или я что-то упускаю?
Спасибо за внимание)



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 23 мая 2015 18:53
· Личное сообщение · #2

Вообще, без ссылки на исследуемый образец, довольно сложно Вам помочь чем либо. Много написано - мало что понятно.

В первую очередь, ВСЕГДА воспользуйтесь ProtectionID или PeID, чтобы понять с чем имеете дело!!!
Из того что Вы указанли
alex87is пишет:
Запрашивает логин, запрашивает пароль(через zwWriteFile)

Непосрдественно через ntdll.ZwCreateFile врядли, т.к. в разных ОСях (ядрах системы) структура запроса этой нативной функи непостоянна и имеет кучу нюансов. С другой стороны, я не совсем представляю, с чего Вы решили, что ZwCreateFile тут используется.
alex87is пишет:
- каждый раз начинает бежать с разного адрес

в смысле, база загрузки каждый раз другая - у Вас WIndows 7 - 8 наверно.
alex87is пишет:
- Написан на Visual C++ 2010 с испльзованием nativeAPI(ntdll).

Это в описании к crackme написано??
alex87is пишет:
-Получаем пароль, делаем на него криптостойкий алгоритм(чтобы в одну сторону), смотрим результат, если хэш от результата подходящий, берем этот результат(он уже в данном случае как ключ), при помощи этого ключа расшифровываем сообщение об успехе.

Далеко не факт, пароль может быть привязан к аппаратной конфигурации компьютера. К тому же из пароля нельзя получить криптостойкий алгоритм - по русски, это звучит так: используется хэш пароля (с помощью MD5, к примеру).



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

Создано: 23 мая 2015 19:14
· Личное сообщение · #3

Вообще, без ссылки на исследуемый образец, довольно сложно Вам помочь чем либо. Много написано - мало что понятно.

Не могу его кинуть в общий доступ(кажется это не нарушает правила), Если вам интересно - могу дать линк в ЛС.

В первую очередь, ВСЕГДА воспользуйтесь ProtectionID или PeID, чтобы понять с чем имеете дело!!!,
PeID - пользовался конечно)

-Непосрдественно через ntdll.ZwCreateFile врядли, т.к. в разных ОСях (ядрах системы) структура запроса этой нативной функи непостоянна и имеет кучу нюансов. С другой стороны, я не совсем представляю, с чего Вы решили, что ZwCreateFile zwWriteFile тут используется.
Это последняя функция, после которой Imuunity перестал бежать и требовал input.


- каждый раз начинает бежать с разного адрес
в смысле, база загрузки каждый раз другая - у Вас WIndows 7 - 8 наверно.

У меня windows 8.1, но мне кажется что эта их фишка. Другие проги(первый крак_ми) вроде как загружаются в одинаковый адрес, либо у меня уже поехала за эти дни крыша)))

- Написан на Visual C++ 2010 с испльзованием nativeAPI(ntdll).
Это в описании к crackme написано??

Нет, это я увидел стринги в самом файле, так же как и crypto++ понял по стрингам(+ гуугль) которые были внутри.

Я тут искал может какие-то техники наставления как с такими вещами работать. Например я видел тут статью где люди искали в IDA редкие инструкии(кстати в бесплатной такого фитчера нет чтоли?). Хороший статей по этому поводу совсем не могу найти. Пару книжек уже перелистал, тоже ничего(



Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 23 мая 2015 21:19
· Личное сообщение · #4

alex87is пишет:
не кажется что эта их фишка.

Старшие версии студии компилируют бинари с поддержкой ASLR (динамического распределения памяти грубо говоря), так что вряд ли это "своя" фишка.

alex87is пишет:
я увидел стринги в самом файле

Лучше бы вы написали строки.

-----
TEST YOUR MIGHT




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

Создано: 24 мая 2015 14:31
· Личное сообщение · #5

unknownproject пишет:
alex87is пишет:
не кажется что эта их фишка.
Старшие версии студии компилируют бинари с поддержкой ASLR (динамического распределения памяти грубо говоря), так что вряд ли это "своя" фишка.

ааа! вот оно как. Спасибо))

unknownproject пишет:
alex87is пишет:
я увидел стринги в самом файле
Лучше бы вы написали строки.

и ведь действительно))


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


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