Game Android Terus Diretas [ditutup]

143

Jadi kami telah melalui ini beberapa kali sekarang, kami merilis game (murah) dan seseorang meretasnya dan meletakkannya di atas cermin. Kami menyiapkan Google Alerts untuk semua aplikasi kami, jadi kami diberi tahu setiap hari siapa yang melakukan peretasan. Sejauh ini, kami telah menerapkan layanan lisensi seperti yang disarankan Google, garam kami dibuat secara acak setiap kali lisensi dimulai dengan ID perangkat unik. Kami menjalankan layanan cek sekali, ketika aplikasi dimulai untuk pertama kalinya. Kami kemudian menghasilkan hash 512 karakter untuk kunci dan nilai yang disimpan dibandingkan dengan di SharedPreferences dari sana keluar.

Sekarang, saya tahu bahwa memeriksa sekali mungkin di mana aplikasi tersebut diblokir. Bytecode kami kemungkinan besar telah dilihat dan dikompilasi ulang tanpa garis yang memulai pemeriksaan.

Dari sini, saya tidak ingin mengaburkan kode kami karena saya telah melihatnya rusak sebelumnya. Saya ingin sesuatu yang sedikit lebih solid, dan saya juga ingin belajar bagaimana melakukan ini dengan benar. Saya lebih tertarik belajar daripada menghasilkan uang pada saat ini karena hanya 2% orang yang akan mencari versi yang diretas.

Sejauh ini, saya sendiri, saya telah menghasilkan generator angka acak yang ditempatkan di beberapa area permulaan game. Ketika dimulai (katakanlah, 1 dari 50 kali) lisensi diperiksa. Saya tahu ini akan mempersulit peretasan karena cracker harus menghilangkan setiap case, kompilasi, eliminasi, kompilasi. Namun metode ini, masih bisa dipecahkan ... jadi apa yang kalian sarankan? Sekali lagi, saya benar-benar tertarik dengan proses keamanan ini, jadi silakan mendidik, jangan mengubahnya menjadi diskusi tentang kebingungan atau memeriksa secara berkala berdasarkan cap waktu.

Terima kasih

BajaBob
sumber
27
Jika Anda tidak mengatakan pada diri sendiri bahwa Anda lebih tertarik untuk belajar daripada menghasilkan uang, jawaban saya hanyalah "itu tidak sebanding dengan sakit kepala". Karena Anda tertarik pada sakit kepala itu sendiri, saya katakan maju (tapi saya tidak punya jawaban untuk Anda, hanya akan mengikuti pertanyaan ini seperti orang lain).
Thiago Arrais
4
Jika gim yang sama terus diretas, apakah Anda yakin tidak ada masalah dengan anggota staf? Bukan hal terbaik untuk dipertimbangkan, tetapi itu bisa terjadi
Phil Lello
3
Meskipun lebih dari 20k baris kode, saya mengelola seluruh proses sendiri.
BajaBob
3
@BajaBob maka Anda adalah mol: D
Sulfkain

Jawaban:

117

Gagasan saya bukanlah bukti peretas, tetapi mungkin menghapus minat untuk meretas permainan.

Model freemium

1) Buat 5-10 level pertama gratis sehingga orang dapat mempelajari permainan dan bersenang-senang tanpa membayar. Less akan ingin meretas level pertama dan game akan menyebar lebih jauh dengan model Freemium.

Paket level Shareware / berkerumun

2) Biarkan bagian level permainan atau logika tetap online. Misalnya. ketika mencapai level 5 atau 10 atau 15, kemudian unduh bagian-bagian kecil untuk game, dan setiap kali kirim progress-log dari game dan validasikan ini terhadap nilai yang mungkin + kode kode. Ini mungkin memungkinkan untuk menutup akun yang diretas secara otomatis.

Perlindungan penipu stealth

3) Anda juga bisa menghitung "bendera peringatan kecil" yang Anda tempatkan di dalam permainan. Jangan hanya memeriksa "validasi" di awal, tidak membangun bendera ini ke dalam logika permainan itu sendiri. Jangan membuatnya merusak gameplay, karena dengan begitu tidak ada yang akan mencarinya. Kemudian ketika pengguna mencapai ujung monster level, periksa apakah ada bendera peringatan yang dicatat. Ini tidak akan muncul di dalam permainan, sehingga pengguna yang tidak mengetahui dengan edisi yang diretas dapat bermain selama berjam-jam / hari dan tiba-tiba menyadari bahwa ia tidak bisa menyelesaikan permainan atau naik ke tingkat berikutnya, karena permainan itu memiliki "bug". Yang tidak diketahui pengguna adalah bahwa bug ini hanya terjadi pada klien yang diretas.

Kesimpulan

Lebih pintar dari kerupuk. Menipu mereka agar berpikir pekerjaan itu dilakukan. Lakukan copyprotection dan ketahuilah bahwa cracker yang lebih canggih akan dapat menghapusnya. Tetapi mereka mungkin tidak ingin memainkan 50 level untuk memeriksa apakah celahnya juga berfungsi.

Begitu mereka menyadari masalah ini, mereka mungkin mulai memecahkannya juga. Tetapi jika Anda membagi game menjadi paket-tingkat, Anda masih dapat memvalidasi antara setiap unduhan paket. Jadi, begitu Anda menerima data hash klien yang diretas, maka jalankan eksekusi dan matikan game pada klien. Whoops game crash. Jangan katakan ini karena diretas. Kesalahan program bisa terjadi. :-)

Sekali lagi, ini bukan bukti peretas. Tapi itu mungkin cukup mengganggu mereka untuk pindah ke game berikutnya. Terakhir, Anda juga bisa mengeluarkan pembaruan reguler untuk gim dan hanya versi terbaru yang dapat "memposting catatan" dll. Sehingga pengguna yang aktif harus memperbarui untuk tetap terhubung.

BerggreenDK
sumber
5
Wow, ide bagus. Sangat menghargai semua ini, bahkan tidak pernah mempertimbangkan membuat level dan mempostingnya ke server dan memvalidasi terhadap mereka. Versoning ... ide bagus. Biarkan semua orang memperbarui, membuatnya tidak masuk akal untuk dipecahkan. Terima kasih banyak, ini akan membuat saya sibuk untuk sementara waktu!
BajaBob
12
Sigh, sayang sekali kamu tidak bisa +2 jawaban :) Satu komentar: Bagaimana kamu bisa menunjukkan bahwa masalahnya ada pada permainan yang dibajak? Jika permainan menjadi buggy / aneh pada salinan bajakan, orang mungkin berpikir itu adalah bug dan menjelekkan game di forum. Saya tidak berpikir ini masalah besar di Android karena tidak ada banyak forum dengan audiens yang besar, tapi saya bertanya-tanya apakah masuk akal untuk memiliki disclaimer di depan bahwa "salinan bajak laut mungkin tidak berfungsi dengan benar".
EboMike
3
Saya dapat mengingat sebuah game dari 1978 di TRS80 yang akan bertindak secara acak jika perlindungan salinannya dihapus. Hanya ada 1 pemeriksaan validitas, dan menghapusnya berarti Anda dapat dengan bebas menyalin game, tetapi kesalahan gameplay yang aneh tidak akan terjadi pada salinan yang sah, hanya pada salinan yang diretas. Tidak ada yang mengira itu adalah kesalahan pengembang ... kami tahu apa yang terjadi.
Fixee
1
@ EboMike Saya pikir bagian kuat dari ide saya untuk perlindungan salinan adalah untuk "bertindak seormal mungkin" bahkan tidak memberi cracker petunjuk tentang skema perlindungan jahat apa yang ada di depan. Ini hanya akan membuat mereka semakin penasaran berburu perlindungan. Hanya untuk bersenang-senang. Ingat, banyak dari mereka tidak melakukannya demi uang, tetapi hanya karena mereka dapat memamerkannya. Jadi jangan menggoda mereka. Bertingkah santai saja. : o) Lebih pintar dari mereka.
BerggreenDK
2
@Fixee dan lainnya Gim Batman Arkham Asylum baru-baru ini memiliki sesuatu yang mirip dengan itu: pada salinan bajakan, langkah penting akan gagal dan membuat Anda terjebak cukup awal dalam permainan. Kemudian, ketika seseorang mengeluh tentang "bug" di forum, pengembang bisa menyeringai dan mengatakan "itu bukan bug dalam game, itu bug dalam kode moral Anda".
Nzall
20

Saya telah melakukan beberapa dekompilasi dan peretasan apk untuk sementara waktu (bukan warez, tetapi mod dan peretasan sebagian besar ke aplikasi google dan kerangka kerja android, selalu mematuhi kebijakan xda-developer).

Setelah Anda belajar membaca smali, hampir sama dengan membaca kode java asli (tetapi dengan lebih banyak LOC). Jadi, kode apa pun yang Anda tambahkan untuk memeriksa kunci dapat ditemukan dan dihapus atau diganti. Anda bahkan tidak perlu mengkompilasi ulang setiap kali untuk menghilangkan lebih dari satu (beberapa pencarian melakukan keajaiban untuk menemukan potongan kode yang sama) dan, bahkan jika siklus kompilasi / kompilasi ulang diperlukan untuk menemukannya, hanya masalah satu atau dua menit untuk mendekompilasi: semuanya diotomatisasi oleh apktool dan bahkan lebih oleh apkmanager.

Karena itu, saran saya kepada Anda adalah untuk mengimplementasikan semacam tabel penilaian online atau serupa, dan ketika pengguna melihat tabel skor online, Anda dapat memeriksa kode hash yang Anda terapkan dan membandingkannya dengan akun gmail terkait. Dengan begitu Anda dapat melaporkan peretasan ke google dan mengirim pesan jahat ke pengguna warez, menjelaskan mengapa itu ilegal.

Tentu saja, peretasan baru dapat diterapkan untuk menghilangkan tabel penilaian, tetapi itu akan mengurangi minat untuk warez.

Semoga berhasil.


Memperbarui

Setelah meneliti untuk menjawab pertanyaan ini: Menyuntikkan kode ke APK (benar-benar tentang mekanisme DRM Amazon), saya dapat memberi tahu sedikit tentang bagaimana Amazon melindungi aplikasi: itu termasuk metode untuk memeriksa validitas instalasi di mana-mana (Anda dapat melihat contohnya bagaimana mereka melakukannya dalam jawaban saya untuk pertanyaan itu). Ini akan membuat upaya apa pun untuk meretas aplikasi tidak terlalu sulit, tetapi sangat membosankan. Saya percaya itu adalah poin kuat: peretas tidak akan mau menghabiskan begitu banyak waktu melakukan begitu banyak tugas berulang: itu tidak menantang dan membosankan. Kelemahan utama yang saya lihat dalam pendekatan itu adalah kemungkinan untuk meretas aplikasi Amazon itu sendiri untuk selalu memberikan jawaban yang valid, tentu saja. Tetapi, jika Anda mencampur cek hash Anda saat ini dengan semacam cek online yang tersebar di antara metode Anda, saya yakin peluangnya untuk diretas dapat dikurangi secara drastis.

Aleadam
sumber
3
Saya harus menyebutkan bahwa banyak orang memiliki masalah dengan aplikasi "menelepon ke rumah". Secara pribadi, itu bodoh - ponsel Android 'telepon rumah' dalam banyak hal begitu sering, itu tidak terlalu penting, dan apa masalahnya dengan pemeriksaan verifikasi lisensi anonim? Masih ingin membuang itu - beberapa orang melemparkan bau besar tentang "menelepon ke rumah", terutama ketika itu tidak diungkapkan.
EboMike
3
Yah, bisa dimengerti bahwa orang mungkin memiliki masalah jika aplikasi 'telepon rumah' dan tidak memberi tahu pengguna. Tapi tabel skor berbasis web memecahkan itu karena pengguna yang mau menghubungkan
Aleadam
Benar, tetapi begitu Anda menggunakan koneksi yang seharusnya "secara anonim" mengunggah skor dan mengirim hash akun gmail, itu masalah yang berbeda. Lagi: Bukan untuk saya. Saya akan berpikir ini sangat masuk akal, dan saya pribadi akan tergoda untuk mengimplementasikan skema ini di aplikasi saya sendiri. Orang-orang yang mengeluh akan menjadi minoritas (dan, sangat mungkin, membeli aplikasi terlepas).
EboMike
Mengapa Anda mendekompilasi kerangka kerja, alih-alih mengunduh kode sumber?
Phil Lello
1
@Phil Anda tidak mendapatkan akses ke kode sumber untuk touchwiz atau merasakan FW jadi jika Anda ingin mod telepon tertentu kadang-kadang cara termudah adalah dengan mendekompilasi dan mengubah smalis.
Aleadam
20

Diambil dari solusi saya dari pos ini Hindari apk retak

Laksanakan perpustakaan lisensi Anda sendiri

Saya juga merujuk Anda untuk melihat ini dari rekaman YouTube Google I / O 2011:

Menghindari Bajak Laut dan Menghentikan Vampir

EDIT:

Catatan Presentasi dari Menghindar Bajak Laut dan Menghentikan Vampir

Beberapa titik kunci dasar

TryTryAgain
sumber
Tautan di atas tampaknya tidak selalu menuju ke halaman yang ditautkan ... sepertinya hanya berfungsi kadang-kadang dan agak tergantung pada OS dan browser. Jadi, perhatikan akhiran #%3ar.page.15di URL. Jika Anda tidak secara otomatis diarahkan ke halaman itu, pastikan untuk melihat tautan untuk melihat di mana / halaman apa yang seharusnya Anda lihat.
TryTryAgain
1
Bagus! Saya melihat mereka juga percaya pada Freemium dan menyembunyikan "kesalahan" tertentu dalam game (hanya menggunakan teknik lisensi). Saya ingin solusi lintas platform daripada server lisensi hanya Android. Tapi juga menarik.
BerggreenDK
btw. itu lucu, jawaban ini memiliki 15 jempol ke atas, milik saya sudah melewati 90 dan tidak menganggap jawaban yang tepat :-)
BerggreenDK
8

Saya tahu Anda tidak benar-benar kebingungan, tetapi saya benar-benar perlu bereaksi terhadap ini:

Dari sini, saya tidak ingin mengaburkan kode kami karena saya telah melihatnya rusak sebelumnya. Saya ingin sesuatu yang sedikit lebih solid, dan saya juga ingin belajar bagaimana melakukan ini dengan benar.

ProGuard sangat dapat diandalkan dalam pengalaman saya, dan ini walaupun saya menggunakan beberapa fitur canggih seperti AIDL dan beberapa kode asli yang memanggil metode Java .. Dibutuhkan sedikit kerja untuk membaca dokumentasi dan melakukan hal-hal dengan benar, tetapi begitu Anda sudah ada ProGuard yang sangat andal dan juga mengoptimalkan aplikasi Anda.

Trik keamanan / kriptografi kustom bagus, tetapi tanpa kebingungan itu seperti melempar batu ke dalam air menurut pendapat saya yang sederhana.

Saya telah menggunakan ProGuard dalam produksi selama berbulan-bulan, dan itu berfungsi dengan sempurna.

Jika Anda suka belajar, maka baca manual ProGuard dengan seksama, bereksperimenlah dengannya, dan periksa log keluarannya.

olivierg
sumber
apa pun yang bisa dibaca juga bisa didekompilasi, itu hanya masalah kekuatan CPU dan keras kepala. Kebingungan masih memungkinkan kode berjalan sehingga saat mendekompilasi / menghapus kode, cracker masih dapat membandingkan versi yang berjalan dengan yang asli. Mungkin menunda cracker atau menghentikan cracker yang kurang berpengalaman, tapi itu tidak aman sama sekali.
BerggreenDK
4

Peluangnya, bahwa ada lebih banyak programmer yang berbakat daripada ANDA (berlaku untuk semua programmer), adalah 100%. Dan jika itu benar, Anda tidak dapat memperbaiki peretasan. Tetapi Anda dapat menghabiskan banyak waktu dan upaya untuk bangkrut.

Jika Anda ingin menghasilkan uang serius, Anda perlu melakukan riset pada kelompok pengguna target Anda, dan ilmu perilaku. Anda perlu membuat pengguna bermain yang menghasilkan uang baru, dan hanya itu.

Selain itu, Anda salah semuanya. Peretas adalah anggota paling aktif dari basis pengguna Anda, Anda hanya berperilaku dengan cara yang tidak Anda inginkan.

Ambil game Zynga di Facebook misalnya, apakah Anda pikir Anda diretas? - Tentu, dan sekitar +100000 pemain hanya bermain, karena kamu dapat menggunakan bot, itu mengotomatiskan segalanya.

Memiliki botnet basis pengguna aktif yang besar dari orang-orang yang sebenarnya, membuat gamer tipe pengarsip ingin memainkan permainan - dan jika permainan Anda, dan itu terlihat keren, maka Avarage Joe juga ingin bermain. Jika Avarage Joe bermain, maka teman-temannya mungkin ingin bermain, dan kamu mungkin tidak akan peduli dengan yang lain, maka menjadi lebih baik dari temannya, menghabiskan waktu atau memiliki sesuatu untuk diajak mengobrol. Teman-teman Joe yang rata kemungkinan besar bersedia membayar untuk menjadi lebih baik daripada Joe, tetapi Anda ingin berinvestasi dalam sesuatu yang membuat mereka bisa menjadi lebih baik.

Selain itu jika nilai sebenarnya adalah memainkan game secara gratis, maka pengguna yang menggunakan versi hack gratis, kemungkinan besar tidak akan pernah membayar untuk itu. Tapi, kamu Avarage Joes dan teman-teman mereka mungkin saja. Jadi ini seperti iklan termurah yang bisa Anda miliki. Jika Anda ingin menghasilkan uang dari basis pengguna besar Anda, maka buat saja versi baru gim dengan perubahan kecil pada level dan grafik.

Margus
sumber
3

Pembajakan akan selalu menjadi masalah. Dengan cracker besar lebih baik dalam memainkan game Security Meskipun Obscurity ini daripada pengembang.

benteng
sumber
2

Sungguh pertanyaan yang menarik dan mengganggu. :-) Sebagai latihan, Anda dapat mencoba melepaskan aplikasi melalui Amazon; mereka memiliki mekanisme DRM sendiri; Saya ingin tahu apakah ini bekerja lebih baik daripada ProGuard ...

George Freeman
sumber
1
Sampai hari ini, aplikasi Lucky Patcher telah memecahkan Amazon DRM juga! Selain dari ProGuard, solusi lain mungkin adalah DexGuard. Tetapi DexGuard membutuhkan biaya beberapa ratus euro untuk membeli tetapi orang tidak dapat memastikan bahwa itu bahkan dapat melindungi kode Anda dari pembajakan ...
ChuongPham
2

Salah satu elemen kunci menurut saya adalah untuk menyebarkan kode sehingga tidak semua di satu tempat. Jika Anda memiliki fungsi bernama LicenseChecker.checkLicense () yang mengambil lisensi dan memeriksanya, Anda dapat yakin itu akan segera dinonaktifkan.

Satu keuntungan yang Anda miliki adalah bahwa cracker tidak dapat melihat komentar kode Anda (dan, jika Anda mengaburkan, metode / nama variabel), maka buatlah sesuatu yang aneh. Di onCreate () dari satu aktivitas, Anda mendapatkan ID lisensi. Di onResume (), Anda mendapatkan nilai lain untuk memeriksanya. Mungkin membuat utas dan melakukan beberapa pemeriksaan di sana. Dan kemudian, beberapa kode lain yang tidak relevan (mungkin kontrol pemain) dapat mengambil nilai dan membandingkannya dan menyimpan hasilnya di suatu tempat. Kemudian tiga bagian kode yang tidak relevan lainnya akan secara independen memeriksa nilai itu dan menonaktifkan aplikasi Anda jika tidak cocok.

Sekarang saya harus mengatakan di muka bahwa ini dapat menyebabkan sakit kepala untuk diri Anda sendiri - jelas, berantakan, kode jahat lebih sulit untuk di-debug dan cenderung menyebabkan kesalahan. Kasus terburuk, Anda membuat positif palsu dalam aplikasi yang dibeli secara sah.

Dan, tentu saja, semuanya dapat direkayasa ulang - begitu cracker menemukan tempat di mana aplikasi dinonaktifkan, mereka melacak kembali nilai yang sedang dibaca. Mereka kemudian dapat melacak kembali di mana itu disimpan, dan melacaknya kembali ..... atau, lebih mudah, mereka hanya dapat menonaktifkan pemeriksaan terakhir (itulah sebabnya saya merekomendasikan 3 tempat berbeda, semua memicu keterlambatan). Keamanan hanya sebaik tautan terlemah.

Anda tidak akan bisa menghentikan pembajakan. Taruhan terbaik Anda adalah untuk menunda penyebaran salinan bajakan sampai hype awal tentang aplikasi Anda telah tenang.

EboMike
sumber
1

Pertama, saya TIDAK menganggap diri saya pro di bidang keamanan SW, tetapi:

Saya pikir hal yang penting adalah membiarkan aplikasi bergantung pada beberapa bagian pada tanda tangan cek. Jangan biarkan itu memengaruhi dengan segera, tetapi biarkan ia mengatur beberapa flag atau mengubah beberapa nilai. nanti, gunakan flag-flag itu, periksa, biarkan tidak ada / salahnya menyebabkan pengecualian dari beberapa jenis yang mungkin akan menghentikan aplikasi. Selama pemeriksaan tanda tangan hanya relevan pada saat ini, mudah untuk mem-bypassnya, untuk menghapus garis, setelah menyentuh lebih banyak area dalam kode, aplikasi Anda menjadi lebih sulit (atau kurang mudah ...) untuk diretas. Juga seperti yang saya lihat, tidak semua cek harus memanggil rutin yang sama untuk sanksi, karena ini juga akan memudahkan untuk menemukan mekanisme perlindungan dan menghentikannya.

Tentu saja, sanksi untuk mengambil dalam kasus SW ilegal dapat bervariasi, Anda mungkin ingin menutup aplikasi ketika digunakan secara ilegal, tetapi Anda mungkin juga ingin tetap menjalankannya, dan hanya mengirim pesan yang meminta pengguna untuk membeli salinan resmi aplikasi.

Jika ini hanya apa yang tidak ingin Anda dengar, maka maaf untuk waktu Anda :)

MByD
sumber
7
Membuat aplikasi Anda mogok ketika Anda mendeteksi bahwa itu telah dibajak dapat menjadi bumerang, kecuali jika Anda membuatnya sangat eksplisit bahwa itu sebabnya aplikasi itu rusak. Saya ingat pernah membaca tentang beberapa pengembang game yang membuat game mereka crash setelah periode waktu acak jika gagal dalam pemeriksaan anti-pembajakan. Tentu saja, banyak orang membajaknya tetapi tidak menyadari bahwa tabrakan itu karena mereka menjalankan versi bajakan. Ini menghasilkan banyak pers buruk bagi para pengembang, dan mungkin telah merusak penjualan mereka.
Mitch Lindgren
3
@ Nyonya - Saya setuju. Saya memberikannya sebagai satu kemungkinan, tetapi strategi teknis "terbaik" mungkin, mungkin bukan strategi "bisnis" terbaik.
MByD
0

Pengguna Android hanya akan menerima rasa sakit dari rumah telepon yang konstan. Satu-satunya aplikasi Android yang aman adalah aplikasi Android yang selalu terhubung.

Ini sebagian besar karena penolakan Google untuk mengunci instalasi, seperti yang dimiliki Apple. Di iOS Anda harus melakukan jailbreak pada ponsel. Di Android Anda dapat memuat APK apa pun pada stok, instal pabrik.

Simpan sebagian / sebagian / semua konten Anda di server; kirimkan dalam potongan; memvalidasi lisensi / sesi pada setiap panggilan.

yetimoner
sumber
Klarifikasi: selagi Anda dapat melakukan root pada kedua platform tersebut, hanya sebagian kecil pengguna iOS yang akan takut untuk memasang pemasangan. Juga di banyak bagian dunia sulit atau tidak mungkin membayar untuk aplikasi Android, memicu pembajakan.
yetimoner
Ini sebenarnya adalah salah satu ide dari jawaban saya dari 2011 ... mengapa mempostingnya lagi?
BerggreenDK
0

Akan sangat sulit untuk menghambat perilaku semacam ini. Apa pun yang ditangani di sisi klien dapat diretas menggunakan dekompilasi dan modding APK, pengeditan memori dengan perangkat lunak seperti Game Guardian dll.

Satu-satunya cara saya bisa melihat bagaimana menyiasatinya, adalah membuat game online. Atau ada fungsi tertentu yang ditangani secara online. Atau jika enkripsi anti-tamper seperti denuvo pernah tersedia untuk Android / iOS.

Techinator
sumber