Сейчас на форуме: igorcauret, Rio (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› не знаю как двигаться дальше |
Посл.ответ | Сообщение |
|
Создано: 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, то программа не карабельна без знания пароля. Или я что-то упускаю? Спасибо за внимание) ![]() |
|
Создано: 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, к примеру). ![]() |
|
Создано: 23 мая 2015 19:14 · Личное сообщение · #3 Вообще, без ссылки на исследуемый образец, довольно сложно Вам помочь чем либо. Много написано - мало что понятно. Не могу его кинуть в общий доступ(кажется это не нарушает правила), Если вам интересно - могу дать линк в ЛС. В первую очередь, ВСЕГДА воспользуйтесь ProtectionID или PeID, чтобы понять с чем имеете дело!!!, PeID - пользовался конечно) -Непосрдественно через ntdll.ZwCreateFile врядли, т.к. в разных ОСях (ядрах системы) структура запроса этой нативной функи непостоянна и имеет кучу нюансов. С другой стороны, я не совсем представляю, с чего Вы решили, что Это последняя функция, после которой Imuunity перестал бежать и требовал input. - каждый раз начинает бежать с разного адрес в смысле, база загрузки каждый раз другая - у Вас WIndows 7 - 8 наверно. У меня windows 8.1, но мне кажется что эта их фишка. Другие проги(первый крак_ми) вроде как загружаются в одинаковый адрес, либо у меня уже поехала за эти дни крыша))) - Написан на Visual C++ 2010 с испльзованием nativeAPI(ntdll). Это в описании к crackme написано?? Нет, это я увидел стринги в самом файле, так же как и crypto++ понял по стрингам(+ гуугль) которые были внутри. Я тут искал может какие-то техники наставления как с такими вещами работать. Например я видел тут статью где люди искали в IDA редкие инструкии(кстати в бесплатной такого фитчера нет чтоли?). Хороший статей по этому поводу совсем не могу найти. Пару книжек уже перелистал, тоже ничего( ![]() |
|
Создано: 23 мая 2015 21:19 · Личное сообщение · #4 |
|
Создано: 24 мая 2015 14:31 · Личное сообщение · #5 unknownproject пишет: alex87is пишет: не кажется что эта их фишка. Старшие версии студии компилируют бинари с поддержкой ASLR (динамического распределения памяти грубо говоря), так что вряд ли это "своя" фишка. ааа! вот оно как. Спасибо)) unknownproject пишет: alex87is пишет: я увидел стринги в самом файле Лучше бы вы написали строки. и ведь действительно)) ![]() |
![]() |
eXeL@B —› Вопросы новичков —› не знаю как двигаться дальше |