Частина 16 - Дебагування примітивного типу даних Float

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

Сьогодні ми будемо дебагувати свій дуже простий примітивний тип даних Float.

Для початку відкрийте нашу бінарну у Radare2.

radare2./0x05_asm64_float_primitive_datatype

Давайте використаємо Radare2 функцію автоматичної аналізу.

aaa

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

ood

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

s main

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

v

При роботі з дробними числами ARM64 необхідно розуміти, що ми повинні знайти місце, де відбувається інструкція fmov, де ми беремо значення з нашого регістра w0 і переміщаємо його в регістр дробових чисел s0. Тут відбувається справжня магія!

Давайте встановимо зупинку в місці, розташованому прямо нижче інструкції fmov. Пам'ятайте, що адреси ASLR будуть відрізнятися від цього прикладу.

[0x557931c9b4]> db 0x557931c9c8
[0x557931c9b4]> dc
[0x557931c9b4]> hit breakpoint at: 0x557931c9c8
[0x557931c9c8]> ds
[0x557931c9c8]> dr w0 0x4121999a
[0x557931c9c8]>

Також ми бачимо цю дивну вартість, яка, якщо переглянути код нижче, інструкція lsl (логічний зміщення вліво) переміщає порядок байтів, який ми використовуємо інструкції movz і movk, які movz перемістить 0x999a в регістр w0 і потім movk перемістить 0x4121, lsl 16 в регістр w0, тому 4121 знаходиться в більш високій порядку байтів місцях, а 999a знаходиться в нижній порядку байтів місцях.

movz w0, 0x999a
movk w0, 0x4121, lsl 16
fmov s0, w0

Ми переміщаємо регістр w0 в регістр s0, тому ми повинні змінити ці значення тут, перш ніж дозволити йому потрапити в регістр s0, інакше це буде значно важче підмінити значення в наступному урокі.

Давайте продовжимо показувати нашу вартість.

[0x557931c9c8]> dc
10.1
(237691) Process exited with status=0x0
[0x7fb948407c]>

У наступному урокі ми підмінимо цю вартість!

Примітка: XMDX - це спеціальний код, який використовується для позначення окремих частин тексту!

results matching ""

    No results matching ""