Этичный хакинг и тестирование на проникновение, информационная безопасность
Отладка приложения в Windows с Radare2
Начать я хочу с заявления: я — Linux парень. Я использую её всё время для разработки. Командная строка великолепна и потрясающе удобна для задач связанных с компьютерной наукой. И хотя это мой путь, имеются те, кто предпочитает вместо этого использовать окружение Windows. Поэтому в данной статье я хочу показать две вещи: как установить и использовать radare2 для Windows и как делать отладку приложений используя radare2.
Как установить radare2 в Windows
Скачать установщик под Windows вы можете с официального сайта по ссылке: https://www.radare.org/r/down.html
По какой-то непонятной причине, на момент написания файл для Windows не найден: 404 Not found
Исходный код программы присутствует на GitHub’е, там же можно найти скомпилированные файлы, в том числе для Windows: https://github.com/radare/radare2/releases (файлы для Windows называются radare2-msvc_*.zip)
Удобная разработка и отладка программ на Turbo Assembler в Windows 10 без консоли
Программа является портативной, поэтому вы можете распаковать архив в любое место и запускать файл с указанием полного пути до него. Как вариант, можно добавить папку в переменную окружения $PATH.
Переменная окружения $PATH — это просто переменная, в которой перечислены папки, и которую компьютер использует для поиска исполнимых файлов. То есть если утилита (команда) и приложения размещены в одной из этих папок, то такую команду (приложение) можно запустить по имени файла — не нужно указывать полный путь до него (даже необязательно указывать расширение файла).
Я распаковал содержимое скаченного архива (файл radare2-msvc_64-3.4.1.zip) в корень C:, и папку переименовал в radare2. Таким образом исполнимые файлы Radare2 находятся в папке C:radare2 — именно этот путь я и добавлю в переменную окружения.
Для этого открываю Панель управления → Система и безопасность → Система → Дополнительные параметры системы → Переменные среды:
Там найдите Path и нажмите Изменить:
Нажмите кнопку Создать, впишите C:radare2 и нажмите ОК:
Чтобы убедиться, что всё сделано правильно, откройте командную строку и введите туда:
radare2.exe -h
Кстати, добавить новый путь в переменную окружения можно было прямо в командной строке (если вы это сделали через графический интерфейс, то второй раз добавлять не нужно):
[Environment]::SetEnvironmentVariable(«Path», $env:Path + «;C:radare2», [EnvironmentVariableTarget]::Machine)
Это удобно, и radare2.exe как и любые утилиты можно запускать в командной строке по имени файла.
Отладка с Radare2 в Windows
STM32CubeIDE. Установка, настройка и отладка. Часть 1
Теперь, когда программа Radare2 установлена, мы можем перейти к нашему уроку по отладке (debugging). Если вы не знаете, что такое отладка, то говоря простыми словами, это запуск программы и приостановка её на каждой инструкции Ассемблера. Это позволяет вам динамически видеть, что происходит под капотом и это часто это во много раз проще, чем статичный анализ. Тем не менее во время анализа вредоносной программы безопаснее выполнять статичный анализ, когда файл на самом деле не запущен. Если вы хотите делать отладку вируса, ведь это важная часть процесса анализа, тогда вам следует это делать в виртуальной машине.
Я продемонстрирую, как разрешить Challenge 2 из Flare-On 4 Capture the Flag challenge. Flare-On challenge — это ежегодное соревнование по Обратному Инжинирингу (Reverse Engineering) проводимое FireEye. Всем заинтересованным в обратном инжиниринге я настоятельно рекомендую хотя бы попробовать, поскольку вы можете из них научиться очень многому. С их сайта вы можете загрузить исполнимые файлы от прошлогоднего соревнования.
Нам следует начать с запуска программы, чтобы увидеть, что она от нас хочет и на основании этого действовать. Когда мы загружаем программу, мы видим приглашение командной строки на ввод пароля. Если мы попытаемся угадать пароль, нам покажут сообщение, которое говорит, что мы ошиблись. Не слишком мудрёно — нам нужно просто узнать, что это за пароль.
Вывод программы с заданием:
Я собираюсь пропустить двоичный файл через rabin2 чтобы вытянуть всю базовую информацию. Я рассказывал как это сделать в моей первой статье, вводной инструкции по использованию radare2.
arch x86 baddr 0x400000 binsz 3072 bintype pe bits 32 canary false retguard false class PE32 cmp.csum 0x00000e67 compiled Wed Jul 5 22:36:23 2017 crypto false endian little havecode true hdr.csum 0x00000000 laddr 0x0 linenum false lsyms false machine i386 maxopsz 16 minopsz 1 nx false os windows overlay false pcalign 0 pic false relocs true signed false sanitiz false static false stripped true subsys Windows CUI va true
Там ничего особо интересного, поэтому взглянем на строки, что там у нас:
rÄ‼࠼ GetStdHandle ReadFile WriteFile ExitProcess KERNEL32.dll rnr G1v3 m3 t3h fl4g: G00d j0b! N0t t00 h0t R we? 7ry 4ga1nz plzzz!
Здесь опять ничего чрезмерно интересного. Мы можем увидеть строку “G00d j0b!” которая, вероятно, показывается когда мы верно угадаем флаг. Оставшаяся информация похожа на много перемешенного мусора, поэтому вероятно пароль зашифрован. Мы будем делать отладку приложения, чтобы узнать, как соотносится наш пароль с их зашифрованным. Откройте это приложение в radare2 используя флаг -d, который говорит radare2, что мы собираемся запустить процесс отладки этого приложения.
radare2.exe -d IgniteMe.exe
Запуск и вывод в моём случае:
radare2.exe -d Z:flareIgniteMe.exe Spawned new process with pid 10884, tid = 10528 = attach 10884 10528 bin.baddr 0x00400000 Using 0x400000 asm.bits 32 — Select your character: RBin Wizard, Master Anal Paladin, or Assembly Warrior [0x7ff9e88b3670]>
Теперь мы проанализируем исполнимый файл используя команду ‘aaaa’. Затем мы перейдём в визуальный режим radare2 для отладки используя для этого команду ‘V!’. Этот режим позволяет нам видеть стек, регистры и другую информацию — всё из одного окна.
Программа задаёт нам вопрос:
Activate decompiler? It might take some time.(Y/n)
Перевод: «Активировать декомпилятор? Это может занять некоторое время». У меня при активированном декомпиляторе не запускается процесс отладки — ошибка «Fatal exception (access violation)», поэтому я выбираю «n» (то есть Нет).
Затем мы можем использовать команду ‘s entry0’ для перехода к главной функции исполнимого файла. Вы можете сделать это двумя способами. Выйти из визуального режима используя ‘qq’ и запустив команду в обычном режиме, или запустив команду в визуальном режиме используя ‘:s entry0’.
Вы можете в radare2 запустить любую команду в визуальном режиме добавив перед ней ‘:’. После выполнения команды в визуальном режиме, нажмите ENTER ещё раз, для возврата в этот режим и перерисовки экрана. Если вы выполнили в командном режиме, то выполните V! для возврата в визуальный режим.
Как вы можете видеть — присутствует несколько окон между которыми можно переключаться клавишей TAB. Чтобы развернуть выделенное окно на весь экран, нажмите ENTER. Для возврата в обычный вид, нажмите ENTER ещё раз.
В entry0 мы можем видеть запрос программы на ввод пароля.
После того, как она выводит строку используя WriteFile, то затем она вызывает другую функцию. У Radare2 была ошибка при анализе этой функции, так как она должна называться ReadFile, и именно так программа захватывает наш ввод. Затем она принимает наш ввод и пропускает его через функцию в 0x401050. Мы можем назначить здесь точку остановки (breakpoint), для этого в режиме «V!» прокручивайте, пока эта строка не окажется вверху страницы, затем нажмите F2.
Затем мы запускаем программу, для этого дважды нажмите кнопку F9. Radare2 автоматически остановится, когда появится приглашение командной строки, в этот момент нам нужно вернуться в radare2 и вновь нажать F9. Затем нам нужно ввести нашу строку и нажать ENTER, выполнение программы остановиться в только что созданной нами точке остановки (breakpoint).
Чёрная консоль после первых двух нажатий F9:
После ещё одного нажатия F9 и ввода нашей строки в попытке угадать пароль:
В визуальном режиме нажмите клавишу s для пошаговой отладки. А S (большая s) используется для «перепрыгивания» — когда вызывается функция, если нажать S, то вместо входа в эту функцию будет выполнен переход сразу к её результатам, без прохода по шагам вызываемой функции.
Содержимое функции, в которую мы перешли:
Взгляните на неё, похоже на то, что она шифрует нашу строку и затем сравнивает её с str.IE. Мы можем пройти по шагам этой функции чтобы увидеть в точности КАК она шифрует переданную строку.
В начале я использую кнопку s для прохождения по программе по отдельным шагам, пока я не достигаю
call 0x401020
Мне было лень и что-то не хотелось проходить эту функцию по шагам, поэтому я перепрыгнул к концу её выполнения, для этого нажал S. Затем я посмотрел на правую сторону окна, чтобы увидеть, чему равно значение eax, поскольку обычно функции возвращают их результат в eax.
Как мы можем видеть, eax равно 2, что является длиной нашей строки. Следовательно, всё, что делает функция, это проверяет длину нашей строки. Давайте продвинемся чуть дальше и посмотрим, что делает следующая функция.
Я перенёсся в конец функции call section..text (0x401000) и она вернула шестнадцатеричное значение 0x00700004 и переместила al в [ebp-1]:
По сути, это просто помещает число 4 в [ebp-1], зачем это нужно мы увидим позже.
Затем мы видим, что длина нашей строки [ebp-0xc] перемещается в eax и запускается цикл, который проходит по каждому символу в строке. Пройдя немного вперёд через него мы заметим, что последняя буква нашей строки помещается в eax и значение [ebp-1] помещается в ecx. Затем между этими двумя значениями выполняется операция xor для начала процесса шифрования нашей строки.
Затем последняя буква нашего введённого текста помещается в [ebp-1] и цикл запускается снова.
Итак, похоже на то, что выполняется операция xor между каждой буквой строки и предыдущей буквой. Если предыдущая буква отсутствует, то тогда операция xor выполняется между символом и цифрой 4.
Итак, для нашей строки ‘hi’ сделана xor между ‘i’ и 4, а затем xor с ‘h’ и ‘i’. Поэтому наша зашифрованная строка стала 0x1 0x6d. Оглядев программу далее, мы можем видеть, что эта зашифрованная строка сравнивается посимвольно с такой строкой:
Некоторые из этих значений являются шестнадцатеричными величинами, а не буквальными символами строки. Так radare2 парсит данные — поскольку часть из этих символов является непечатными, относится к управляющим символам. Теперь мы знаем, что происходит, и нам не нужно больше продолжать отладку приложения — мы можем перейти к расшифровке строки, чтобы узнать, что там за флаг.
Что хорошо в xor, так это то, что эту операцию можно использовать для кодирования и декодирования. Поэтому способом декодирования этой строки будет выполнение операции xor между последним символом и 4. Затем берётся следующее значение и полученное от предыдущей операции и между ними выполняется xor и так далее.
В PHP для выполнения этой процедуры можно воспользоваться функциями ord (возвращает номер символа для соответствующей кодировки, в данном случае номер символа в таблице ASCII) и chr (показывает символ по его десятичному номеру в таблице ASCII).
К примеру, для вывода первого символа:
echo chr(ord(«i»)^4); m
Операции для остальных символов:
Это было очень базовое использование отладчика Radare2 в Windows. Лично я при отладке приложений предпочитаю использовать x64dbg, но это был интересный опыт изучения.
Спасибо за чтение и весёлого ревёрсинга!
Ошибки работы Radare2 в Windows — решение проблем
Fatal exception (access violation) in thread
При запусти процесса отладки Radare2 в Windows я столкнулся с ошибкой:
(2940) Fatal exception (access violation) in thread 10556stem32ntdll.dll) ntdll.dll (2940) loading library at 0000000077A20000 (C:WindowsSysWOW64ntdll.dll) ntdll.dll (2940) Fatal exception (access violation) in thread 10556
Процесс отладки в этот момент останавливался.
Чтобы избежать эту проблему, при переходе в визуальный режим на запрос системы (активировать ли декомпилятор?):
Activate decompiler? It might take some time.(Y/n)
Ответьте отрицательно, тогда описанная проблема должна исчезнуть.
Источник: hackware.ru
В чем заключаются настройка ПО и отладка приложений?
Установка ПО в организации является трудоемким и кропотливым процессом, состоящим из ряда взаимосвязанных этапов, таких как план развертывания ПО, разработка спецификаций (мотивированных списков) требований, установка/тиражирование отдельной подсистемы, которые называются контрольными проектными элементами. С другой стороны, на целевом предприятии весь этап развертывания разбивается на ряд подэтапов, завершающихся представлением администратору развертывания внутренних проектных результатов (контрольными отметками). Последние используются для проверки хода выполнения проекта персоналом предприятия. После завершения выполнения каждого контрольного элемента заказчику ПО предоставляются результаты их выполнения, причем контрольные проектные элементы, предоставляемые заказчику ПО, могут совпадать с контрольными отметками.
Отладка — этап разработки программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится:
· Узнавать текущие значения переменных;
· Выяснять, по какому пути выполнялась программа.
Существуют две взаимодополняющие технологии отладки.
· Использование отладчиков — программ, которые включают в себя пользовательский интерфейс для пошагового выполнения программы: оператор за оператором, функция за функцией, с остановками на некоторых строках исходного кода или при достижении определённого условия.
· Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода — на экран, принтер, громкоговоритель или в файл. Вывод отладочных сведений в файл называется журналированием.
Основная задача отладки состоит в завершении разработки всего программного обеспечения и в доведении его характеристик до значений, заданных требованиями технического задания (спецификации требований). При этом ПО должно гарантированно удовлетворять всем требованиям не только в диапазоне типичных условий его функционирования, но и при предельных, критических сочетаниях значений всех параметров. Это обеспечивает надежность функционирования ПО при разнообразных произвольных, в том числе, искаженных сочетаниях исходных данных.
Как применяется виртуальная машина для отладки приложений?
Типичные примеры применения виртуальных машин:
§ Тестирование приложений на корректность работы под управлением различных ОС.
§ Тестированию в виртуальных машинах удобно подвергать приложения, влияющие на настройки ОС, например, инсталляционные приложения.
§ Тестирование работоспособности самих ОС или сетевых служб, документирование приложений, предназначенных для платформы, отличной от той, что используется для подготовки документации, демонстрация продуктов для различных платформ и их взаимодействия на одном компьютере, техническая поддержка много платформенных продуктов.
§ Использование их для запуска приложений, не функционирующих под управлением ОС, установленной на рабочей станции пользователя.
Серверные средства управления виртуальными машинами используются, когда на одном физическом сервере требуется выполнять приложения, не отличающиеся высокой степенью загруженности и высоким трафиком, но требующие наличия либо различных платформ, либо несовместимых между собой конфигураций одной и той же платформы.
Рассмотрите основные настройки параметров ПК.
Параметры отключения экрана и параметры перехода в спящий режим:
§ выбрать время отключения экрана при питании от батареи;
§ выбрать время отключения экрана при питании от сети;
§ выбрать время перехода в спящий режим при питании от батареи;
§ выбрать время перехода в спящий режим при питании от сети.
Источник: infopedia.su
Создание и отладка программ
Разработка программ в AVR Studio начинается с создания проекта. После установки программы это легче всего сделать, через менеджер создания проектов во вкладке Project/Project Wizard.
Рис.1 Project Wizard AVR Studio После нажатия экранной кнопки New Project появится окно на рис.1, в котором надо задать название и директорию размещения проекта, например FirstProject. В качестве типа проекта необходимо выбрать Atmel AVR Assembler (проекты AVR GCC используют Си-компилятор WinAVR). Сейчас и в дальнейшем очень важно размещать все файлы проекта в одной папке, что избавит от многих проблем при редактировании и переносе программ.
Рис.2 Project Wizard AVR Studio На следующем этапе необходимо выбрать модель микроконтроллера и тип отладочного средства, как показано на рис.2 (в нашем случае это ATmega8 и AVR Simulator соответственно). После чего откроется окно текстового редактора, где и будет непосредственно происходить создание программы (см рис.3).
Рис.3 Текстовый редактор AVR Studio В окне проекта Project можно видеть все компоненты программы: файл с исходным текстом FirstProject.asm, заголовочный файл m8def.inc, а также выходные файлы .lst, .map, .hex и .obj с одноименными названиями. В разделе Labels находятся символьные имена меток, встречающиеся в программе. Компиляция проекта осуществляется после нажатия на иконку Assemble либо Assemble and Run.
В последнем случае сразу же запускается и программа отладчика. Если в исходным тексте были допущены ошибки, то .hex, естественно, создан не будет, а в окне Build, появится описание всех ошибок и строки где они находятся. После внесения необходимых исправлений и успешной сборки, в окне Build отобразится статистика о проекте в виде диапазонов адресов и размеров секций FLASH, SRAM и EEPROM.
Рис.4 Работа в симуляторе AVR Studio Проверить работоспособность программы можно в симуляторе, либо с помощью любого другого отладчика. Его запуск происходит после нажатия иконки Start Debagging.
На рис.4 показана работа в симуляторе и вид основных отладочных окон, в которых можно наблюдать за состоянием содержимого различных областей памяти и символьными именами, объявленных в тексте программы. Все эти данные доступны для редактирования на ходу. Отладку можно вести как в пошаговом (кнопки Step Into, Step Over, Step Out), так в автоматическом (Auto Step) или ускоренном (Run) режимах.
Имеется возможность использовать также точки останова. Симулятор, встречая строку, в которой находится точка останова, принудительно останавливает свое выполнение, после чего можно детально изучить содержимое отладочных окон. Управление точками останова производится кнопками Toggle Brekpoint и Remove all Program Brekpoints.
В окне Disassembler можно видеть соответствующие машинных кодов командам ассемблера AVR. AVR Studio предоставляет программисту интуитивно-понятный пользовательский интерфейс и при ее освоении никаких проблем, как правило, не возникает. Управление свойствами встроенного текстового редактора и среды в целом ничем не отличается от подобных действий в различных офисных приложениях. Детальное описание всех компонентов AVR Studio можно найти во встроенной справочной системе. Перейти к следующей части: Структура HEX-файла
Теги:
Котов Игорь Юрьевич
Опубликована: 2012 г.
0
Вознаградить Я собрал 0 0
Источник: cxem.net