Отладка с использованием Radare2… и Windows!

Для начала я хочу сказать, что я человек Linux. Я все время использую его для разработки. Командная строка великолепна и очень удобна для задач, связанных с информатикой. Хотя я так считаю, есть те, кто этого не делает и предпочел бы вместо этого использовать среду Windows. Поэтому в этой статье я хочу показать две вещи: как установить и использовать radare2 для Windows, а также как отлаживать приложения с помощью radare2.

Чтобы установить radare2 в Windows, я зашел на их сайт и щелкнул ссылку Загрузить 2.3.0 для Windows вверху страницы. Затем вы просто запускаете установщик, и radare2 должен быть в вашей системе! Проблема заключалась в том, что установщик только сбросил radare2.exe, а также другие инструменты в моем каталоге C: / users / username / AppData. Мне пришлось бы сменить каталог в этой папке из командной строки, чтобы использовать исполняемые файлы. Чтобы получить доступ к файлу из любого места в командной строке, вам нужно будет добавить каталог в переменную среды $ PATH. Это просто переменная, которую ваш компьютер использует для поиска команд и приложений, которые вы можете запускать из любого места в системе.

Чтобы изменить переменную $ PATH, вы можете сделать это одним из двух способов. Вы можете использовать графический интерфейс Windows, чтобы изменить его, перейдя в Свойства системы — ›Дополнительно -› Переменные среды, щелкните переменную Путь и щелкните Изменить. Затем вы можете добавить каталог, ведущий к вашим файлам radare2.

 

Вы также можете быть super 1337 и делать это из командной строки. Для этого нужно открыть PowerShell от имени администратора и использовать команду

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Users\<username>\AppData\Local\Programs\radare2", [EnvironmentVariableTarget]::Machine)

Эта команда избавляет вас от необходимости добавлять папку в переменную $ PATH при каждой перезагрузке компьютера.

Теперь, если вы запустите команду radare2.exe, вы увидите справочное сообщение radare2. Это означает, что вы успешно установили radare2 в своей системе.

Теперь, когда у нас установлен Radare2, мы можем перейти к нашему руководству по отладке. Если вы не знаете, что такое отладка, по сути, она запускает программу и останавливается на каждой инструкции сборки. Он позволяет вам динамически видеть, что происходит под капотом, и часто бывает проще, чем статический анализ. Однако при анализе вредоносных программ безопаснее выполнять статический анализ, поскольку файл на самом деле не запущен. Если вы хотите отлаживать вредоносное ПО, поскольку это важная часть процесса анализа, вам следует сделать это на виртуальной машине.

См. также:  Шаг 68: Поместите все под контроль версий~ Диомидис Спинеллис

Я покажу, как решить задачу 2 для задачи Flare-On 4 Capture the Flag. Flare-On — это ежегодное соревнование по обратному инжинирингу, проводимое FireEye. Я настоятельно рекомендую всем, кто интересуется обратным инжинирингом, хотя бы попробовать его, так как вы можете многому из него научиться. Вы можете скачать бинарные файлы из прошлогоднего конкурса с их сайта.

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

Я собираюсь запустить двоичный файл через rabin2, чтобы получить основную информацию. Я рассказывал, как это сделать, еще в моей первой статье, где подробно рассказывалось, как использовать radare2.

arch     x86                         
binsz    3072                        
bintype  pe                          
bits     32                          
canary   false                       
class    PE32                        
cmp.csum 0x00000e67                  
compiled Fri Jul 31 17:44:07 2043    
crypto   false                       
endian   little                      
havecode true                        
hdr.csum 0x00000000                  
linenum  false                       
lsyms    false                       
machine  i386                        
maxopsz  16                          
minopsz  1                           
nx       false                       
os       windows                     
overlay  false                       
pcalign  0                           
pic      false                       
relocs   true                        
signed   false                       
static   false                       
stripped true                        
subsys   Windows CUI                 
va       true

Здесь нет ничего слишком интересного, поэтому посмотрим на струны и посмотрим, что у нас получилось.

\rÄ‼࠼                         
GetStdHandle                      
ReadFile                           
WriteFile                          
ExitProcess                        
KERNEL32.dll                       
\r&IE*                             
xD+l]^E                            
+DonV\t_EGs&\n\r                   
G1v3 m3 t3h fl4g:                  
G00d j0b!                          
N0t t00 h0t R we? 7ry 4ga1nz plzzz!

Здесь тоже ничего особо интересного. Мы видим строку «G00d j0b!» что, вероятно, и получится, если правильно угадать флаг. Остальная информация выглядит как беспорядочный мусор, поэтому пароль, вероятно, зашифрован. Нам нужно будет отладить приложение, чтобы узнать, как мы сравниваем наш пароль с зашифрованным. Откройте приложение в radare2, используя флаг -d, который сообщает radare2, что мы собираемся отлаживать это приложение.

> radare2.exe -d IgniteMe.exe
[0x77200cc0]>

Отсюда мы анализируем исполняемый файл с помощью команды «aaaa». Затем мы переходим в специальный визуальный режим radare2 для отладки, используя команду «V!». Этот режим позволяет нам видеть стек, регистры и другую информацию из одного окна.

Затем мы можем использовать команду ‘s entry0’, чтобы перейти к основной функции двоичного файла. Вы можете сделать это одним из двух способов. Либо выйдя из визуального режима с помощью «qq» и запустив команду в обычном представлении, либо выполнив команду в визуальном режиме с помощью «: s entry0». Вы можете запустить любую команду radare2 в визуальном режиме, поставив перед ней «:».

См. также:  Из многих маршрутов вы можете продолжить изучение науки о данных и машинного обучения (аспирантура, MOOC, учебные лагеря, самообучение и т. Д.), Которые…

В entry0 мы видим, как программа запрашивает пароль.

После вывода строки с помощью WriteFile он вызывает другую функцию. У Radare2 возникла ошибка при анализе этой функции, так как она должна называться ReadFile, именно так программа получает наш ввод. Затем он принимает наши входные данные и прогоняет их через функцию по адресу 0x401050. Здесь мы можем установить точку останова, вернувшись в наш режим «V!», Прокручивая его до тех пор, пока эта строка не окажется в верхней части страницы, и нажав F2.

Затем мы можем запустить программу с помощью клавиши F9. Radare2 автоматически остановит нас, когда появится пустая командная строка, поэтому нам нужно вернуться в radare2 и снова нажать F9. Затем нам нужно будет ввести нашу строку и нажать ENTER, после чего мы остановимся на только что созданной точке останова.

 

Теперь, когда мы находимся в этой функции, мы можем войти в нее, используя клавишу F7. Это приведет нас к одной инструкции в функции, а затем остановится.

Глядя на это, похоже, что он шифрует нашу строку, а затем сравнивает ее с str.IE. Мы можем шаг за шагом выполнить эту функцию, чтобы увидеть, КАК именно она шифрует нашу заданную строку.

Сначала я использовал клавишу F7, чтобы пройти через приложение, пока оно не достигло

call 0x401020

Я был ленив, и мне не хотелось переходить через эту функцию однократно, поэтому я использовал F8, чтобы перешагнуть через эту функцию. Затем я взглянул на правую часть окна, чтобы увидеть, что такое eax, поскольку функции обычно возвращают свои данные в eax.

Здесь мы видим, что eax равно 2, что соответствует длине нашей строки. Итак, все, что делала эта функция, это проверяла длину нашей строки. Давайте сделаем еще шаг и посмотрим, что делает следующая функция.

Я перешагнул через функцию 0x401000, она вернула шестнадцатеричное значение 0x00700004 и переместила al в [ebp-1]. По сути, это просто помещает число 4 в [ebp-1], мы увидим, почему мы это делаем позже.

См. также:  Номер (часть 1): Scala

Затем мы видим, что мы перемещаем длину нашей строки [ebp-0xc] в eax и запускаем цикл, который проходит по каждому символу в строке. Продвигаясь дальше, мы замечаем, что последняя буква нашей строки помещается в eax, а значение в [ebp-1] помещается в ecx. Затем мы объединяем два значения вместе, чтобы начать процесс шифрования нашей строки.

Затем мы помещаем последнюю букву в нашей отправленной текстовой строке в [ebp-1] и снова запускаем цикл.

Похоже, что мы выполняем замену каждой буквы строки предыдущей буквой. Если предыдущей буквы нет, мы исключаем это значение на 4.

Итак, для нашей строки «hi» мы xor «i» на 4 и xor «h» на «i». Таким образом, наша зашифрованная строка становится 0x1 0x6d. Посмотрев позже программу, мы увидим, что она сравнивает эту зашифрованную строку с этой строкой по буквам.

\r&IE*\x17xD+l]^E\x12/\x17+DonV\t_EGs&\n\r\x13\x17HB\[email protected]\f\x02i

Некоторые из этих значений представляют собой шестнадцатеричные значения вместо строк. Это способ анализа данных radare2. Теперь, когда мы знаем, что происходит, нам больше не нужно отлаживать приложение и мы можем перейти к расшифровке этой строки, чтобы узнать, что это за флаг. Преимущество xor в том, что мы можем использовать его как для кодирования, так и для декодирования. Таким образом, способ декодирования этой строки состоит в том, чтобы выполнить xor последнего символа на 4, взять следующее значение и xor на предыдущее декодированное значение.

i^4 = m
0x02^m = o
\f^o = c
M^c = .
@^. = n
0x01^n = o
B^o = -
H^- = e
0x17^e = r
0x13^r = a
\r^a = l
\n^l = f
&^f = @
s^@ = 3
G^3 = t
E^t = 1
_^1 = n
\t^n = g
V^g = 1
n^1 = _
o^_ = 0
D^0 = t
+^t = _
0x17^_ = H
/^H = g
0x12^g = u
E^u = 0
^^0 = n
]^n = 3
l^3 = _
+^_ = t
D^t = 0
x^0 = H
0x17^H = _
*^_ = u
E^u = 0
I^0 = y
&^y = _
\r^_ = R

Итак, флаг — [email protected] Если мы добавим это, мы увидим, что выдержали испытание.

Это была очень базовая информация с использованием отладчика Radare2 в Windows. Лично я предпочитаю использовать x64dbg при отладке приложений, но это был интересный опыт обучения. Как всегда, если я сделал что-то не так или есть какой-то способ улучшить ситуацию, пожалуйста, свяжитесь со мной и сообщите мне. Вы можете связаться со мной в моем LinkedIn или Twitter.

Если вам понравилась эта статья, вы можете просмотреть больше в моем обновленном блоге по адресу https://goggleheadedhacker.com/1

Спасибо за чтение и удачного обращения!

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: