Частина 42 - Гакінг Бранчі!

Для повного змісту всіх уроків натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті.

Давайте розглянемо деяку логіку бранчування:

Як ми можемо побачити, ми ініціалізуємо змінну int до 1 і якщо змінна рівна 1, перший if-статмент друкує відповідь у стандартний вивід.

Давайте скомпілюємо:

Давайте запустимо:

Як ми можемо логічно побачити, перший бранч був взятий. Давайте візьмемо його до Радара і подивимося навколо на асемблер:

Ми бачимо логіку бранчування з синьо-зеленими стрілками. На 0x0000114a ми бачимо перший бранч, який завантажується в rdi. Зверніть увагу на 0x00001148 ми бачимо jne 0x1158. На 0x00001158 ми бачимо другий бранч, який завантажується в rdi.

jne означає стрибнути, якщо не рівно. Це означає, якщо порівнюваний елемент в 0x00001144 не рівний 1 (ми бачимо 1 порівнюється з тим, що знаходиться в local_4h який ми знаємо, що є псевдокодом для того, що насправді знаходиться в rbp-0x4. Це повинно бути зрозуміло, оскільки я детально розглянув це останній тиждень, якщо ви заплуталися, будь ласка, відвідайте наш останній урок.

Аби гакнути, ми просто змінюємо jne на je який означає стрибнути, якщо рівно, яке ми знаємо, що порівняння cmp рівне, тому воно тепер буде стрибнути до "A не рівно 1!".

Давайте вийдемо з Радара і побачимо, що ми успішно гакнули бінарник:

Залишайтесь на связи!

results matching ""

    No results matching ""