Главная / Блог / Первое свидание с IDA Pro: Куда смотреть, когда открыл бинарник, и как не сдохнуть от ужаса

Первое свидание с IDA Pro: Куда смотреть, когда открыл бинарник, и как не сдохнуть от ужаса

28 июля, 2025

33

Первое свидание с IDA Pro: Куда смотреть, когда открыл бинарник, и как не сдохнуть от ужаса

Ну что, юный падаван реверса, зачесались руки пощупать настоящий бинарник? Приготовился к битве с нулями и единицами? Отлично. Сегодня мы устроим тебе первое свидание с легендой – IDA Pro. Да, она выглядит как пульт управления звездолётом, который разбили об астероид, но не дрейф. Я покажу тебе, куда смотреть, чтобы не утонуть в этом океане ассемблерного кода. Помни, реверс – это не только мозг, это ещё и интуиция. И много, очень много кофе.


Точка входа (Entry Point): Сердце бинарника
Любой бинарник – это как дом. И у каждого дома есть парадный вход. В мире бинарников это называется Entry Point, или точка входа. Это первое место, куда ЦПУ ломанётся выполнять код. Если ты откроешь PE-файл (Windows-исполняемый файл), то IDA сама тебе покажет его. В Linux (ELF) это обычно _start.

Как найти:
• В IDA Pro, она обычно сама на него прыгает.
• Если потерялся, глянь в окне Functions (Shift+F3), там она обычно помечена специальным значком (звёздочка или стрелка).
• Ещё можно посмотреть в заголовке PE-файла. Возьми PE-bear или 010 Editor, открой бинарник и найди поле AddressOfEntryPoint в IMAGE_OPTIONAL_HEADER. Вот это число тебе и покажет, где оно в виртуалке начинается.

Что бросилось в глаза: Первые зацепки – Окна IDA, наши лучшие друзья
Ладно, ты открыл бинарник, и перед тобой каша из окон. Не паникуй. IDA – это швейцарский нож, в котором каждое лезвие для чего-то да нужно. Для начала сосредоточимся на главных
1. Functions window (Shift+F3): Карта дорог
• Представь, что ты попал в незнакомый город. Куда ты первым делом смотришь? На карту. Functions window – это твоя карта. Здесь IDA перечисляет все функции, которые она смогла распознать в бинарнике. Это просто золото! Ищи функции с понятными именами типа main, WinMain, DialogProc, sub_XYZ (IDA сама их именует, если не знает имени), start. Они часто указывают на интересные куски логики.
• Глубокий взгляд: Сортируй по размеру, по имени. Часто большие функции – это контроллеры или обработчики событий. Маленькие – это вспомогательные хелперы. Если видишь sub_401000 и вдруг MyCoolFunction, знай, что это, скорее всего, экспорт, или она вызывается извне. Или это ты сам её так переименовал, хе-хе.
• Пример:

; Functions window
; Address      Size    Name
; ------------------------------------
; 00401000     1A      _start
; 0040101A     5F      _mainCRTStartup
; 00401079     E3      _WinMain
; 0040115C     A5      sub_40115C
; 00401201     12      loc_401201
; ...
  1. Strings window (Shift+F12): Болтовня бинарника
    • Это как подслушать разговор. Бинарники, особенно те, что написаны кривыми руками, часто оставляют за собой кучу ‘хлебных крошек’ в виде строк. Сообщения об ошибках, URL’ы, имена файлов, ключи реестра, даже пароли иногда! Это первое, куда я лезу, когда нужен быстрый профит.
    • Глубокий взгляд: Сортируй по длине. Длинные строки могут быть текстами лицензий, обфусцированными данными, или просто кучей мусора. Короткие часто более информативны: “Password:”, “Access Denied”, “http://malicious.com”. Если видишь CreateProcess рядом со строкой типа cmd.exe /c format c:, то это уже серьёзный повод для беспокойства, бро.
    • Пример:
; Strings window (Shift+F12)
; Address    Type    Length    String
; ---------------------------------------------
; 00405000   ASCII   12        "Hello, World!"
; 00405012   ASCII   18        "Error: Invalid License"
; 0040502A   ASCII   25        "C:\Users\Public\backdoor.exe"
; 00405043   ASCII   20        "http://evil-c2.com/payload"
; ...

• Щелкни по строке, и IDA прыгнет в место, где она используется в коде. Это твой телепорт.
3. Imports window (Shift+F9): Что бинарник умеет делать
• Это список ‘чужих’ функций, которые бинарник тянет из DLL-библиотек системы. kernel32.dll, user32.dll, ws2_32.dll – это классика. Если бинарник импортирует CreateRemoteThread, WriteProcessMemory, VirtualAllocEx (из kernel32.dll), то он, скорее всего, инжектит код. Если socket, connect, send (из ws2_32.dll), то он, мать его, общается по сети.
• Глубокий взгляд: Поищи подозрительные импорты. Например, из advapi32.dll функции для работы с реестром (RegOpenKeyEx, RegSetValueEx). Из wininet.dllInternetOpen, HttpSendRequest. Чем экзотичнее или ‘мощнее’ импорты, тем больше шансов, что бинарник делает что-то интересное.
• Пример:

; Imports window (Shift+F9)
; Library      Function
; ------------------------------------
; kernel32.dll  CreateFileA
; kernel32.dll  WriteFile
; kernel32.dll  CreateProcessA
; ws2_32.dll    socket
; ws2_32.dll    connect
; ws2_32.dll    send
; user32.dll    MessageBoxA
; ...
4.  Exports window (Ctrl+E): Что бинарник предлагает другим
•   “Это, по сути, публичное API бинарника. Если это DLL, здесь будут функции, которые она ‘выставляет’ наружу для использования другими программами. Для EXE-шников это редко бывает интересно, если только это не какой-то хитрый упаковщик или плагин.
•   Глубокий взгляд: Смотри на имена. `InstallHook`, `StartMaliciousService` – ну ты понял, да?
•   Пример:
; Exports window (Ctrl+E)
; Ordinal  Address   Name
; ----------------------------------
; 1        00401000  MyExportedFunction
; 2        00401050  AnotherExport
; ...

Секции (Segments window): Расчленёнка бинарника
Каждый бинарник делится на секции, как на квартиры в доме. Секция .text – это код, .data – инициализированные данные, .rdata – только для чтения данные (строки часто здесь). .bss – неинициализированные данные. А вот если видишь секции с именами вроде .UPX0, .sanco или .rsrc с необычно большим размером, это может быть признаком упаковщика или обфускации.
• Инструменты: IDA сама их покажет. Или можно глянуть с помощью PE-bear.
Deep Dive: Пример с UPX
Помнишь, я говорил про упаковщики? UPX – это классика. Многие малвари им запакованы.
• Как увидеть: Открываешь бинарник в IDA. Если он запакован UPX, то ты увидишь секции типа .UPX0, .UPX1. В начале кода (где-то возле Entry Point) будет виден специфический код распаковщика, который распаковывает оригинальный код в память.
• Что искать: Часто это последовательность инструкций: pushad, потом какой-нибудь call или jmp, а потом popad и jmp на оригинальную точку входа. Задача этого кода – распаковать себя в память, а потом передать управление оригинальной программе.
• Трюк:
1. Запусти бинарник в отладчике (например, x64dbg).
2. Поставь брейкпоинт на pushad.
3. Прогони код до popad и jmp.
4. После popad ты обычно оказываешься на реальной точке входа распакованной программы. Дампни память, и получишь распакованный бинарник. Или используй специализированные анпакеры.
• Пример (псевдокод):

; IDA Pro view of UPX packed binary
.text:00401000  pushad                      ; Сохраняем регистры
.text:00401001  call    loc_401006          ; Переходим к распаковщику
.text:00401006  pop     ebp                 ; Получаем текущий EIP
; ... много кода распаковщика ...
.text:00401XXX  popad                       ; Восстанавливаем регистры
.text:00401YYY  jmp     loc_OriginalEntryPoint ; Прыгаем на реальную точку входа

• Вот loc_OriginalEntryPoint – это то, что тебе нужно! Если ты увидишь такой код, то знай – перед тобой упаковщик. А с упаковщиком мы разбираемся отдельными методами.


Заключение:


Ну вот, бро, ты только что совершил первое ‘свидание’ с IDA Pro. Да, это только верхушка айсберга, но ты уже знаешь, куда смотреть, чтобы не утонуть. Помни: Functions – это карта, Strings – сплетни, Imports – возможности, Segments – внутренности. И, конечно, всегда держи под рукой IDA Free или Demo, PE-bear для заголовков и x64dbg для динамического анализа. Практикуйся, и скоро ты будешь чувствовать себя в ассемблере как дома. И не забывай про кофе, его будет нужно много.

    Comments are closed