Rekayasa terbalik Google April Mop



Mungkin salah satu dari Anda memperhatikan bahwa pada tanggal 1 April, Google menambahkan game interaktif "Snake" ke aplikasi Google Maps untuk Android dan iOS.

Spesialis Check Point biasanya sibuk meneliti ancaman dunia maya terbaru, tetapi mereka sangat tertarik dengan permainan ini, meskipun mereka sangat kecewa dengan kerugiannya ... karena itu, muncul pemikiran logis: mengapa tidak memecahkannya!

Dengan demikian, karyawan kami yang paling nakal mulai berpikir tentang pengembangan aplikasi secara terbalik menggunakan debugging jarak jauh. Secara umum, mereka melakukannya, dan segera kami berhasil menyelesaikan tugas untuk tidak pernah kalah - dan bahkan menambahkan AI sederhana yang memainkan permainan itu sendiri.





Dalam catatan ini, kami menjelaskan secara rinci peretasan.

Pertama, kami membuka aplikasi pada perangkat virtual melalui Genymotion dan meluncurkan "Snake", yang terletak di menu di sudut kanan atas.

Sepertinya game ditampilkan di WebView, jadi kami memulai debugging jarak jauh di alat pengembang Chrome:



Kemudian mereka pergi ke situs dan menemukan file v18.js pada tab sumber, dan berisi beberapa fungsi menarik.

Pertama, fungsi fa () memulai bidang 20 × 20:

this.height = this.width = 20; 

Tujuan utama kami adalah menemukan dan mengubah fungsi yang menentukan kapan ular menabrak tembok atau ke dalam dirinya sendiri untuk menonaktifkan kemungkinan kehilangan. Variabel lebar dan tinggi mewakili dimensi lapangan bermain, jadi kami mencari lebar dan tinggi di dalam kode sumber dan menemukan fungsi F (a, b) :



Sepertinya F (a, b) sedang memeriksa apakah koordinat tubuh ular berada di dalam lapangan. Salah satu pilihan adalah untuk sepenuhnya menghapus kondisi dalam fungsi sehingga selalu mengembalikan kebenaran, dengan demikian memindahkan kita ke "rezim Tuhan", di mana kita bisa melewati tembok tanpa sekarat.

Untuk melakukan ini, kami menekan tombol Inspect di konsol jarak jauh dan mengubah fungsi F (a, b) sebagai berikut:



Sekarang kita bisa melewati tembok:


Fig. 1. Mode Dewa

Ini semua sangat bagus, tapi kami masih harus bermain, mengambil orang sendiri untuk mendapatkan poin. Peretasan berikutnya akan menyelesaikan masalah ini.

Ada banyak panggilan ke wa (a) di tumpukan panggilan. Jika kita mempelajari fungsi ini, kita akan melihat bahwa itu adalah rekursif dan bertanggung jawab atas permintaan frame animasi. wa (a) memanggil fungsi xa (a, b) dan ya (a) , yang masing-masing menampilkan permainan (kereta, orang) dan bidang.

Pertimbangkan fungsi xa (a, b) :



Dibutuhkan dua argumen: 'a' dan 'b'. Yang pertama adalah bagian dari variabel global Q, yang berisi informasi menarik tentang permainan kami, termasuk array yang mewakili lapangan bermain (Gbr. 2), di mana kita melihat kereta (M), orang, dan benda (K). Fungsi ini juga menghitung skor dan menyimpannya dalam ci, yang juga setara dengan Qb


Fig. 2. Array bidang bermain

Array ini sesuai dengan bidang ini:


Fig. 3. Lapangan bermain

xa (a) juga mengacu pada fungsi sa (a) pada Gambar. 4, yang menghasilkan koordinat acak setiap kali orang baru dibuat. Jika Anda memanggil fungsi lebih dari sekali, Anda dapat membuat orang sebanyak yang Anda inginkan (Gbr. 5).


Fig. 4. Fungsi panggilan sa (a)

Seperti di sini:


Fig. 5. Panggilan fungsi dengan penciptaan sejumlah orang di peta

Harap dicatat bahwa meskipun Anda memanggil sa (a) lebih dari sekali dan mengambil orang tersebut, skornya tidak berubah. Saat memilih penumpang, fungsi ka (a, b) pada Gambar. 6. Dengan demikian, perlu diubah sehingga dengan setiap panggilan dia menambahkan 10 poin dan memperbarui skor di layar.


Fig. 6. Fitur yang diperbarui

Koordinat masing-masing bagian kereta ditunjukkan dalam Qbob, di mana elemen pertama adalah trailer pertama di kereta.


Fig. 7. Array kereta

Ini akan diperlukan untuk membuat AI sederhana. Mari kita mulai dengan logikanya:


Fig. 8. AI logika

Seekor ular adalah mesin negara (state machine):

  1. Pada X = 19, kita turun sampai kita mencapai Y = 19.
  2. Di X = 19 dan Y = 19, ke kiri ke X = 0.
  3. Kami lolos ke mesin negara untuk zigzag:
    1. Naik satu sel dan ke kanan ke X = 18.
    2. Naik satu sel dan kiri ke X = 0.
    3. Kembali ke langkah A.
  4. Pada Y = 0, ke kanan ke X = 19.
  5. Kembali ke langkah 1.

Kode lengkap diterbitkan di GitHub .

Video:

Source: https://habr.com/ru/post/id446920/


All Articles