Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Coś dla prawdziwych twardzieli – OS command exec na żywo w Super Mario World – przez odpowiednią manipulację kontrolerami
Grupa hobbystów zaprezentowała ostatnio pewien nietypowy trick. Przeprogramowali na żywo grę Super Mario World, tak aby wykonała dowolny kod. Kodem tym była stworzona przez nich gra, która pozwalała np. grać głową Mario w ponga czy snejka (dla tych którzy nie wiedzą o co tu chodzi, polecam w filmie poniżej przejście do ok.: 1:35), a bytecode został podany przez … odpowiednie wciśnięcie przycisków na kontrolerach.
Na czym całość dokładniej polega? Po pierwsze chcemy znaleźć buga, który umożliwi niekontrolowany skok aplikacji (gry) pod wskazany przez nas adres pamięci (technika wykorzystywana np. w exploitach podatności buffer overflow). Można skorzystać tutaj z wielu błędów, które wizualnie sprowadzają się np. do możliwości wzięcia jednorazowo dwóch przedmiotów czy jeździe na wielu Yoshi jednocześnie. Historycznie ciąg tego typu operacji był wykorzystywany np. do ustawienia adresu skoku gry do miejsca gdzie były załadowane napisy końcowe i efektywne ukończenie gry w kilka minut :)
Autorzy hacka zrobili więcej – skoczyli do kodu, który może być ustawiany za pomocą kontrolerów (naciśnięcie odpowiednich przycisków ustawia pewne bajty w pamięci, które w normalnej sytuacji są odczytywane przez grę aby sterować całą zabawą), a w tym kodzie doładowali już…własną grę! Autorzy hacka piszą tak:
So let’s just jump to the controller input data and execute from there. The input is at $4218 so we need a JMP $4218 which is 4C 18 42.
Czyli potrzebują wykonać instrukcję procesora: 4C 18 42. Skąd biorą te bajty? Jak się okazuje są to kody pewnych sprajtów (np. 42 to p-switch). Korzystając więc z wielu bugów ustawiają pewien adres w pamięci zgodny z wybranymi sprajtami (zauważcie np. w filmie powyżej, w 1:38 widoczny jest 'przycisk p’; całe to 'ustawianie’ trwa właśnie mniej więcej 1:40), a następnie korzystając z kontrolerów do gry przesyłają dowolny kod do wykonania. Proste co?
Cała akcja z komentarzem autorów:
oraz dość entuzjastycznym komentowaniem na reddicie.
–ms
Skoro już jesteśmy w temacie robienia dziwnych rzeczy z grami, bug w Pokemon Yellow pozwalający na nadpisywanie kodu:
http://www.youtube.com/watch?v=p5T81yHkHtI
Pomysłowe. Szacunek.