Частина 17 - Хакінг примітивної типової даних типу float

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

Сьогодні ми хакуємо float з попереднього уроку.

Спочатку оновіть наш radare2 джерельний код.

cd radare2
git pull
sys/user.sh

Якщо ви раніше не дотримувалися інструкцій, необхідно побудувати radare2 з джерела, оскільки вони рідко оновлюють випуски.

https://github.com/radareorg/radare2

Якщо ви не маєте репозиторію, клоніруйте його і дотримуйтесь інструкцій вище.

Давайте запустимо radare2 у режимі запису.

radare2 -w./0x05_asm64_float_primitive_datatype

Давайте зробимо аналіз автоматично.

aaa

Перейдіть до головної частини.

s main

Перегляньте розборку.

v

Давайте повернемося до термінального перегляду.

q

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

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

Пам'ятайте з попереднього тижня, що в кінцевому підсумку w0 буде зберігати 0x4121999a як lsl переміщає біти в зворотньому порядку байтів.

Зараз це буде давати float 10.1 як ми бачили раніше в попередніх уроках. Важливо розуміти, що в чиселах з плаваючою комою є мантисса яка в нашому випадку 10 і висота яка 1 до якої вони розділені._ яка поєднує їх разом.

Отже, щоб отримати 10.2 нам потрібно буде написати збірку і оновити ці інструкції.

[0x000009b4]> wa movz w0, 0x3333 @0x000009bc
[0x000009b4]> wa movk w0, 0x4123, lsl 16 @0x000009c0
q

Тепер запустіть бінарник!

kali@kali:~/Documents/0x05_float_primitive_datatype$./0x05_float_primitive_datatype
10.2

Я бажаю, щоб ви взяли близько на погляд деякі приклади, які я створив для вас, щоб ви могли зрозуміти, як різні значення призводять до різних результатів. Увага! Результати будуть різними, оскільки ці результати будуть активним сесією відлагодження, тому адреси будуть різними, тому ваш ASLR буде мати різні значення.

[0x555e6c29c4]> dr w0 = 0x4122999a 0x4121999a ->0x4122999a
[0x555e6c29c4]> dc
hit breakpoint at: 0x555e6c29c8
[0x555e6c29c8]> dc
10.1625
(238252) Process exited with status=0x0

[0x556215e9c4]> dr w0 = 0x41235555 0x4121999a ->0x41235555
[0x556215e9c4]> dc
hit breakpoint at: 0x556215e9c8
[0x556215e9c8]> dc
10.2083
(238258) Process exited with status=0x0

[0x558216c9c4]> dr w0 = 0x4123599a 0x4121999a ->0x4123599a
[0x558216c9c4]> dc
hit breakpoint at: 0x558216c9c8
[0x558216c9c8]> dc
10.2094
(238257) Process exited with status=0x0

[0x55868a79c4]> dr w0 = 0x4123999a 0x4121999a ->0x4123999a
[0x55868a79c4]> dc
hit breakpoint at: 0x55868a79c8
[0x55868a79c8]> dc
10.225
(238253) Process exited with status=0x0

[0x55826479c4]> dr w0 = 0x41233333 0x4121999a ->0x41233333
[0x55826479c4]> dc
hit breakpoint at: 0x55826479c8
[0x55826479c8]> dc
10.2
(238259) Process exited with status=0x0

[0x55716ab9c4]> dr w0 = 0x4125999a 0x4121999a ->0x4125999a
[0x55716ab9c4]> dc
hit breakpoint at: 0x55716ab9c8
[0x55716ab9c8]> dc
10.35
(238250) Process exited with status=0x0

[0x55880169c4]> dr w0 = 0x412f999f 0x4121999a ->0x412f999f
[0x55880169c4]> dc
hit breakpoint at: 0x55880169c8
[0x55880169c8]> dc
10.975
(238245) Process exited with status=0x0

[0x559130d9c4]> dr w0 = 0x412ff99e 0x4121999a ->0x412ff99e
[0x559130d9c4]> dc
hit breakpoint at: 0x559130d9c8
[0x559130d9c8]> dc
10.9984
(238246) Process exited with status=0x0

[0x557b1b39c4]> dr w0 = 0x412fff9e 0x4121999a ->0x412fff9e
[0x557b1b39c4]> dc
hit breakpoint at: 0x557b1b39c8
[0x557b1b39c8]> dc
10.9999
(238247) Process exited with status=0x0

[0x55931439c4]> dr w0 = 0x412ffffe 0x4121999a ->0x412ffffe
[0x55931439c4]> dc
hit breakpoint at: 0x55931439c8
[0x55931439c8]> dc
11
(238248) Process exited with status=0x0

Ви починаєте бачити шаблони тут. ВИДЕЛІТЬСЯ ПОВІДОМЛЕННЯ ІСТИННО ВИПРОБУВАТИ ЦІ ВИРОБИТИ, щоб краще зрозуміти, як ці значення в кінцевому підсумку потрапляють в регістр s0!

У наступному уроці ми обговоримо подвійні числа.

results matching ""

    No results matching ""