6.2. Дизассемблирование программ с помощью интерактивного дизассемблера Ida Pro
Интерактивный дизассемблер IDA PRO, как и всякий дизассемблер предназначен для дизассемблирования кода программы в мнемонические инструкции на языке ассемблера. Рабочее окно IDA представлено на рис. 6.2.
Большим удобством Ida Pro является то, что он «сворачивает» стандартные библиотечные функции, что во многом упрощает навигацию по файлу, позволяя втиснуть больше информации в тесное пространство экрана. «Развернуть» функцию можно, подведя к ней курсор и нажав “+”, или для сворачивания “-”.
Кроме этого, IDA способна находить перекрестные ссылки, вызываемые из кода. На основе сигнатурного анализа, IDA умеет распознавать различные библиотечные операторы., например, “ostream::operator
Дизассемблер IDA изначально проектировался как интерактивная среда, предназначенная для совместной работы с человеком. Преимуществом интерактивных дизассемблеров является то, что дизассемблеры, пытающиеся выполнить весь процесс автоматически, легко сбить каким-либо хитрым приемом. Человека же сбить не так легко.
ВВЕДЕНИЕ В РЕВЕРСИНГ С НУЛЯ С ИСПОЛЬЗОВАНИЕМ ИДА ПРО. ЧАСТЬ 1.
Рис. 6.2. Рабочий интерфейс дизассемблера Ida Pro
В IDA реализован удобный С-подобный внутренний язык написания скриптов, позволяющий реализовать многие полезные действия (например, осуществить дешифровку зашифрованного участка кода).
Ida Pro поддерживает инструкции для различного вида процессоров. Среди них – все версии процессоров INTEL, Motorola, Z80.
Пример использования дизассемблера IDA Pro приведен ниже.
Пусть у нас имеется следующий COM файл размером 292 байт. Код данного файла представлен на рис. 6.3.
Рис. 6.3. Код исследуемого файла
З агрузим данный файл в дизассемблер IDA, после чего получим следующую распечатку (рис 6.4).
В идим, что дизассемблирование произведено не совсем до конца. IDA дизассемблировала только первые две команды. Дело в том, что для того, чтобы правильно распознать остальную часть кода, потребовался бы нетривиальный интеллектуальный алгоритм. За неимением последнего, IDA прекратился процесс, ожидая дальнейших команд от пользователя.
Многие дизассемблеры пытаются дизассемблировать дальше, и, как правило, неверно. Попытаемся указать для IDA, что делать дальше.
Если приглядеться к первым двум командам, то можно увидеть, что инструкция JMP в строке 103h вызывает переход по адресу 106h. Для того, чтобы объяснить это IDA, необходимо добавить новую перекрестную ссылку. Это можно сделать так.
В меню “View” выбрать пункт “Cross references” и нажать INSERT.
Рис. 6.4. Текст файла после первоначального дизассемблирования
поле “From” указать адрес, с которого происходит прыжок (в нашем случае seg000:0103).
В поле “To” указать адрес, куда происходит прыжок (в нашем случае seg000:0106).
Этого же самого эффекта можно добиться более быстрым путем – подвести указатель к адресу 106h и нажать клавишу “C”. Тем самым мы укажем, что с данного адреса идет участок кода. Однако недостаток этого варианта состоит в том, что непонятно, с какого места этот участок кода будет получать управление.
Дизассемблер IDA. Установка и практика использования за 10 минут!
Комментарии в дизассемблированном коде имеют очень большое значение, особенно в больших проектах. Например, в нашем случае, в строке 103h можно поставить комментарий, говорящий о том, что при выполнении инструкции JMP SI, значение регистра SI=106h. Для осуществления этого, подведем курсор к строке 103h, нажмем клавишу “:” и введем текст комментария “SI=106h”.
С адреса 106h идет следующий участок кода.
Загрузка в si смещения 114h
Источник: studfile.net
Reverse Engineering для самых маленьких. Часть вторая.
В первой части мы познакомились немного с теорией. Теперь перейдем сразу к практике на простых программках. Качаем первый CrackMe и запускаем его.
Все в целом понятно без слов, введите правильный код . Берем IDA Pro и открываем программу.
IDA Pro один из мощнейших отладчиков дизассемблеров . Ну просто чудо комбайн с плагином HexRays (превращает ассемблер в псевдо код на С ), поддерживает xrefs (перекрестные ссылки) и т.д.
С лева окно функций, которые смог распознать отладчик. В центре листинг самой программы. В этой программе все достаточно скучно, по этому просто листаем программу. В блоке данных мы достаточно быстро находим строку :
aTheSerialYouHa_0: text «UTF-16LE», ‘The serial you have entered is invalid. Try again!!
С помощью xrefs ( горячая кнопка -> X ) находим участок кода где используется эта переменная.
Мы попадаем на кусок кода где вызывается окно с надписью, но нас больше интересует метка loc_402456. Если конкретней откуда мы попадаем на нее.
Попадаем на очередною локальную функцию. Первое что бросается в глаза : .text:004023BC push offset aRmth2hm89t21 ; — кладем в стеке строчку . Скорей всего это и есть наш ключ. Дальше идет сравнение регистров : .text:004023EC cmp si, di . И условный переход на loc_402456 : .text:004023FB jz short loc_402456 . Дальше идет код вывод таблички о удачном вводе ключа.
JE/JZ | Jump Equal (равно) или Jump Zero (ноль) |
JNE/JNZ | Jump Not Equal (не равно) или Jump Not Zero (не ноль) |
По сути мы уже решили задачу, нашли ключ в коде программы. Но думаю это слишком скучно. Предлагаю пропатчить ее, что бы на любой введенный текст она говорила что все хорошо.Для этого нам строчку с условным переходом ( jz short loc_402456 ) надо заменить на команду Nop.
NOP — это однобайтовая команда, которая ничего не выполняет, а только занимает место и время. Машинный код команды NOP фактически соответствует команде XCHG AL, AL
Что бы пропатчить строчку кода выделяем ее, затем идем в меню Edit -> Patch Program -> Assemble . Обратите внимание что команда JZ занимает в коде два байта, а NOP один. Нам надо вставить две команды что бы не поломать адресацию программы.
Теперь применяем изменения (Edit -> Patch Program -> Apply … ) и запускаем программу.
Второй заход…
Следующий файл уже повеселей немного, качаем…
Тут нам предлагается вести Имя и Пароль, в задание написано найдите пароль. Открываем файл в IDA , удачно. Программа сразу нам находит main функцию )))
В принципе работа программы уже вполне понятна. Если у вас не открылся просмотр в режиме графов нажмите Пробел (Space) . Нас будут интересовать три функции _prompt_user , _check_password и _get_pwd . Что бы посмотреть псевдо код нажмите F5 .
Давайте обратим внимание на строчки :
call _check_password cmp eax, 1
По идее функция _check_password возвращает один или ноль в регистр eax по результату проверки пароля . Идем туда и смотрим ) Псевдо код не ассемблер, более менее понятно : первый символ пароля сравнивается с символом полученным в _get_pwd
Дальше идет просто зубодробительная функция (get_pws). Про ассемблер я вообще молчу, тут и в псевдокод жесть какая-то ( надо еще и С++ подучить ). Я решил пойти немного другим путем и поставил брекпоинт (клавиша F2 ) на строчку :
cmp dl, al
И посмотреть в отладчике какие значения .
Поигравшись я выяснил что первая буква должна быть ASCII Code = 77 или «w».
Третий, контрольный в голову…
Качаем третий экземпляр, там все уже привычно. Находим функцию проверки ключа и смотрим ее в псевдокоде ( F5 )
Для удобства я переименовал переменные ( правой кнопкой на переменной или клавиша N ), а также оставил комментарии ( клавиша / ). Что бы код был принят переменная mr_x должна быть ровна 7. В принципе уже понятно что пароль 7 символов, но мать вашу : где этот X увеличивается .
Я точно не гений, решение этой проблемы у меня заняло определенное время. Пришлось лезть в ассемблер , ставить брекпоинты и ковырять отличником алгоритм работы. Собственно я нашел как проходит проверка ключа. Он по символьной сравнивается с Secret_key db ‘phahh`b’,0 . Алгоритм работы такой :
mr_x ^ Secret_key[mr_x]) == key[mr_x]
.text:0040109B movsx edx, byte ptr Secret_key[esi] ; «phahh`b» .text:004010A2 movsx eax, key[esi] .text:004010A9 xor edx, esi .text:004010AB cmp edx, eax .text:004010AD jnz loc_4011CB .text:004010B3 mov eax, offset key .text:004010B8 lea edx, [eax+1] .text:004010BB jmp short loc_4010C0
Оператор XOR приемник , источник — выполняет побитную операцию ИЛИ .
Ну а пароль высчитывается так :
0x70 ^ 0 -> » p » 0x68 ^ 1 -> » i » 0x61 ^ 2 -> » c » 0x68 ^ 3 -> » k » 0x68 ^ 4 -> » l » 0x60 ^ 5 -> » e » 0x62 ^ 6 -> » d »
Ошибка в тексте? Выделите её и нажмите «Ctrl + Enter»
Источник: xn--90aeniddllys.xn--p1ai
IDA Pro
IDA Pro — это дизассемблер для компьютерного программного обеспечения, который генерирует исходный код на языке ассемблера из машинного исполняемого кода. Он поддерживает множество форматов исполняемых файлов для различных процессоров и операционных систем.
Самой сильной стороной программы является то, что здесь имеется свой встроенный отладчик данных. С его помощью опытные специалисты смогут значительно упростить основные рабочие моменты, которые будут поддерживаться полностью автоматизированными инструментами.
Название IDA Pro происходит от английского Interactive Disassembler. IDA используется для анализа вирусов (antivirus companies), исследования защит систем (software security auditing), обратной инженерии (reverse engineering). Хотя IDA и не является декомпилятором (decompiler), она содержит отладчик (debugger) и может анализировать программы на высоком уровне.
Основная задача — превращение бинарного кода в читаемый текст программы. Ниже приведены некоторые возможности, уникальные для этой программы:
распознавание стандартных библиотечных функций (технология FLIRT)
развитая система навигации
система типов и параметров функций
встроенный язык программирования IDC
открытая и модульная архитектура
возможность работы практически со всеми популярными процессорами (список)
возможность работы практически со всеми популярными форматами файлов (список)
работа со структурами данных высокого уровня: массивами, структурами, перечисляемыми типами
Примечания к выпуску доступны на официальном сайте hex-rays.com >
Источник: appstorrent.ru
Hex-Rays IDA Pro 7.7.220118
Hex-Rays IDA – данное программное обеспечение представляет собой продвинутый и универсальный декомпилятор, который создан на основе популярнейшей платформы — IDA Pro. Функциональная деятельность приложения позволит пользователям проводить конвертирование бинарного кода, выводя его в легко читаемый системный псевдокод.
Самой сильной стороной программы является то, что здесь имеется свой встроенный отладчик данных. С его помощью опытные специалисты смогут значительно упростить основные рабочие моменты, которые будут поддерживаться полностью автоматизированными инструментами.
Пароль ко всем архивам: 1progs
Так же отдельно стоит отметить возможность быстрого анализа программного кода, который широко разворачивается в интерфейсе программы. Программисты и разработчики софта смогут тщательно изучить все имеющиеся сведения, чтобы минимизировать появление ошибок.
- Возможность конвертирования бинарного кода;
- Упрощенная модель управления инструментами;
- Наличие русификации;
- Наличие технологии быстрого анализа программного кода;
Скачать torrent данного компилятора можно будет с нашего портала, открыв ссылку, которая расположена на активной странице.
Источник: 1progs.ru