Розділ 12: Інструкційний вказівник реєстру

Для повного змісту змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті. https://github.com/mytechnotalent/Reverse-Engineering-Tutorial

Інструкційний вказівник реєстру, який називається реєстром EIP, просто є найважливішим реєстром, з яким ви працюватимете під час будь-якої реверс-інженерії. EIP зберігає адресу наступного інструкційного коду для виконання. EIP вказує на наступну інструкцію для виконання. Якщо ви зміните цей вказівник, щоб стрибнути в іншу область коду, ви отримаєте повний контроль над цим ПЗ. Давайте поглянемо вперед і глибше виведемо деякий код. Нижче наведено приклад простої програмки "Привіт, світ!" на мові C, яку ми пізніше детальніше розглянемо в нашій навчальній серії. Для наших цілей сьогодні ми побачимо безпосередньо потужність мови асемблера та особливо реєстру EIP та те, чого можна досягти, щоб повністю захопити контроль програми.

Не хвилюйтеся, якщо ви не розумієте, що воно робить, або її функціональність. Що потрібно відзначити тут, це те, що ми маємо функцію, яка називається unreachableFunction, яка ніколи не викликається головною функцією. Як ви побачите, якщо ми зможемо контролювати реєстр EIP, ми зможемо захопити цей програмний код для виконання цієї функції!

Ми просто скомпілювали код для роботи з набором інструкцій IA32 і запустили його. Як бачите, немає жодного виклику unreachableFunction__, оскільки він недосяжний за звичайних умов, як ви можете бачити з виведеного при виконанні тексту «Hello World!`».

Ми розібрали програму за допомогою GDB налагоджувача. Ми встановили точку зупинки в головній функції і запустили програму.

Якщо ми запустимо програму знову і зробимо поглянемо, куди вказує EIP, ми побачимо:

Бачимо, що EIP вказує на main+17 або адресу 0x680cec83. Давайте розглянемо unreachableFunction і побачимо, де вона починається в пам'яті і запишемо цю адресу.

Наступний крок — встановити EIP на адресу 0x0804843b, щоб захопити програмний потік і виконати unreachableFunction.

Тепер, коли ми отримали контроль над EIP, давайте продовжимо і подивимося, як ми перехопили управління запущеною програмою на свою користь!

Тада! Ми захопили програму!

Тож у вас може виникати питання: чому ви показали мені це, якщо я не маю ніякого уявлення, ще це таке? Важливо розуміти, що коли ми проходимо такий тривалий посібник, як цей, іноді варто заздалегідь подивитися, чому ми робимо стільки кроків, щоб вивчити основи, перш ніж зануритися в тему. Однак важливо показати вам, що якщо ви продовжите навчатися за цим підручником, ваші зусилля окупляться, оскільки ми навчимося перехоплювати будь-яку запущену програму, щоб змусити її робити все, що ми хочемо, а також проактивно розбивати шкідливі програми, щоб не тільки вимкнути їх, але й відстежити потенційний IP-адресу, звідки походить злом.

У наступному підручнику ми продовжимо обговорення архітектури IA-32 з реєстрами керування.

results matching ""

    No results matching ""