Частина 11 - Процедури завантаження фірмового забезпечення

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

Давайте зупинимося на хвилину і розповімо про те, що відбувається, коли ми перше підключаємо нашу приставку Raspberry Pi. Відразу після того, як Pi отримує живлення, графічний процесор стає першим, який починає виконувати роботу, оскільки процесор знаходиться в стані перезавантаження, після чого GPU починає виконувати код. ROM читає з картки SD і читає bootcode.bin , який завантажується в пам'ять в C2 кеші і включає решту RAM, після чого start.elf завантажується. start.elf — це операційна система для графічного процесора і читає config.txt , який можна змінити. kernel.img потім завантажується в 0x8000 в пам'яті, яка є ядром Linux. Після завантаження kernel.img включає процесор і починає виконувати роботу в 0x8000 в пам'яті.

Якщо ми хочемо, ми могли б створити власне kernel.img і вкласти в нього машинний код file і замінити оригінальну картинку, після чого перезавантажити. Увага! Слово ARM має розмір 32 біта, які починаються з біта 0 і закінчуються на біта 31.

Як було сказано, коли kernel.img завантажується, перша байта, яка складається з 8 біта, завантажується в адресу 0x800. Давайте відкриємо редактор HEX і напишемо наступне:

FE FF FF EA

Зберегти file як kernel.img і перезавантажити. “Нічого не відбувається, це жахливо!”

Насправді щось відбулося, ви створили свій перший бідметалеве фірмове забезпечення! Час вийти з шампанського!

При завантаженні Pi виконує наступний код, коли він досяг kernel.img :

FE FF FF EA

@ адресі 0x8000, 0xfe завантажується.

@ адресі 0x8001, 0xff завантажується.

@ адресі 0x8002, 0xff завантажується.

@ адресі 0x8003, 0xea завантажується.

“Що ж відбувається насправді?”

Ця серія команд просто виконує нескінченний цикл.

Перегляньте технічну документацію:

https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

Наведений вище код складається з трьох частин:

1)Conditional – Set To Always

2)Op Code – Branch

3)Offset – Як далеко переміститися в поточному місці

Condition – біта 31-28: 0xe або 1110

Op Code – біта 27-24: 0xa або 1010

Offset – біта 23-0 -2

Я знаю, що це багато чого для того, щоб зрозуміти, але дуже важливо, щоб ви витратили час і прочитали технічну документацію, яку вказано вище. Не обіймайте корінні питання, якщо ви справді маєте бажання зрозуміти вище. ЧИТАЙТЕ ТЕХНІЧНУ ДОКУМЕНТАЦІЮ! Я зроблю усе можливе, щоб розбити все на кроки, але є такі завдання, як вище, які я просуваю вас переглянути данішит вище, щоб ви навчалися краще розуміти, де шукати, коли ви застряєте в певній програмі чи наборі машинного коду. Це одне з тих випадків, коли я просуваю вас, будь ласка, прочитати та дослідити данішит вище! “Я заспокоївся! Чому цей хуйня має значення?”

Дякую за запит! Найбільш небезпечний вірус на планеті сьогодні це саме вірус-корінь. Якщо ви не маєте базової розуміння вище, ви ніколи не почнете навіть розуміти, що таке вірус-корінь, коли ви продовжуєте вивчати. Кожен може просто заміняти файл kernel.img file власним зміненим варіантом і мати повний контроль над усіма діями від початку роботи. Наступна неділя ми вийдемо на тему архітектури фон Неймана.

results matching ""

    No results matching ""