Частина 7 - Хакінг char

Сьогодні ми хакуємо простий програму char.

Давайте переглянемо наш код.

#include <stdio.h>
#include "pico/stdlib.h"

int main() 
{
  stdio_init_all();

  while(1) 
  {
    char x = 'x';
        
    printf("%c\n", x);

    sleep_ms(1000);
  }
        
  return 0;
}

Давайте запустимо наш дебагер.

radare2 -w arm -b 16 0x03_char.elf

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

aaaa

Давайте перейдемо до головної частини програми.

s main

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

У нашому останньому урокі ми розбили кожну лінію. Тут ми явно зацікавлені в хакінгу значення 0x78 і зміни цього значення на щось інше. Давайте спробуємо 0x79. Цей простий хак перетворить символ 'x' на 'y'.

:> wa movs r1, 0x79 @ 0x00000328
Written 2 byte(s) (movs r1, 0x79) = wx 7921

Давайте перевіримо зміну.

:> pd 1 @ 0x00000328
│          ; CODE XREF from main @ 0x338
│           0x00000328      7921           movs r1, 0x79              ; 'y'; arg1

У цьому випадку наш дебагер навіть повідомляє нам, що воно насправді 'y', а тепер ми переміщаємо значення hex ascii в 0x79 в r1.

Давайте також хакнемо час очікування на 2000 мс або 2 секунди.

:> wa lsls r0, r0, 3 @ 0x00000332
Written 2 byte(s) (lsls r0, r0, 3) = wx c000

У цьому випадку ми просто логічно зміщуємо значення вліво 3 рази, тобто 250 х 2 = 500, 500 х 2 = 1000, 1000 х 2 = 2000.

Давайте перевіримо.

:> pd 1 @ 0x00000332
│           0x00000332      c000           lsls r0, r0, 3

Усі, чого ми тепер повинні зробити, це вийти і перетворити нашу .elf на .uf2!

./elf2uf2/elf2uf2 0x03_char.elf 0x03_char.uf2

Вставте Піко і переконайтеся, що ви натискаєте кнопку BOOTSEL або використовуйте налаштування, які я надав у частині 2.

cp 0x03_char.uf2 /Volumes/RPI-RP2

Давайте його побачимо!

screen /dev/tty.usbmodem0000000000001

АХА!

y
y
y
y
y
y

Ми бачимо 'y' виводиться кожні 2 секунди!

У нашому наступному урокі ми розберемося з типом даних int.

results matching ""

    No results matching ""