CJK Workbench
Рабочие процессы

Практический реверс-инжиниринг, функция за функцией

03
Сценарий

Как начать практический реверс-инжиниринг

Выберите одну небольшую функцию из программы на C, которую вы скомпилировали сами, и изучите её от первой инструкции до завершающего return. Законы и условия лицензий различаются в зависимости от страны, поэтому используйте только собственный код или учебные файлы. Ниже четыре шага.

01

Откройте папку проекта

Выберите рабочую папку, где лежат ваш исходный код на C, копия скомпилированного файла и, позже, экспортированный листинг.

02

Экспортируйте текстовый листинг

Пусть Shell запустит команду экспорта вашего дизассемблера на копии, или сохраните листинг сами, чтобы результатом был текстовый файл.

03

Попросите объяснение

Попросите агента прочитать листинг и объяснить функцию строка за строкой, затем сохраните заметки через write_file.

04

Проверьте ответ

Сравните заметки со своим исходным кодом и листингом, прочитайте diff в Ask first и проверьте результат в лаборатории, если это законно.

Учебный листинг для чтения

add_numbers.asm
; add_numbers.asm - teaching listing, x64 Windows
; Returns the sum of its first two integer arguments.
; Argument 1 arrives in ecx (low half of rcx).
; Argument 2 arrives in edx (low half of rdx).
add_numbers:
    mov eax, ecx    ; copy argument 1 into eax
    add eax, edx    ; add argument 2, the sum stays in eax
    ret             ; return to the caller, result in eax

Эта функция складывает два целых числа. По соглашению Windows x64 аргументы приходят в ecx и edx, сумма формируется в eax, а ret возвращает управление вызывающему коду.

Два упражнения для занятия по реверс-инжинирингу

Начните с функции, которую вы написали сами

Частый вопрос новичков — как начать с ассемблера, и ответ — с функции, которую вы написали сами. Напишите короткую функцию на C, скомпилируйте её и экспортируйте листинг как текст. read_file открывает листинг, а агент объясняет каждую инструкцию: какой регистр хранит какой аргумент, что делает стек и куда возвращается результат. write_file сохраняет эти объяснения в notes/begin.md. В Plan only агент сначала перечисляет эти шаги. Пока ничего не запускается. Затем переключитесь на Ask first и читайте diff перед каждым сохранением. В конце сравните заметки со своим кодом и, если это законно, проверьте скомпилированную функцию в лаборатории.

Задокументируйте функции собственной библиотеки

Хорошее упражнение по реверс-инжинирингу API — перечислить функции, которые открывает ваша собственная библиотека, и записать, что делает каждый аргумент. Сохраните как текст список импортируемых и экспортируемых функций из вашего собственного инструмента, затем агент с помощью grep найдёт каждый вызов одной функции, а через read_file откроет строки вокруг него. Он составит таблицу в notes/api.md, а edit_file покажет каждое изменение как diff. Начните с одной функции. Тот же метод помогает восстановить, как работал ваш собственный старый код. Агент может ошибиться в типе или назначении, поэтому перед принятием сравните каждую строку со своим исходным кодом и собственным тестом.

CJK Workbench для Windows

Разберите собственный пример

Скачать CJK Workbench ↗