Что такое обратный инжиниринг?
Это процесс понимания того, как работает программа через анализ самого приложения. Цель — разобраться в компоненте настолько хорошо, чтобы его объяснить, изменить или пересоздать.
Рассмотрим простой вопрос: почему Windows Calculator при вводе 200 + 10% выдаёт 220?
Традиционный способ — разбираться самостоятельно
Оригинальный x64-код · выбранные инструкции
0x180124945: MOV EAX, dword ptr [R13 + 0x18]
0x180124949: CMP EAX, 0x5c
0x18012494c: JZ 0x180124aba
0x180124952: CMP EAX, 0x5b
0x180124955: JZ 0x180124aba
0x18012495b: MOV EDX, 0x64
0x180124960: LEA RCX, [RSP + 0x160]
0x180124968: CALL 0x180122650
0x18012496e: LEA RDX, [R13 + 0x160]
0x180124975: LEA RCX, [RSP + 0x78]
0x18012497a: CALL 0x180109720
0x18012497f: MOV RSI, RAX
0x180124982: MOV qword ptr [RSP + 0x28], RAX
0x180124987: LEA RDX, [RSP + 0x160]
0x18012498f: MOV RCX, RAX
0x180124992: CALL 0x180123190
; … пропущены инструкции копирования значений …
0x180124a14: MOV RDX, RDI
0x180124a17: LEA RCX, [RSP + 0xf8]
0x180124a1f: CALL 0x180109720
0x180124a24: LEA R8, [RSP + 0x30]
0x180124a29: MOV RDX, RAX
0x180124a2c: LEA RCX, [RSP + 0xb8]
0x180124a34: CALL 0x180123c10
Нужно декодировать инструкции, отследить вызовы и восстановить вычисление вручную.
С REA — просто спросите агента
Один запрос.
Просто опишите задачу на обычном английском.
›Use REA to inspect Windows Calculator. Why does 200 + 10% give 220?
Пример ответа · на основе найденного
После нажатия на +, кнопка % берёт процент от первого числа.
10% от 200 = 20↓200 + 20 = 220
- REA предоставляет
- Инструкции обработчика, декомпилированный код и вызовы функций.
- Ваш агент объясняет
- Какая ветвь срабатывает, что она вычисляет и как это пересоздать.
Попробуем два примера
Попробуем два примера. Изменим скорость браузерной игры, потом вернёмся к Калькулятору и пересоздадим его кнопку процента.
Пример 01 · Динозавр в Chrome
Почему динозавр ускоряется?
- Цель
- Пересоздать игру с регулируемой скоростью.
- Почему реверс-инжиниринг?
- Чтобы воспроизвести ускорение, нужна логика работающей игры: с какой скоростью она начинается, на сколько растёт и когда останавливается.
REA вернул
Исходный скрипт, работающий на странице. Агент читает функцию обновления и параметры скорости, потом использует эту логику в новой игре.
›Use REA to inspect this dinosaur game. Why does it get faster? Show the speed rule, then build a small version with an adjustable speed.
if (this.currentSpeed < this.config.MAX_SPEED) {
this.currentSpeed += this.config.ACCELERATION;
}
Начинает со скоростью 6. Прибавляет 0.001 на каждом обновлении без столкновений, пока скорость ниже 13.
Анализ проведён на браузерной версии игры на основе Chromium.
Что делает каждая часть
- 01 · REAЧитает скрипт запущенной игрыВозвращает реальный код и параметры агенту.
- 02 · Ваш агентПересоздаёт логику, добавляет управлениеИспользует восстановленное ускорение в маленькой игре с регулятором скорости.
- 03 · ВыМеняете скорость и играетеПробуете оригинальное ускорение, потом выбираете свой темп.
Посмотреть скрипт, проверки и как попробовать анализ
REA проанализировал браузерную версию через локальное подключение отладчика и вернул загруженный index.js вместе с кодом и контрольной суммой.
ACCELERATION: 0.001,
MAX_SPEED: 13,
SPEED: 6
Вызвали функцию обновления оригинальной игры в контролируемой проверке браузера с отключёнными препятствиями и автоматическим расписанием. После 4000 обновлений скорость была 10.0; после 10000 — 13.0, округлено до одного знака.
Новая мини-игра сохраняет это правило скорости. Её код отрисовки, прыжков и столкновений — это маленькая учебная реализация. Откройте лабораторию, чтобы увидеть новый код и запустить ту же проверку скорости.
Чтобы проанализировать цель самостоятельно, следуйте шагам подключения браузера с использованием страницы динозавра. Дайте агенту URL страницы и локальный конец отладки, потом скопируйте запрос выше.
Проанализированный код скорости · Авторы Chromium · лицензия BSD
Пример 02 · Windows Calculator
Пересоздаём кнопку % Калькулятора
Разобрались, почему 200 + 10% даёт 220. Теперь восстановим правила для + и ×, и проверим их.
- Цель
- Собрать маленький калькулятор, который правильно обрабатывает и + и ×.
- Почему реверс-инжиниринг?
- Одна кнопка использует разные правила после + и ×. Проанализируем установленное приложение, чтобы понять, к какому числу применяется процент.
REA вернул
Одна ветвь делит на 100. Другая тоже умножает на первое число. Агент использует обе, чтобы пересоздать кнопку %.
В этом примере previous = 200 и current = 10.
›Use REA to inspect Windows Calculator's % button. Recover the rules after + and ×, then build a small calculator that uses both.
if (operation == multiply || operation == divide) {
percent = current / 100;
} else {
percent = current * previous / 100;
}
- После +
- Берём 10% от первого числа.
10% от 200 = 20 → 200 + 20 = 220 - После ×
- Превращаем 10% в 0.1.
200 × 0.1 = 20