HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости > Веб-уязвимости
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 27.07.2025, 21:16
Сергей Попов
Новичок
Регистрация: 14.08.2015
Сообщений: 0
С нами: 5656404

Репутация: 0
По умолчанию



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

Но знаешь, что часто приходит вместе с этим интересом? Страх. Гремучая смесь из ассемблера, отладчиков, гексов... Кажется, будто это удел избранных. Гениев из АНБ или тех самых парней, что рвут CTF-турниры.

Содержание:
  • Фундамент реверсера: Выбираем правильный молоток, чтобы не наломать дров
  • Практика: От статического анализа в Ghidra до дерзкого патчинга в x64dbg
  • От практики к мастерству: Патчинг исполняемого файла и твой путь дальше
  • Готов ответить на твои вопросы? Поехали!
  • Призыв к дискуссии: Слово за тобой, бро!
Так вот, это полный бред. Это миф. И сегодня мы разорвем его в клочья. Вместе. Ты увидишь, как просто начать. И поверь, после этой статьи твой взгляд на IT изменится навсегда.

Мы не будем долго тянуть кота за хвост. Сразу к делу: многие новички путают три ключевых понятия. Понимание разницы между ними — твой первый шаг к реальному профессионализму. Готов? Поехали!
Фундамент реверсера: Выбираем правильный молоток, чтобы не наломать дров
Давай разберемся в терминах. Это важно.
Реверс-инжиниринг (Reverse Engineering, RE)
Это не просто про «ломать». Это целая философия, широчайшая дисциплина. По сути, ты исследуешь готовый продукт — будь то софт или железка — чтобы понять, как он работает. Зачем? Цели могут быть абсолютно легальными и даже созидательными.
  • Совместимость? Без проблем! Нужно написать драйвер для древнего сканера под новенькую ОС? Анализируешь оригинальный, и вуаля.
  • Анализ конкурентов. Понять, какой алгоритм применил твой конкурент? Да, это RE. Конечно, всегда в рамках закона.
  • Поиск уязвимостей (Vulnerability Research). Найти дыры в программе? Сообщить разрабам? Сделать мир безопаснее? Это твоя работа.
  • Импортозамещение на максималках. В нынешних реалиях это критически важный навык. Изучить зарубежные прошивки, понять чипы, адаптировать их — это чистое RE.
Крэкинг (Cracking)
А вот это уже тот самый «темный» уголок RE. Частный случай. Цель тут одна — обойти защитные механизмы. Снять лицензию, убрать триальный период, вытащить ключ из самого кода. Да, с точки зрения закона это почти всегда нелегально. Но знаешь что? С технической точки зрения, задачи, которые решают крэкеры (патчинг
Код:
JNE
на
Код:
JMP
, поиск алгоритмов генерации ключей) — это просто эталонные упражнения для оттачивания навыков. Именно поэтому мы начинаем с CrackMe — это легальные программы, созданные специально для твоих тренировок. Чистый кайф и никакой тюрьмы!
Анализ вредоносного ПО (Malware Analysis)
Еще один крайне востребованный и высокооплачиваемый частный случай RE. Здесь ты вступаешь в схватку с вирусами, троянами, шифровальщиками. Твоя миссия? Понять, что делает зловред, как он распространяется, как его обезвредить. А еще — как написать индикаторы компрометации (IoC) для защитных систем. Это один из топовых скиллов в кибербезе. А еще, если тебя интересуют другие грани кибербезопасности, например, практический фишинг, погрузись в наш детальный гайд по Evilginx и Gophish с обходом 2FA.

Видишь? Реверс-инжиниринг — это не про пиратство и уголовку. Это мощнейший инструмент. Он в руках ИБ-специалиста, разработчика и даже системного инженера. Изучая его, ты не просто учишься "ломать". Ты начинаешь понимать, как программы работают на самом низком, фундаментальном уровне. Это меняет твой взгляд на IT. Раз и навсегда.
Практика: От статического анализа в Ghidra до дерзкого патчинга в x64dbg
Теория — это хорошо. Но реверс — это, мать его, ремесло. Пора запачкать руки. Наша цель проста и понятна: берем простейший CrackMe и обходим в нем проверку пароля.
Примерчик можно будет забрать по ссылке [здесь могла бы быть ссылка на файл].

Шаг 1: Статический анализ в Ghidra. Выкапываем логику.

Никогда, слышишь, НИКОГДА не запускай незнакомый исполняемый файл сразу. Сначала — статика. Наш выбор — Ghidra. Забудь миф, что это сложно. Это твой швейцарский нож. Скачать актуальную версию Ghidra можно прямо на GitHub.
  • Создаем проект. Запускай Ghidra, создавай новый проект. Импортируй наш
    Код:
    crackme.exe
    .
  • Автоанализ. Ghidra спросит, нужен ли автоматический анализ. Жми "Да" и соглашайся со всеми опциями по умолчанию. Пара минут, и готово.
  • Ищем
    Код:
    main
    .
    После анализа слева, в окне "Symbol Tree", ищи функцию
    Код:
    main
    . Это та самая точка входа. Двойной клик!
  • Декомпилятор — твой лучший друг. Справа ты увидишь два окна: "Listing" с ассемблером (пока не паникуй!) и "Decompiler" с псевдокодом на C. Последнее — это твое главное оружие. Это чит-код.
Псевдокод будет выглядеть примерно так:

C:


Код:
void
main
(
void
)
{
char
input_buffer
[
100
]
;
puts
(
"Enter password:"
)
;
gets
(
input_buffer
)
;
int
result
=
strcmp
(
input_buffer
,
"SecretPassword123"
)
;
if
(
result
==
0
)
{
puts
(
"Access Granted!"
)
;
}
else
{
puts
(
"Access Denied!"
)
;
}
return
;
}
Бинго! Даже если ты в ассемблере пока ноль, тут все очевидно. Программа просит ввод, сравнивает его с хардкодной строкой
Код:
"SecretPassword123"
через
Код:
strcmp
. А дальше — ветвление: "Access Granted" или "Access Denied".

Что мы только что сделали? Мы провели статический анализ. И получили два инсайта, которые решают 90% задачи:
  • Пароль виден невооруженным глазом:
    Код:
    "SecretPassword123"
    . Ты можешь просто ввести его и получить доступ. Но это неспортивно, да?
  • Решение о доступе? Условный переход.
    Код:
    strcmp
    возвращает 0 при совпадении. Дальше идет проверка результата и тот самый "прыжок".
Шаг 2: Динамический анализ в x64dbg. Патчим на лету.

Теперь наша цель — заставить программу всегда идти по "хорошей" ветке, даже если мы введем самый кривой пароль. Для этого нам нужен отладчик. Встречай — x64dbg. Если что, официальная документация поможет освоить его по полной.
  • Загружаем в x64dbg. Открываем наш
    Код:
    crackme.exe
    . Программа остановится прямо на точке входа.
  • Ищем сравнение. Нам нужно то самое место, где происходит сравнение. В Ghidra мы видели
    Код:
    strcmp
    . В x64dbg иди на вкладку "Символы" и найди адрес функции
    Код:
    main
    . Переходи туда.
  • Находим
    Код:
    strcmp
    .
    Ты увидишь тот самый ассемблерный код. Пролистай его. Ищи вызов
    Код:
    call
    . А сразу после него — инструкцию
    Код:
    TEST EAX, EAX
    или
    Код:
    CMP EAX, 0
    . Она проверяет результат
    Код:
    strcmp
    (который, к слову, всегда лежит в регистре
    Код:
    EAX
    ).
  • Ключевой прыжок. А вот следом — самое вкусное: условный переход. Скорее всего, это
    Код:
    JE
    (Jump if Equal) или
    Код:
    JNE
    (Jump if Not Equal). Пример:

Код:


Код:
call
test eax, eax
jne short loc_bad_password  ; Прыгаем, если не равно (пароль неверный)
; Код для "Access Granted"
loc_bad_password:
; Код для "Access Denied"
  • Ломаем логику. Ставь на
    Код:
    jne
    точку останова (F2). Запускай (F9). Вводи что угодно, "123" например.
  • Патчим! Программа остановится. И вот она, твоя
    Код:
    jne
    . Она собирается отправить тебя на "плохую" ветку. Но ты можешь это изменить! Прямо в отладчике, двойной клик по
    Код:
    jne
    . Меняй ее на
    Код:
    je
    (прыгнуть, если равно) или, еще проще, на
    Код:
    jmp
    (безусловный переход) на "хорошую" ветку. Или самый простой, но элегантный способ — "занопить" её, заменить на инструкцию
    Код:
    NOP
    (No Operation). Она просто ничего не делает.
  • Продолжаем. Жми F9. И… видишь заветное "Access Granted!".
Ты только что в реальном времени изменил логику работы программы. Это и есть, черт возьми, чистая суть реверса.
От практики к мастерству: Патчинг исполняемого файла и твой путь дальше
Изменение логики в отладчике — круто. Но оно работает до перезапуска. Чтобы твой "взлом" стал постоянным, нужно внести изменения прямо в исполняемый файл. Этот процесс называется патчингом. Патчинг файла: Делаем наш "хак" вечным Возвращаемся в x64dbg. Мы нашли нашу инструкцию
Код:
jne short loc_bad_password
. Допустим, она по адресу
Код:
0x401550
. Мы можем пойти дальше, чем просто ее затирать. Мы инвертируем логику!
Код:
JNE
(Jump if Not Equal) имеет опкод
Код:
75
. А
Код:
JE
(Jump if Equal) —
Код:
74
. Всего один байт!
  • Идентифицируем байты. В x64dbg выдели строку с
    Код:
    jne
    . В нижней части окна (в дампе) ты увидишь байты этой инструкции. Например,
    Код:
    75 0E
    .
  • Адрес в студию. Жми Ctrl+G и вводи адрес инструкции (например,
    Код:
    401550
    ).
  • Редактируем! Правой кнопкой мыши по инструкции -> "Двоичные" -> "Редактировать". Меняй байт
    Код:
    75
    на
    Код:
    74
    .
  • Что теперь? Наша
    Код:
    jne
    превратилась в
    Код:
    je
    . Это значит, что программа теперь будет переходить на "плохую" ветку, только если ты введешь... правильный пароль! А при любом неверном вводе будет выдавать "Access Granted". Читерство? Да. Элегантно? Абсолютно.
  • Сохраняем. Иди в "Файл" -> "Патчить файл". Сохраняй как
    Код:
    crackme_patched.exe
    .
Поздравляю! Ты только что создал свою первую пропатченную программу. Ты прошел полный цикл: статический анализ (понимание), динамический анализ (проверка гипотезы) и патчинг (закрепление результата). Это реальный скилл.

Куда двигаться дальше? Твой личный план обучения на 3 месяца.

Ты почувствовал вкус победы. Теперь главное — не распыляться. Вот тебе конкретный план действий:
Месяц 1: Фундамент и инструменты. Уверенно решаем простые CrackMe.
1. Иди на crackmes.one. Фильтруй: самые легкие, Windows, x86/x64. Скачивай 5-10 штук. Твоя цель — пройти их все.
  1. Параллельно — основы ассемблера x86. Не надо зубрить все. Твоя цель — читать. Понимать
    Код:
    mov
    ,
    Код:
    lea
    ,
    Код:
    add
    /
    Код:
    sub
    ,
    Код:
    cmp
    ,
    Код:
    test
    ,
    Код:
    jmp
    /
    Код:
    je
    /
    Код:
    jne
    /
    Код:
    jg
    /
    Код:
    jl
    , работу со стеком (
    Код:
    push
    /
    Код:
    pop
    ,
    Код:
    call
    /
    Код:
    ret
    ). OAL (Open Assembly Language book) — отличный старт.
  2. Продолжай пахать в Ghidra и x64dbg. Научись ставить брейкпоинты не только на адрес, но и на функции API (например,
    Код:
    MessageBoxW
    или
    Код:
    GetWindowTextW
    ).
Месяц 2: Усложнение задач. Работаем с простыми алгоритмами.
1. Ищи на crackmes.one задачи, где ключ не лежит в открытом виде, а генерируется. XOR-шифрование, сложение байтов имени, простые математические трюки.
  1. Изучи, как в Ghidra выглядят циклы (
    Код:
    for
    ,
    Код:
    while
    ) и структуры данных (массивы, строки) в ассемблере. Декомпилятор будет кричать тебе подсказки.
  2. Начни писать простые скрипты для Ghidra (Java или Python/Jython). Например, скрипт, который автоматом находит все перекрестные ссылки на функцию
    Код:
    strcmp
    . Автоматизация — сила!
Месяц 3: Переход к реальным задачам. Применяем навыки.
1. Возьми старый, простенький кейген-ми или несложный упаковщик. UPX — отличный первый кандидат для ручной распаковки.
Цитата:

Найди на MalwareBazaar или any.run образцы простых зловредов (стиллеры, лоадеры). ЭТО КРАЙНЕ ВАЖНО: ДЕЛАЙ ЭТО ТОЛЬКО НА ИЗОЛИРОВАННОЙ ВИРТУАЛЬНОЙ МАШИНЕ! Попробуй найти в них C2-адрес, алгоритм шифрования строк или проверку на запуск в ВМ.
Через три месяца такой сфокусированной, целевой практики ты не просто перестанешь бояться ассемблера. Ты будешь готов к решению реальных рабочих задач. Удачи! И, кстати, если готов к более структурированному подходу, на античат есть полноценный курс по введению в реверс-инжиниринг.
Готов ответить на твои вопросы? Поехали!
Сложно ли выучить ассемблер x86 для реверс-инжиниринга? С чего начать?
Не так страшен чёрт, как его малюют. Тебе не нужно писать на ассемблере программы. Тебе нужно его ЧИТАТЬ. Начни с 15-20 ключевых инструкций:
Код:
mov
,
Код:
cmp
,
Код:
jmp
(и его вариации),
Код:
call
,
Код:
ret
,
Код:
push
,
Код:
pop
. Интерактивные туториалы или "Практический реверс-инжиниринг" Ефима Брусиловского — прекрасный старт. Цель — не запомнить все, а понимать базовую логику потока данных и управления. А для общего погружения, загляни в наш тред по реверс-инжинирингу для новичков.

Как эффективно использовать Ghidra и IDA Free вместе для комплексного анализа?
Это уже профессиональный уровень, и подход очень крутой. Используй их сильные стороны. Ghidra — твой основной инструмент для статики, ее бесплатный декомпилятор — просто зверь. Прогоняй бинарник через нее первой. IDA Free/Home — для визуализации. Ее графовый режим отображения функций до сих пор один из лучших для понимания сложной логики и ветвлений. Плюс, у IDA лучше работает система сигнатур (FLIRT) для распознавания стандартных библиотечных функций. Рабочий процесс: первичный анализ и декомпиляция в Ghidra, а сложный или запутанный участок — смотри в графе IDA.

Реверс-инжиниринг — это вообще законно?
Как мы уже обсудили, зависит от цели и юрисдикции. Исследование для совместимости, поиск уязвимостей (с ответственным раскрытием) — в большинстве стран это легально. Взлом ПО для обхода лицензии — нет, это незаконно. А вот анализ вредоносного ПО — абсолютно легальная, этичная и очень востребованная деятельность. Всегда, слышишь, всегда читай лицензионное соглашение (EULA) программы, которую собрался анализировать. А для обучения — только CrackMe или легально полученные образцы ВПО в изолированной среде.

Что делать, если в программе нет символов и функции
Код:
main
?

Это стандарт. Для реальных (release) программ символов не будет. В этом случае ищи точку входа (в Ghidra это функция
Код:
entry
). От нее иди по вызовам (
Код:
call
) и постепенно восстанавливай логику. Ищи "зацепки": вызовы WinAPI функций, которые работают со строками (
Код:
lstrcmp
,
Код:
wsprintf
), окнами (
Код:
CreateWindowEx
,
Код:
GetDlgItemText
) или файлами (
Код:
CreateFile
). По этим "зацепкам" ты вытянешь всю нить работы программы.
Слово за тобой!
Этот гайд — лишь вершина айсберга, твоя точка входа в мир RE. Но настоящее мастерство рождается не в одиночку. Оно рождается в практике и, что еще важнее, — в обмене опытом. Теперь слово за тобой.

Я намеренно выбрал связку Ghidra + x64dbg как оптимальную для старта. Но я знаю, что в нашем сообществе много адептов IDA, Radare2 или даже WinDbg. Коллеги, какой ваш любимый стек инструментов и почему? Какие у него есть неочевидные преимущества или недостатки для новичка? Расскажи!

А теперь, самое интересное: расскажи в комментариях о своем первом взломанном CrackMe. С какими трудностями ты столкнулся? Может, это был хитрый анти-отладочный прием? Или какой-то нестандартный алгоритм проверки? Твой опыт может сэкономить десятки часов кому-то, кто только-только начинает свой путь в реверс-инжиниринге с нуля.

И для тех, кто уже прошел этот этап: какие техники обфускации или анти-анализа сейчас доставляют больше всего головной боли? Давайте обсудим современные вызовы: от виртуализации кода в Themida до анализа многоэтапных загрузчиков на .NET.

Этот тред — наш шанс создать коллективную базу знаний. Делись советами, задавай вопросы, спорь. Только так мы растем как специалисты. Вперед!
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.