Статьи - Дослідження програм - Дзенський реверсинг дослідження програм у польових умовах

Assembler Мова Асемблера Статті Низькорівневе програмування для сучасних Уроки Крекінг DirectX/OpenGL &nbsp Оптимізація &nbsp Компілятори & nbsp Вірусологія &nbsp Мережа &nbsp Процесори &nbsp Дослідження програм Інструментарій Вихідники

Запровадження

Сам собі PE Sniffer

Натискаємо двічі Enter і дивимося на зрозуміліший дизассембльований код. Щоб він став ще зрозумілішим - натиснемо F8 і F5 - hiew перейде на ту ділянку коду, яка прописана в оригінальній точці входу. Уважно поглянувши на цей код, вже можна зрозуміти на чому він написаний. Наприклад для Delphi програм код буде подібний до цього:

Не впізнати його не можна. просто кілька Call викликів, стандартних у Delphi програмах. Якщо знову перейти в текстовий режим і натиснути і потримати PgUp вгорі побачимо назви секцій. Ось приблизний розклад для недоторканих програм Delphi програм:

  • CODE
  • DATA
  • BSS
  • idata
  • tls
  • rdata
  • .reloc
  • .rsrc

Отже, з дельфями визначилися, тепер поговоримо про C++ Builder. Тут взагалі все простіше. На оригінальній точці входу завжди такий код:

Байти розташовані між jmp'ом і mov'ом: "C++HOOK". Теж все просто :) Що ж щодо бейсику? А у нього завжди 2 команди на EP:

реверсинг
Початок структури, що описує будь-яку VB програму

Як видно з попередніх кількох прикладів - не так уже й потрібний PEiD для визначення компілятора. А що ж про пакувальники? А тут можна навіть не дивитися на точку входу:) Достатньо в текстовому вигляді подивитися на EXE заголовок. UPX після упаковки на початок першої секції поміщає свою структуру, що починається з сигнатури "UPX!", а секції обзиває ".UPX0",".UPX1", ".rsrc", причому секцій три незалежно від того скільки їх було до упаковки.

Якщо ж подивитися на точку входу, код відкриється досить стандартний для всіх версій UPX'а:

реверсинг
UPack тисне програму так, що від заголовка залишається тільки MZ, після якого йде імпорт. Шкода, що антивіруси не поділяють цю ідею оптимізації.

Все просто, тільки hiew :) До речі, є методика легко відрізняти MS компілятори від борландових за присутністю "Rich" рядки після DOS Header'а. Хоча про патчу MS лінкера не раз говорилося на даному сайті - як і раніше, більшість використовує непропатчений варіант навіть і не підозрюючи про те, що ж лінкер вставляє в EXE файл.

Загалом, якщо пам'ятати всі ці методики плюс мати неслабкий досвід - можна визначити будь-який компілятор або пакер у hiew'і, це приходить згодом, тому починай зараз!

Стринг референси

Серфінг за EXE

Ассемблуємо

статьи
Пишемо програму як справжні асемблерщики, без будь-яких середовищ програмування.

Декриптуємо XOR

Шифруємо за формулою

Як би не сильний був XOR, він не завжди підходить для шифрування/дешифрування. Але сумувати сенсу немає, тому що його дозволяє задавати алгоритм шифрування самому. Для цього натисніть F3, щоб перейти в режим редагування, а потім F7. Відкриється діалог набору коду. Забиваємо туди алгоритм криптування і потім юзаєм. Як писати криптоалгоритм пояснено в довідці - я не переписуватиму її в статті, так як її ти можеш прочитати і так, скажу тільки що нічого складного там немає - розібратися можна.

Реальний приклад

дзенський
Нескладний кейгенмі, який нам належить вивчити.

Все вищеописане матиме сенс тільки, якщо це застосувати на реальному прикладі, асаме, нам необхідно щось зламати. Ламати будемо, використовуючи лише HIEW. А для більшої простоти та наочності візьмемо KeygenMe by Fabsys. Стягнути його можна із crackmes.de. Почнемо досліджувати. Відкриваємо keygen.exe у hiew. Що ми бачимо?

тисни F3 і набирай. У мене вийшло таке:

Перспективи розвитку hiew