R0 CREW

Neffarion :: 0xs3 :: String Phishing :: Охота на строки (Перевод: coldfire)

0xs3 :: String Phishing :: Охота на строки

Введение

Система “фаза-пароль” использует пароль для проверки того, что пользователю разрешено использовать программу. Это очень простая схема защиты, потому что показывает ресурсы, но не дает среднестатистическому человеку использовать программу . Это пароль можно найти в программе использую технику поиска , которая может быть использована многочисленными способами. Существуют также ситуации, когда вам нечего не нужно, кроме блокнота, чтобы найти пароль.

Информация о цели

Filename… cpp_phishme.exe & vb_phishme.exe [ download ]
Developer… +Neffarion
Toolz… OllyDbg, VB Decompiler, Notepad

Adficio

Система “фаза-пароль” - невероятно слабая система для использования ее в программах, потому что пароль в программах сохраняется в строке. Причина, по которой является проблемой для любого разработчика есть тот факт, что срока не требует обработчика. Строка - это всего лишь переменная, содержащая открытый текст, который может быть прочитан прямо из памяти, что делает программу очень простой для взлома.

Я написал 2 примера программ ( крякмисов ) для этого туториола, один из них написан на Visual Basic 6, тогда как второй на С++.

Мы начнем этот туториал с программы, написанной на С++ ( cpp_phishme.exe )

1 - а. Загрузите С++ программу

Картинка 1. С++ программа

2 - а. Введите произвольный пароль и нажмите [Enter]

Картинка 2. Неправильный пароль

Существует несколько путей, который позволяют отловить ( найти ) пароль:

  • Отладчик ( он же дебаггер )
  • Hex редактор
  • Декомпилятор
  • Поиск строк
  • Текстовый редактор

Для простоты я покажу вам 2 наиболее быстрых пути.

3 - а. Загружаем С++ программу в OllyDbg b. Заходим в контекстное меню Search for -> All referenced text strings

Картинка 3. Список всех строк в OllyDbg ( выборочно )

Мы видим строку "Password: " в самом вверху, которая является сообщением, которое мы видим справа перед тем как программа запросит пароль. Строчка ниже - строка, которая содержит “youguessedit”, которая и есть пароль к программе и это легко понять почему. :slight_smile:

4 - а. Двойной клик на строке "Password: "

Картинка 4. Проверка пароля

Когда строка "Password: " отображается, функция strcmp ( string compare - сравнение строк ) выполняется. Эта функция сравнивает входную строку, введенную пользователям в программу, с строкой, со строкой, которая является флагом этой функции, которая в данном случаи - “youguessedit”. По адресу 0x4013FC входные данные сохраняются в регистре ЕАХ и сравнивается с параметром функции strcmp и если пароль не соответствует “youguessedit”, то произойдет прыжок на адрес 0x401426 ( который содержит сообщение с ошибкой о неправильном пароле ).

Основная идея каждой защиты вида “фаза-пароль” в точности такая же как в этом крякмисе, где разработчик добавляет ( возможно ) некоторые дополнительные уровни зашиты, чтобы гарантировать, что пароль не будет показан открытым текстом в отладчике. Помните, что все системы защиты, которые проверяют входные данные используя программную технику ( или хотя бы подобную ей ) называется IfThenElse. Эту систему легко пропатчить, так как в этом крякми, вам необходимо всего лишь поставить NOP на месте функции сравнения строк и сделать прыжок к сообщению “-- password accepted! --” каждый раз.

Но есть проще способ заставить эту программу работать, один из многих, которые крякер игнорирует: Notepad :wink:

4 - а. Загрузите С++ программу в Notepad ( File -> Open )

Картинка 5. С++ программа в Notepad

Я использую шрифт “Terminal” ( размер 10), потому что у этого шрифта буквы больше чем у многих других. Так же он позволяет познать ощущения олдскула :wink:

Как вы уже знаете: пароль сохраняется в обычной строке. Даже если это не является данным случаем, пароль может быть найден в программе часть за частью при помощи простого анализа логических факторов . Трюк состоит в том, что найти ближайшее место к возможному месторасположению пароля. В этой программе строка "Password: " является вашим ключом для поиска пароля, потому что занимаясь отладкой программы мы узнали, что для проверки пароля используется функция strcmp.

6 - а. Выбираем меню Edit > Find b. Для поиска вводим строку "Password"

Картинка 6. Бингооо

Строки являются большой слабостью для крэкера, потому они позволяют нам подойти близко к функции, которую мы ищем.

Программы написанные на С/С++ объявляет строки в формате ASCII, который позволяет легко представить строкой открытого текста в отладчике. Visual Basic по умолчанию использует формат UNICODE, который усложняет поиск нужной строки.

Перейдем к VB крякмису :slight_smile:

7 - а. Загрузим VB программу

Картинка 7. VB программа

8 - а. Введем любой пароль

Картинка 8. Неправильный пароль

Мы будем использовать ( опять ) отладчик для нахождения нашего пароля.

9 - а. Загрузим программу в OllyDbg b. Заходим в контекстное меню Search for -> All referenced text strings

Картинка 9. Список строк в OllyDbg ( выборочно )

Путь, по которому VB программа обрабатывается на самом деле очень легко понять. Проблема с VB программами для крэкера на самом деле заключается в том, что код находится внутри VB библиотек, которые являются причиной для поиска нужных функций внутри программы отладчиком. Я хочу глубже изучить направление VB реверсинга сейчас, но позвольте пояснить некоторые базовые вещи, которые вы уже должны знать :).

  • Подход(метод) : VB программа рассматривается как самый тяжелый тип программ для взлома для Windows, из-за встроенной процедуры обфускации. Он является очень организованным языком для интрепритатор ОС, который заставляет думать в логических терминах заместь просто наблюдения за программой. Если вы ищете строку, это будем тяжело найти ее, поэтому вы должны использовать другие аспекты программы, которые позволяют найти то, что вы ищете.
  • Общий подход: Когда вы отлаживаете VB программу большинство отладчиков выдаст вам много ненужной информации. Например: На картинке 9 вы можете увидеть имя проекта, фон по умолчанию и директории исходников в первых нескольких строчка. После этого вы видите случайные имена элементов управления и форм ( от 0x401733 до 0x401C98 ) программы. На вершине списка вы видите внутренние функции ( не путайте с обычными функциями), которые использует программа для своих нужд.
  • Строки: Visual Basic обрабатывает строки вполне разумно. Например: строки для следующих элементов графического интерфейса message boxes, labels, command buttons, picture boxes - сохраняются в формате ASCII, в то время как строки IfThenElse и SelectCase для сохраняются в формате UNICODE. Формат UNICODE усложняет дизассемблировать все строки в отладчике, потому строки имеют более сложный обработчик для ASCII строк. Поэтому если UNICODE строка отображается в отладчике то это есть шанс, что вы увидите только ( маленькую ) часть строки :slight_smile:

Сейчас я могу написать книгу посвященную Visual Basic реверсингу, но я только ко что рассказал базовую информацию, который вы должны знать, что бы взломать простую VB защиту.

Точно также как и в С++, VB использует похожую функцию функции strcmp. В VB она называется vbaStrCmp и работает также как и ее С++ версия. Обе функции для сравнения строк, как С++ так и VB, используют один параметр, который содерижт строку, которую программа сравниваем с другой ( в данном случаи : с паролем ). Так как мы имеем дело с VB программой, мы не сможем посмотреть на все строки и найти нужную нам, поэтому мы будем отслеживать функциюvbaStrCmp.

10 - а. Правый клик и выбираем Search for > All intermodular calls

Картинка 10. Все межмодульные вызовы VB

Как вы знаете call - инструкция с адресом функции ( с параметрами функции), которая должна быть выполнена. Мы можем увидеть, что это программа действительно использует vbaStrCmp по адресу 0x402211.

11 - а. Двойной клик на vbaStrCmp в окошке "All intermodular calls"

Картинка 11. Все межмодульные вызовы VB

Как вы знаете call - инструкция с адресом функции ( с параметрами функции), которая должна быть выполнена. Мы можем увидеть, что это программа действительно использует vbaStrCmp по адресу 0x402211.

12 - а. Двойной клик на vbaStrCmp в окошке "All intermodular calls"

Картинка 12. параметр функции VbaStrCmp

Строка , которую мы проверяем в vbaStrCmp, находится по этому адресу и мы можем видеть части этой сроки расположенные от начала к концу. Но так как UNICODE необходимо более сложный обработчик для отображения должным образом, мы посмотри, какая строка данных содержится тут. Все данные будут отображаться в Hex формате. К счастью, OllyDbg имеет встроенный Hex просмоторщик.

13 - а. Правый клик по адресу 0x401E10 и выбираем Follow in dump > Selection

Картинка 13. Пароль в UNICODE (строка hex данных)

Путь по которому UNICODE строка преобразуется в hex очень простой: после каждой буквы идет 00, и в конце идет 5 штук 00 ( которые отображают конец строки).

Существует замечательный декомпилятор для программ VB, который имеет название “VB Decompiler”. Эта программа позволяет легко снизить время необходимое для взлома программы, написанной на VB. Позвольте мне продемонстрировать это :slight_smile:

14 - a. Загрузите VB крякми в VB Decompiler (File > Open program)

b. В Objects Tree перейдите к Code > frmMain > cEnter_Click, двойной клик и прокрутите немножко вниз.

Картинка 14. Пароль в VB Decompiler

Лично я не сильно люблю использовать подобные программы, так как они забирают всю суть процесса крякинга. Тем не менее, я должен отметить что VB Decompiler - хороший инструмент, который используется когда вы действительно не можете что-то вычислить/найти ( это случается ).

+Neffarion
http://www.0xNeff.eu

© Translated by coldfire from r0 Crew

Отличная статья, только перевод местами хромает: переводчик устал проверять выкидыши гугл транслятора.

Надо бы сделать обзор OllyDBG и создать отдельную ветку его применения. Видимо, это наиболее мощный инструмент. Я, в своё время, когда интересовался дизасемблерами, нашёл только пару платных, недоделанных… OllyDBG-2 распространяется под лицензией GPL. Я этому несказанно рад.

А вообще, платформы плодятся, операционки меняются… Скоро придётся ревёрсерам учить армовский асм и линукс. Если, конечно, мир не перейдёт на GPL, и все исходники не станут доступны… Из-за того, что сейчас как раз пользуюсь GNU’тым софтом, актуальность взлома программ для меня упала, но для мозгов полезно, и ASM всё равно стоит знать.

Большое спасибо!

Введение в крэкинг с нуля, используя OllyDbg