DEFCON Conference 19. Retas MMORPG untuk kesenangan dan keuntungan. Bagian 1Josh Phillips: seperti yang kami katakan, semua peretasan cukup sederhana, dan penggunaannya terkadang tidak memerlukan keterampilan apa pun, hanya pendekatan kreatif untuk bisnis. Untuk menggunakan "negara adikuasa", Anda tidak perlu menjadi dewa rekayasa balik, tetapi itu pasti membantu hal-hal seperti integer overflow atau pengisian yang tidak mencukupi, dan Anda dapat dengan mudah mengubah nilai yang diinginkan dari 0 menjadi maksimum, misalnya, untuk menyebabkan kerusakan fatal pada musuh.

Mike Donnelly: ya, semuanya tergantung pada kemampuan untuk membuat retasan, misalnya, untuk memaksimalkan baju besi Anda. Ini terjadi di World of Warcraft - kami memiliki seorang lelaki yang, duduk di ibukota Orc, Orgrimmar, melepas helmnya 100 kali dan mengenakan helmnya, memompa kekuatannya dari level 2 ke 32.
Josh Phillips: apakah ini benar-benar terjadi, atau mungkin dia hanya menggunakan editor memori dan mengambil tangkapan layar?
Mike Donnelly: Anda mungkin benar!
Josh Phillips: Mode favorit saya adalah Mode GM. Beberapa perusahaan menghasilkan game dengan kemungkinan rekayasa terbalik secara terbuka, sehingga Anda, yang menjadi "master of the game" GM, dapat berteleportasi ke orang-orang, menghancurkan sesuatu, memberi perintah dan melakukan hal-hal menarik lainnya. Ada juga hack yang menarik, seperti pencurian item dari karakter NPC non-pemain. Permainan Age of Conan adalah salah satu yang pertama di mana ada kerentanan yang dapat membunuh GM, dan saya tidak berpikir bahwa pengembangnya senang dengan itu.
Mike Donnelly: kerentanannya adalah kemungkinan spoofing ID pemain kunci?
Josh Phillips: Ya, seperti yang Anda katakan pada server: "Saya seorang master game dan saya akan mati sekarang."
Mike Donnelly: Terkadang server gim memercayai Anda ketika Anda mengaku sebagai karakter gim lain, dengan mengatakan, "Saya ini dan ini dan saya menjual ini!"
Josh Phillips: Saya sudah mengatakan bahwa pengembang game adalah orang yang naif. Hacking UI Hack kurang berharga. Ini berguna jika Anda ingin melihat ruang permainan sangat jauh atau menyerbu peta area permainan seperti hantu, sambil tetap berada di tempatnya.

Mike Donnelly: Anda masih bisa menggunakan terjemahan bahasa yang “liar”, karena itu, misalnya, pemain Alliance tidak akan lagi memahami pemain Ward. Di sini, peretasan terjadi di sisi klien sehingga selama dialog, teks lawan yang dikirim ke pemain tidak akan ditampilkan. Ini cukup mudah dilakukan, tetapi saya ragu ada orang yang akan membayar peretasan semacam ini.
Josh Phillips: Bagian selanjutnya dari presentasi disebut: "Saya di markas Anda, teman-teman, untuk membunuhmu!" Saya akan mencoba menjelaskan kepada Anda cara menulis hack teleport. Ada cara mudah dan sulit untuk ini.
Cara mudah adalah menemukan posisi pemain dalam memori, menulis ulang, dan memanggil fungsi permainan, yang bertanggung jawab untuk mengubah lokasi pemain untuk berteleportasi ke lokasi yang dipilih. Jadi, jika Anda tahu di mana kode yang bertanggung jawab untuk lokasi pemain berada, dan Anda dapat memanggilnya langsung menggunakan beberapa fungsi, itu bisa menjadi mantra teleportasi, yang disebut "cast spell" dalam bahasa Lua, maka Anda dapat memberikan nilai yang diinginkan lokasi teleportasi pemain. Namun, server tidak akan dapat mengenali apakah Anda adalah seorang prajurit biasa atau seorang penyihir yang dapat menggunakan mantra. Metode ini berfungsi di banyak permainan.
Cara yang sulit adalah memalsukan paket gerak. Ini akan membutuhkan perhitungan matematis dan pengetahuan tentang bagaimana mereka diperbarui, rekayasa balik paket gerak dan sejenisnya. Anda mungkin perlu menyesuaikan cap waktu untuk berteleportasi atau berjalan lebih cepat.

Retasan berikutnya adalah serangan dari logika permainan dengan mengganti ID asli dalam paket dengan ID yang diinginkan, yang kami sebutkan dalam konteks Age of Conan. Ini adalah serangan pada keterampilan perdagangan pemain, kerusakan kritis atau penghancuran total kerusakan Fall kedua karakter dan item game, serta serangan pedagang NPC dengan tujuan perampokan. Dalam Age of Conan, adalah mungkin untuk memberikan kerusakan kritis pada karakter apa pun dalam game dan bahkan membunuh GM dengan menugaskannya sejuta kerusakan Fall, setelah itu ia mati begitu saja.
Mike Donnelly: ya, itu lucu!
Josh Phillips: Anda juga bisa menggunakan kode berbahaya di game ini, sehingga seseorang masuk ke dalam hubungan perdagangan dengan Anda tanpa menyadarinya. Anda bisa memaksa NPC untuk menjual sesuatu kepada Anda, dan teknik ini masih digunakan oleh banyak pemain kecuali saya, karena saya tidak suka mencuri dari karakter komputer. Dan saya tidak berpikir salah satu dari Anda harus melakukan itu.
Mike Donnelly: menyebabkan air mata digital ...
Josh Phillips: diikuti oleh dupes, atau kloning item. Banyak game memiliki kerentanan seperti masalah pembatasan sisi server. Misalnya, Age of Conan, EverQuest, Final Fantasy XII dan Ultima Online memiliki zonasi, yaitu, jika Anda menggunakan mantra di satu sisi dan setelah itu melewati garis server, kemudian temukan musuh yang mengalahkan Anda di sana dan Anda dapat melanjutkan pertempuran. Peretasan dengan metode pengulangan adalah dengan kecepatan luar biasa, misalnya 1000 kali per detik, Anda memindahkan barang bolak-balik dari jendela perdagangan ke ransel Anda. Sebagai akibatnya, server berhenti melacak hal-hal dan mereka sepenuhnya mengisi tas Anda. Semua orang tahu permainan Diablo 1, di mana Anda cukup melempar benda di tanah, berlari ke sana, melayang di atasnya, mencoba mengambilnya, dan segera muncul di ransel Anda, sambil tetap di tanah, jadi ini cara yang cukup lucu untuk meretas.
Meretas sumber daya permainan, atau Peretasan aset, seperti yang saya sebutkan, tidak sebanding dengan pekerjaannya, kecuali jika orang lain telah menerbitkan karya Anda untuk Anda pinjamkan. Mereka yang bermain WoW tahu bahwa seseorang secara ajaib dapat muncul di sisi Anda - saya tidak tahu apa namanya dengan benar ...
Mike Donnelly: battleground, battlefield.
Josh Phillips: sebenarnya, saya tidak pernah bermain World of Warcraft, bagi saya itu terlalu membosankan. Jadi, pemain menggunakan teleportasi untuk secara instan mentransfer dari medan perang ke pangkalan musuh dan membunuh semua lawan di sana. Mereka juga dapat memodifikasi peta permainan dan membuat terowongan untuk berjalan di bawah tanah ke area yang diinginkan sehingga tidak ada yang akan melihatnya. Mungkin Anda akan melihat nama kecilnya - tanda yang bergerak di peta, tetapi Anda tidak akan melihat pemain itu sendiri. Tetapi bagaimanapun juga, metode peretasan ini tidak sepadan dengan usaha.
Saya akan memulai bagian "Meretas 420 Game" dengan kutipan dari Machiavelli: "Tidak ada yang luar biasa yang pernah dicapai tanpa bahaya," sehingga Anda bahkan dapat dituntut.
Mike Donnelly: ya, ya, ya.
Josh Phillips: Saya pikir memang begitu. Anda dapat menggunakan bot dalam permainan, seseorang membicarakan hal ini beberapa tahun yang lalu tentang ini, dan saya ingin memukulnya, karena itu agak tidak menarik. Jadi, untuk ini Anda melakukan sesuatu seperti membaca piksel dan mengotomatiskan proses ini, tidak ada rekayasa terbalik di sini. Misalnya, dengan satu penekanan tombol cepat, Anda menggambar kembali titik kritis "merah" dari kerusakan Anda sendiri sehingga tidak berubah merah dan Anda tidak mati. Ini adalah retasan dalam skala yang sangat terbatas, dan tindakan Anda tidak akan diperhatikan jika Anda bertindak sangat cepat.
Mike Donnelly: tepatnya, Anda harus bertindak sangat cepat. Adakah yang tahu mengapa deteksi bekerja sangat buruk? Memahami saya dengan benar, saya tidak ingin memperindah situasi dengan deteksi di sisi klien, semua orang tampaknya sangat bijaksana di sini ... Jelas, produsen game tidak suka semua yang kita bicarakan, jadi mereka mencoba untuk menemukan perangkat lunak Anda dalam permainan, dan jika mereka menemukannya, itu banyat kamu. Jika Anda curang untuk bersenang-senang, maka jumlah maksimum yang bisa Anda lewatkan adalah akun permainan Anda sendiri, tetapi jika Anda memiliki 100 ribu pelanggan, ini adalah masalah besar, karena jika Anda mencekal semua pelanggan Anda, Anda cukup membakar.

Karena itu, mencegah deteksi kecurangan sangat penting. Kami akan membicarakan ini nanti, tetapi sekarang saya ingin mencatat bahwa mendeteksi perangkat lunak Anda di sisi klien sangat penting.
Josh Phillips: Adakah di antara Anda yang bertanya-tanya mengapa gelombang larangan muncul setiap 3 bulan? Faktanya adalah ketika Anda melarang 50 ribu akun setiap minggu, orang yang menautkan kembali 50 ribu akun ini tidak akan pernah melakukan ini lagi karena mahalnya biaya. Tetapi jika Anda melarangnya tidak lebih dari sekali setiap 3 atau 4 bulan, maka mereka akan membeli kembali akun, karena ini akan menguntungkan. Perusahaan berpikir seperti ini: kami menemukan orang-orang ini yang menggunakan, katakanlah, bot Glider, tetapi tidak akan mencekal mereka, karena jika kami melarang mereka terlalu sering, mereka akan memberi kami keuntungan tidak lebih dari $ 50.
Mike Donnelly: ya, itu benar.
Josh Phillips: Cara lain untuk meretas adalah dengan menyuntikkan kode ketika Anda memasukkan kode assembler kecil untuk membuat beberapa hal kecil, misalnya, memanggil beberapa jenis prosedur RPC dari jarak jauh. Permukaan serangan Anda dapat meningkat, maksud saya, Anda benar-benar dapat menggunakan sesuatu seperti injeksi DLL ke dalam kode besar yang ditulis dalam C atau C ++ tingkat tinggi, yang sangat mudah dideteksi. Anda menulis loader DLL yang memperbaiki semua impor Anda dan semua itu.
Anda dapat menyerang tingkat paket jaringan dan melakukan hal yang baik seperti merekayasa balik protokol jaringan. Ini adalah pekerjaan yang sangat memakan waktu, karena tidak ada terlalu banyak game yang memungkinkan analisis konten semacam ini. Ini masih bukan tugas yang mudah, dan jika Anda menganggap diri Anda pro, Anda dapat menulis klien gim Anda sendiri. Orang sering berpikir bahwa mereka dapat melakukannya dan menghabiskan banyak waktu dengan sia-sia, tetapi jika Anda benar-benar dapat menulis klien yang baik, seperti orang-orang yang menghancurkan saya beberapa bulan yang lalu, Anda dapat memperoleh beberapa ratus ribu sebulan untuk ini.
Mike Donnelly: menulis klien khusus bukan apa yang akan Anda jual, tetapi “pertanian emas” dan transaksi uang nyata. Jika Anda menulis klien game Anda, Anda dapat meminta pasangan Anda untuk meluncurkan sepuluh juta kopi game di server pharming. Jika klien game Anda tidak memerlukan banyak operasi rendering 3D, maka keunggulannya dapat digunakan untuk meningkatkan skala pertanian emas.
Josh Phillips: jika Anda biasanya dapat menjalankan 2-3 klien game di komputer, dan Anda dapat meluncurkan 200-300 klien, ini akan menjadi skala yang cukup besar.
Sekarang pertimbangkan hal yang disebut anti-cheat. Dalam bantuannya, Anda dapat menangani perangkat lunak yang menghitung dan melarang curang. Ini seringkali merupakan tugas yang sangat sulit, tetapi kadang-kadang sangat penting untuk tidak terdeteksi, jika tidak Anda bisa kehilangan segalanya. Pada slide, saya mengutip kutipan lain dari Sun Tzu, yang mengatakan: “Menjadi sangat halus hingga tidak berbentuk. Menjadi sangat misterius hingga hening. ”
Mike Donnelly: Saya ingin mencatat bahwa tidak ada banyak aspek teknis deteksi, tetapi Anda harus melakukan pendekatan ini secara strategis, ini tidak ada dalam buku "MMO Hacking". Mungkin ada buku seperti itu?

Josh Phillips: ya, itu ditulis oleh salah satu teman saya.
Mike Donnelly: Orang ini dieliminasi di tempat pertama. Jadi, seperti ini tidak ada dalam buku ini, tetapi jika kita berbicara tentang pendekatan strategis untuk bisnis, maka Anda harus khawatir tentang dua hal utama yang berkaitan dengan perangkat lunak Anda. Anda memiliki permukaan serangan yang menentukan seberapa sulit untuk mendeteksi perangkat lunak Anda, dan anti-cheat dalam hal ini hanya dapat meningkatkan kode deteksi jika kecil. Kedua, Anda harus memiliki apa yang saya sebut "kecerdasan", yaitu, seberapa baik Anda menyadari apa yang dilakukan musuh, Anda perlu memahami bagaimana program pendeteksiannya bekerja, karena itu sangat penting. Kedua hal ini bekerja bersama, dan jika permukaan serangan terlalu besar, akan sulit untuk mengatakan apa yang dilakukan musuh sebagai respons, karena upayanya bisa minimal - cukup tulis satu baris kode yang akan mendeteksi bot Anda. Jika Anda melakukan sesuatu yang sangat keren, seperti bot saya, yang akan merespons dalam waktu 2 milidetik, jika monster melakukan sesuatu, Anda dapat menghindari deteksi.
Jadi ini adalah keputusan yang harus Anda buat ketika memilih fitur dan merancang apa yang diminta pelanggan Anda. Anda harus memutuskan apakah Anda ingin mengambil risiko dengan meningkatkan permukaan serangan dengan menambahkan fitur-fitur tersebut.
Sebelum menunjukkan slide berikutnya, saya ingin berbicara tentang apa yang terjadi pada saya dan pengembang perangkat lunak World of Warcraft lainnya. Satu orang mengembangkan perangkat lunak, sebut saja Innerspace, yang bekerja dengan menyuntikkan dll ke dalam permainan yang cukup besar. Orang ini fasih dalam rekayasa terbalik, jadi dia mengambil semua langkah terhadap program deteksi Blizzard. Tapi dia masih meninggalkan dll di memori, yang dia ingin "membingungkan", dan yang lebih penting, dia harus menambal salah satu fungsi Blizzard. Oleh karena itu, ia hanya pergi ke awal fungsi ini dan memasukkan "lompat jauh" ke tempat yang tepat dalam kode, memastikan bahwa ia telah cukup bertopeng dan tidak ada yang akan menemukannya.
Slide berikutnya menunjukkan fungsi dengan kode yang dimasukkan, perhatikan nilai-nilai yang disorot dengan warna merah, kami akan meningkatkan fragmen ini sehingga semua orang dapat melihatnya.

Ini adalah sepotong kode yang dimasukkan di dalam gim, tetapi ini bukan World of Warcraft ...
Josh Phillips: karena Mike mengejar Blizzard ...
Mike Donnelly: Saya hanya berpikir bahwa memberi contoh dari WoW bukanlah ide yang bagus. Dalam cuplikan kode ini, Anda melihat bahwa game menggunakan kueri daftar teman askForBuddiesList, yang memiliki parameter opsional yang belum pernah digunakan sebelumnya. Ini dipahami sebagai nomor paket, atau nomor tim, atau nomor BOB - “Brothers Over Bitches”. Parameter opsional ini "ditempelkan" ke tempat kode ini dan dikirim ke server, semuanya sangat sederhana.
Jadi, kode "tempel" ini - mari gulir ke bawah beberapa baris ke komentar - mengatakan: kode lama tadi askForBuddiesList (0), itu adalah 0, dan alih-alih sekarang kode baru digunakan dengan parameter opsi _asm, yang belum pernah digunakan sebelumnya.

Jadi, Blizzard akan menemukan dalam kode permainan fungsi yang diperbaiki oleh orang ini. Untuk melakukan ini, mereka mengubah pemanggilan fungsi ini menjadi contoh kode kecil. Mereka menggunakan register, melakukan beberapa perhitungan matematis, sehingga IDA tidak akan melihat tautan lain ke fungsi ini. Kemudian mereka pergi ke fungsi yang diperbaiki, mengeluarkan byte pertama dari kode mereka dan mengirimkannya sebagai parameter yang belum pernah digunakan sebelumnya. Lalu, apa yang terjadi? Mereka mengirim satu byte kode mereka sendiri setiap kali mereka membuat permintaan ini, dan, tentu saja, di sisi server mereka hanya "menyisir" itu, dan jika mereka menemukan E9 bukannya nol, itu saja, sudah selesai!
Yang menarik tentang perangkat lunak ini adalah Anda tidak melihat sesuatu seperti "jika orang ini adalah bot, beri tahu server tentang hal itu" di sini. Anda hanya melihat bahwa saya mengambil byte ini dan mengirimkannya, dan ini adalah bagian kecil dari kode yang bahkan tidak mengubah kode jaringan utama, tidak ada parameter baru, tidak ada yang baru. Satu-satunya cara untuk menemukannya adalah dengan mengamati bagaimana data ini dikumpulkan, dan kemudian kita dapat mengatakan: "Ya, hal ini selalu 0, dan sekarang 9, itu tidak baik!"
Jadi, ketika mereka melakukan ini, orang ini kehilangan semua pelanggannya karena mereka menunggu beberapa minggu untuk tidak diblokir, dan kemudian perusahaan menyerang lagi dan lagi.
Ini adalah contoh yang baik tentang seberapa besar arti permukaan serangan, karena memperbaiki hanya satu fungsi permainan telah menyebabkan respons seperti itu. Faktanya adalah bahwa jika Anda pikir Anda tahu di mana kode deteksi, selalu ada kemungkinan bahwa ini bukan yang Anda pikirkan. Dalam kasus Blizzard, mereka tidak pernah menempatkan kode deteksi mereka di luar "penjaga hutan", mereka "menyimpan semua telur mereka dalam satu keranjang", menyembunyikan detektor di dalam "penjaga hutan". Tetapi kemudian mereka sadar dan mengatakan bahwa kami hanya akan memposting kode kecil kami di mana pun kami inginkan - dan hanya itu.
Karena itu, sangat penting untuk tetap sulit dideteksi. Jika mereka datang dengan sesuatu seperti panggilan kernel baru, atau meluncurkan monitor API pribadi, aktivitas mereka dapat dideteksi, tetapi ketika mereka hanya mengambil satu langkah kecil, Anda langsung tertangkap. Oleh karena itu, sangat penting untuk mengamati apa yang mereka lakukan dan bagaimana mereka menciptakan alat baru untuk memantau bagaimana seharusnya aliran data dalam sistem.
Adapun Glyder, kami memiliki alat yang memperingatkan kami, misalnya, bahwa Warden telah diperbarui dan sekarang memiliki 9 titik masuk, bukan 8, dan setelah peringatan seperti itu, saya berlari ke kantor saya dan mulai memperbaiki Glyder dengan tergesa-gesa, membawanya ke pesan dan jalankan lagi. Jadi selalu ada jalan keluar, yang utama jangan malas. Benar-benar ada banyak pekerjaan dalam bisnis ini, tetapi itu terbayar.
Josh Phillips: ya, saya pikir kita berdua harus bekerja 36 jam tanpa istirahat.
Mike Donnelly: ketika Blizzard memperbarui "ranger", mereka menambahkan pemindai baru. Pemindai ini mengambil jalur yang dienkripsi di dalam "penjaga", menerima kunci server, mendekripsi baris ini dan memanggil fungsi GetProcAddress, yang mengekstrak alamat fungsi yang diekspor dari pustaka yang terhubung secara dinamis yang ditentukan, dalam hal ini kernel32.dll. Jika aku membuatmu bosan, jangan khawatir, maka itu akan lebih menyenangkan.
Jadi, mereka mengambil string, apa pun itu, dan jika diatur oleh fungsi ini, GetProcAddress diterapkan padanya tanpa parameter apa pun. , , , , . , - kernel32.dll , , .
, , , , Hellgate: London. , , ! : « ! , »!

, , URL — YouTube! GetProcAddress, ProcAddress , , , , , ! , . , . , , ricroll, - !
: , . , - , , , dll . , . Blizzard , «, , – , ».
, , , command & control , «» Warden Punkbaster. WoW, , .
: .
: , . Punkbaster , , . window.name, Punkbaster. : «, , , IRC , , ».
, Punkbaster : «-, !», .
, . , , . . , .
: , , Diablo 3.

, – ? Blizzard . Blizzard . , , «» Blizzard, .
: , . , , , .
: , …
: , , .
: , DefCon!

Terima kasih telah tinggal bersama kami. Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikannya kepada teman-teman Anda,
diskon 30% untuk pengguna Habr pada analog unik dari server entry-level yang kami temukan untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps dari $ 20 atau bagaimana membagi server? (opsi tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps hingga musim semi gratis ketika membayar selama setengah tahun, Anda dapat memesan di
sini .
Dell R730xd 2 kali lebih murah? Hanya kami yang memiliki
2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV dari $ 249 di Belanda dan Amerika Serikat! Baca tentang
Cara Membangun Infrastruktur Bldg. kelas menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?