Частина 40 - Хакінг Hello World!
Для повного змісту змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті.
Хорошо, час вже вийшов, щоб розглянути найпростіший програму C, відлагодити її і хакнути її. Якщо ми бажаємо мати майстерність, ми повинні створювати і знищувати в одному кроку, щоб мати повний контроль над доменом.
Давайте запустимо VIM і наберемо наступне. Ми включаємо нашу стандартну бібліотеку і створюємо функцію main, до якої ми використовуємо бібліотечну функцію для виведення рядка символів, оскільки тип main означає ціле число, ми повертаємо 0.
Давайте скомпілюємо і побачимо, що відбувається, коли ми запустимо:
Як ми бачимо, подібно до нашого прикладу C++, ми бачимо 'Hello World!' виведено успішно.
Давайте відлагодимо в Radare:
Це просте, ми використовуємо aaa для аналізу бінарного файлу і шукаємо функцію main з s sym.main.
Давайте розглянемо ассемблер і аналізуємо:
Асемблер! Визначення рідної сексуальної!
Я розглянув це в деталях в попередніх лекціях про Асемблер, але давайте переглянемо.
1)Ми push rbp , що означає, що ми відкидаємо значення, яке зараз знаходиться в регістрі базового вказівника, на стік.
2)Ми lea rdi, qword str.Hello_World , що означає, що ми завантажуємо ефективний адрес біта нашого рядка в регістр rdi. Дотепер це повинно бути простим для вас слідувати за цим.
3)Далі ми call sym.imp.puts очікуйте! Ми використовуємо printf чого ж це! Наш компілятор оптимізує наш код і компілятор вибрав функцію puts в бібліотеці stdio для виведення рядка в наш термінал. знову досить просто.
4)Ми очищаємо eax і потім pop початкове значення в регістрі rbp знову в rbp. Якщо ви заплуталися цим переглядіть раніше частини цієї серії, будь ласка.
Ми знаємо, що наш рядок 'Hello World!' живе в досить пристойній будинку в Арілзінгтоні, Вірджинія, в адресі 0x2004 добре, ні, це не Арілзінгтон, Вірджинія, але воно знаходиться в мапованій пам'яті (оскільки ми не технічні відлагоджувачі, ми граємося з мапованим кодом, тобто ті ж самі значення на диску).
Щоб підтвердити, ми бачимо значення в 0x2004 є 'Hello World!' Давайте хакнемо це значення на будь-яке бажане значення з допомогою w команди і запису прямо в цю маповану адресу пам'яті.
Давайте знову переглянемо хто зараз живе в нашому будинку в Арілзінгтоні, Вірджинія!
Успіх! Ми хакнули значення і коли ми вийшли з нашого відлагоджувача, ми бачимо:
Ми успішно змінили бінарний файл.
Це багато чого для вас зрозуміти тут. Якщо ви заплуталися, запитайте питання в коментарях, будь ласка! Не продовжуйте далі, оскільки я тут, щоб допомогти. Це КРИТИЧНО, щоб ви зрозуміли ці найпростіші речі, перш ніж продовжувати!