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 ↗