Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Workflow

Lindungi File Flash Anda Dari Pengurai dengan Menggunakan Enkripsi

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Keti Pritania (you can also view the original English article)

Dua kali sebulan, kami mengunjungi kembali beberapa posting favorit pembaca kami dari sepanjang sejarah Activetuts +. Tutorial ini pertama kali diterbitkan pada Februari 2010.

Dalam tutorial ini saya akan menunjukkan teknik yang saya gunakan untuk melindungi kode dan aset dari pencurian.

Decompilers adalah khawatir nyata bagi orang-orang yang membuat konten Flash. Anda dapat menempatkan banyak usaha ke dalam membuat permainan terbaik di luar sana, maka seseorang dapat mencuri, mengganti logo dan meletakkannya di situs mereka tanpa meminta Anda. Bagaimana? Menggunakan Flash Decompiler. Kecuali Anda menaruh beberapa perlindungan atas SWF Anda dapat decompiled dengan menekan sebuah tombol dan decompiler akan menampilkan kode sumber terbaca.


Sebelum kita mulai

Saya menggunakan proyek kecil saya untuk menunjukkan betapa rapuhnya SWFs untuk decompilation. Anda dapat men-download dan menguji diri Anda sendiri melalui sumber link di atas. Saya menggunakan Sothink SWF Decompiler 5 untuk mendekompilasi SWF dan melihat di bawah kap. Kode ini cukup mudah dibaca dan Anda dapat memahami dan menggunakannya cukup mudah.


Apa boleh buat?

Saya datang dengan sebuah teknik untuk melindungi SWFs dari decompilers dan aku akan menunjukkan hal itu dalam tutorial ini. Kita harus mampu menghasilkan ini:

Kode yang adalah decompiled adalah benar-benar kode untuk mendekripsi konten dan tidak ada hubungannya dengan kode utama Anda. Selain itu, nama ilegal, jadi itu tidak akan menyusun kembali. Mencoba untuk mendekompilasi itu sendiri.

Sebelum kami pergi, saya ingin menunjukkan bahwa tutorial ini tidak cocok untuk pemula dan Anda harus memiliki pengetahuan padat AS3 jika Anda ingin mengikuti bersama. Tutorial ini adalah juga tentang pemrograman tingkat rendah yang melibatkan byte, ByteArrays dan memanipulasi file SWF dengan hex editor.

Inilah yang kami butuhkan:

  • SWF untuk melindungi. Jangan ragu untuk men-download SWF aku akan bekerja pada.
  • Flex SDK. Kita akan menggunakan ini untuk menanamkan konten menggunakan Embed tag. Anda dapat mendownloadnya dari opensource.adobe.com.
  • Hex editor. Aku akan menggunakan editor gratis yang disebut Hex-Ed. Anda dapat mendownloadnya dari nielshorn.net atau Anda dapat menggunakan editor pilihan Anda.
  • Decompiler. Sementara tidak perlu, akan lebih baik untuk memeriksa jika perlindungan kami benar-benar bekerja. Anda dapat mengambil sebuah pengadilan Sothink SWF Decompiler dari sothink.com

Langkah 1: Beban SWF pada saat Runtime

Buka proyek ActionScript 3.0 baru, dan atur untuk dikompilasi dengan Flex SDK (Saya menggunakan FlashDevelop untuk menulis kode). Pilih SWF yang ingin Anda lindungi dan embed sebagai data biner menggunakan tag Embed:

Sekarang SWF tertanam sebagai ByteArray ke loader SWF dan itu dapat dimuat melalui Loader.loadBytes().

Pada akhirnya, kami harus memiliki kode ini:

Kompilasi dan melihat apakah ia bekerja (harus). Sekarang saya akan memanggil SWF tertanam "SWF dilindungi", dan SWF kami hanya mengumpulkan "loading SWF".


Langkah 2: Menganalisis hasil

Mari kita mencoba untuk mendekompilasi dan melihat apakah ia bekerja.

Ya! Aset dan kode asli hilang! Apa yang ditampilkan sekarang adalah kode yang memuat SWF yang dilindungi dan bukan kontennya. Ini mungkin akan menghentikan sebagian besar para penyerang pertama kali yang tidak terlalu akrab dengan Flash tetapi masih tidak cukup baik untuk melindungi pekerjaan Anda dari penyerang terampil karena SWF dilindungi yang menunggu untuk mereka yang tak tersentuh di dalam pemuatan SWF.


Langkah 3: Dekompresi SWF

Mari kita membuka pemuatan SWF dengan editor hex yang:

Seharusnya terlihat seperti data biner acak karena itu dikompresi dan harus mulai dengan ASCII "CWS". Kita perlu dekompresi itu! (Jika Anda SWF dimulai dengan "FWS" dan Anda melihat bermakna string di SWF ada kemungkinan bahwa itu tidak mendapatkan dikompresi. Anda harus mengaktifkan kompresi mengikutinya).

Pada awalnya mungkin terdengar sulit tapi tidak. SWF format adalah format terbuka dan ada dokumen yang menjelaskan hal itu. Download dari adobe.com dan gulir ke bawah untuk halaman 25 dalam dokumen. Ada gambaran dari header dan bagaimana SWF dikompresi, sehingga kita dapat menguraikannya dengan mudah.

Apa yang tertulis ada 3 byte pertama adalah tanda tangan (CWS atau FWS), byte berikutnya adalah versi Flash, 4 byte berikutnya adalah ukuran SWF. Yang tersisa adalah dikompresi jika tanda tangan adalah CWS atau terkompresi jika tanda tangan adalah FWS. Mari kita menulis fungsi sederhana untuk dekompresi SWF:

Fungsi melakukan beberapa hal:

  1. Membaca header terkompresi (pertama 8 byte) tanpa tanda tangan dan ingat.
  2. It membaca sisa data dan uncompresses itu.
  3. Ia menulis kembali header (dengan tanda tangan "FWS") dan data yang dikompresi, membuat baru, tak terkompresi SWF.

Langkah 4: Menciptakan utilitas

Selanjutnya kita akan menciptakan sebuah utilitas berguna di Flash untuk mengkompresi dan dekompresi file SWF. Dalam proyek baru AS3, mengkompilasi kelas berikut sebagai kelas dokumen:

Seperti Anda mungkin menyadari bahwa saya telah menambahkan 2 hal: File pemuatan dan fungsi kompres.

Fungsi kompres identik dengan fungsi decompress, tetapi secara terbalik. File pemuatan dilakukan menggunakan FileReference (FP10 diperlukan) dan file yang dimuat adalah baik dikompresi atau terkompresi. Perhatikan bahwa Anda harus menjalankan SWF lokal dari pemain mandiri, seperti FileReference.browse() harus dipanggil oleh interaksi pengguna (tapi player standalone lokal memungkinkan untuk menjalankannya tanpa).


Langkah 5: Mengompresi SWF Pemuatan

Untuk menguji alat, api itu, pilih pemuatan SWF dan memilih tempat untuk menyimpannya. Kemudian membukanya dengan hex editor dan menggosok melalui. Anda akan melihat string ascii dalam seperti ini:


Langkah 6: Menganalisis lagi

Mari kita kembali ke langkah 2. Sementara decompiler tidak menunjukkan info berguna tentang SWF dilindungi, dan akan sangat mudah untuk mendapatkan SWF dari loader sekarang terkompresi; hanya mencari tanda tangan "CWS" (jika SWF dilindungi terkompresi pencarian untuk "FWS") dan melihat hasilnya:

Apa yang kami temukan adalah tag DefineBinaryData yang berisi SWF dilindungi, dan mengambilnya dari sana adalah sepotong kue. Kami juga akan menambah lapisan lain perlindungan atas pemuatan SWF: enkripsi.


Langkah 7: enkripsi

Untuk membuat SWF dilindungi kurang "diakses" kita akan menambahkan beberapa jenis enkripsi. Saya memilih untuk menggunakan as3crypto dan Anda dapat mendownloadnya dari code.google.com. Anda dapat menggunakan perpustakaan apapun yang Anda inginkan sebagai gantinya (atau pelaksanaan Anda sendiri, bahkan lebih baik), satu-satunya persyaratan adalah bahwa hal itu harus dapat untuk mengenkripsi dan mendekripsi data biner menggunakan kunci.


Langkah 8: Enkripsi Data

Hal pertama yang ingin kita lakukan adalah menulis sebuah utilitas untuk mengenkripsi SWF dilindungi sebelum kami menanamkan. Hal ini membutuhkan pengetahuan yang sangat dasar perpustakaan as3crypto dan itu cukup sederhana. Menambahkan perpustakaan ke jalan perpustakaan Anda dan mari kita mulai dengan menulis berikut:

Apa yang terjadi sini? Kami menggunakan kelas dari as3crypto disebut AESKey untuk mengenkripsi konten. Kelas mengenkripsi 16 byte dalam waktu (128-bit), dan kita harus untuk-loop atas data untuk mengenkripsi semua itu. Perhatikan baris kedua: data.length & ~ 15. Itu memastikan bahwa jumlah byte yang dienkripsi dapat dibagi dengan 16 dan kami tidak kehabisan data saat memanggil aes.encrypt ().

Catatan: Penting untuk memahami titik enkripsi dalam kasus ini. Ini tidak benar-benar enkripsi, tetapi agak membingungkan karena kami memasukkan kunci di dalam SWF. Tujuannya adalah untuk menjadi data biner sampah, dan kode di atas pekerjaan itu, meskipun dapat meninggalkan hingga 15 byte tidak dienkripsi (yang tidak penting dalam kasus kami). Saya tidak cryptographer, dan aku cukup yakin bahwa kode di atas dapat melihat lumpuh dan lemah dari sudut pandang cryptographer, tapi seperti yang saya katakan tidak cukup relevan seperti kami menyertakan kunci dalam SWF.


Langkah 9: Enkripsi utilitas

Saatnya membuat utilitas lain yang akan membantu kami mengenkripsi file SWF. Ini hampir sama dengan kompresor yang kami buat sebelumnya, jadi saya tidak akan banyak bicara tentang itu. Kompilasi dalam proyek baru sebagai kelas dokumen:

Sekarang jalankan, dan membuat salinan dienkripsi SWF dilindungi dengan memilih pertama dan kemudian menyimpannya di bawah nama yang berbeda.


Langkah 10: Memodifikasi Loader

Kembali ke proyek pemuatan SWF. Karena konten sekarang dienkripsi, kita perlu memodifikasi pemuatan SWF dan menambahkan kode dekripsi ke dalamnya. Jangan lupa untuk mengubah src pada tag Embed untuk menunjuk ke SWF terenkripsi.

Ini sama seperti sebelumnya kecuali dengan kode dekripsi terjebak di tengah. Sekarang kompilasi SWF pemuatan dan uji apakah itu berhasil. Jika Anda mengikuti dengan hati-hati hingga sekarang, SWF yang dilindungi harus dimuat dan ditampilkan tanpa kesalahan.


Langkah 11: Melihat ke dalam menggunakan Decompiler

Buka SWF memuat baru dengan dekompiler dan lihat.

Ini berisi lebih dari seribu baris kode enkripsi tampak sulit, dan hal ini mungkin sulit untuk mendapatkan SWF dilindungi dari itu. Kami telah menambahkan beberapa langkah penyerang harus melakukan:

  1. Dia (atau dia) harus menemukan DefineBinaryData yang menyimpan konten terenkripsi dan mengekstraknya.
  2. Dia harus membuat sebuah utilitas untuk melakukan dekripsi.

Masalahnya adalah bahwa membuat sebuah utilitas sederhana seperti copy-paste dari decompiler ke editor kode dan tweaking kode sedikit. Aku mencoba untuk memecahkan perlindungan saya sendiri, dan itu cukup mudah - aku berhasil melakukannya di sekitar 5 menit. Jadi kita akan harus mengambil beberapa pengukuran terhadap hal itu.


Langkah 12: Kekaburan Tali

Pertama kita akan menempatkan SWF yang dilindungi ke dalam SWF pemuatan, kemudian mengenkripsi itu, dan sekarang kita akan menempatkan sentuhan akhir ke SWF pemuatan. Kami akan mengganti nama kelas, fungsi, dan variabel menjadi nama ilegal.

Saya maksud nama-nama seperti, mengatakan nama ilegal! @@, ^ #^ dan (^_^). Yang keren adalah bahwa hal ini kompilator tetapi tidak untuk Flash Player. Ketika kompilator pertemuan karakter ilegal di dalam pengidentifikasi, gagal untuk mengurai mereka dan dengan demikian proyek gagal untuk mengkompilasi. Di sisi lain, Player tidak memiliki masalah dengan nama-nama ilegal itu. Kita dapat mengkompilasi SWF dengan pengidentifikasi hukum, mendekompresinya dan menamainya menjadi banyak simbol ilegal yang tidak berarti. Decompiler akan menampilkan kode ilegal dan penyerang akan memiliki untuk pergi ke ratusan baris kode secara manual, menghapus ilegal pengidentifikasi sebelum ia dapat mengkompilasi. Dia layak untuk itu!

Ini adalah tampilannya sebelum kekusutan string:

Mari kita mulai! Dekompresi pemuatan SWF menggunakan utilitas kita buat sebelumnya dan api up hex editor.


Langkah 13: Kebingungan pertama Anda

Mari kita coba untuk mengubah nama kelas dokumen. Dengan asumsi Anda sudah meninggalkan nama asli (utama), mari kita cari untuk itu di loader terkompresi SWF dengan editor hex yang:

Mengubah nama "Main";;. Sekarang mencari s "Main" lain dan mengubah nama mereka;; terlalu.

Kapan mengganti pastikan bahwa Anda tidak mengubah string tidak perlu atau SWF tidak akan berjalan.

Simpan dan menjalankan SWF. Ia bekerja! Dan melihat apa decompiler mengatakan:

Kemenangan!! :)


Langkah 14: Mengganti Nama Kelas

Menjaga mengganti seluruh kelas Anda. Memilih nama kelas dan Cari untuk itu, menggantikannya dengan simbol-simbol ilegal sampai Anda mencapai akhir dari file. Seperti saya katakan, hal yang paling penting di sini adalah untuk menggunakan akal sehat Anda, pastikan Anda tidak mengacaukan SWF Anda. Setelah mengubah nama kelas Anda dapat mulai mengganti nama paket. Perhatikan bahwa ketika mengganti nama paket, Anda dapat menghapus periode juga dan membuat nama satu paket lama ilegal. Lihat apa yang saya membuat:

Setelah Anda selesai mengganti nama kelas dan paket, Anda dapat mulai mengubah nama fungsi dan variabel. Mereka bahkan lebih mudah untuk mengganti nama karena biasanya hanya muncul sekali, dalam satu awan besar. Sekali lagi, pastikan Anda mengubah hanya metode "Anda" dan tidak built-in Flash metode. Pastikan Anda tidak menghapus kunci ("activetuts" dalam kasus kami).


Langkah 15: Kompres SWF

Setelah Anda selesai mengganti nama, Anda mungkin ingin mengompres SWF sehingga ukurannya akan lebih kecil. Tidak masalah, kita dapat menggunakan utilitas mengompresi kita buat sebelumnya dan akan melakukan pekerjaan. Jalankan utilitas, pilih SWF dan menyimpannya di bawah nama lain.


Kesimpulan: Memiliki pandangan akhir

Membukanya terakhir kalinya dan melihat. Kelas-kelas, variabel dan nama metode baru dan SWF dilindungi adalah suatu tempat di dalam, dienkripsi. Teknik ini bisa lambat untuk diterapkan pada awalnya, tetapi setelah beberapa kali hanya butuh beberapa menit.

Beberapa waktu yang lalu saya membuat utilitas otomatis untuk menyuntikkan SWF yang dilindungi untuk saya ke dalam memuat SWF, dan itu berfungsi dengan baik. Satu-satunya masalah adalah bahwa jika dapat disuntikkan menggunakan utilitas otomatis, itu dapat didekripsi menggunakan utilitas lain, jadi jika penyerang membuat utilitas untuk itu ia akan mendapatkan semua SWF Anda dengan mudah. Karena ini saya lebih suka untuk melindungi SWF secara manual setiap kali, menambahkan sedikit modifikasi sehingga akan lebih sulit untuk mengotomatisasi.

Aplikasi lain yang bagus teknik adalah Domain penguncian. Bukan mendekripsi SWF dengan string konstan Anda dapat mendekripsi dengan domain SWF yang sedang berjalan di. Jadi daripada if pernyataan untuk memeriksa domain, Anda dapat memperkenalkan cara yang lebih kuat untuk melindungi SWF dari penempatan di situs lain.

Hal terakhir, Anda mungkin ingin mengganti kode enkripsi dengan implementasi Anda sendiri. Mengapa? Kami menginvestasikan upaya dalam membuat kode kripto ilegal, tetapi kode yang kami gunakan adalah dari populer open source perpustakaan dan penyerang dapat mengenalinya dengan demikian. Ia akan mengunduh salinan yang bersih, dan semua pekerjaan kebingungan tidak perlu dilakukan. Di sisi lain, menggunakan implementasi Anda sendiri akan mengharuskannya untuk memperbaiki semua nama ilegal sebelum ia dapat melanjutkan.


Metode perlindungan lain

Karena pencurian SWF adalah masalah besar di dunia Flash, ada pilihan lain untuk melindungi SWFs. Ada banyak program luar sana untuk mengaburkan seperti pada tingkat bytecode (seperti Kindisoft's secureSWF). Mereka mengacaukan bytecode dikompilasi dan ketika decompiler berusaha untuk output kode itu akan gagal, dan bahkan crash kadang-kadang. Tentu saja ini perlindungan lebih baik dalam hal keamanan tapi biaya $$$, sehingga sebelum memilih cara melindungi SWF Anda mempertimbangkan jumlah keamanan yang diperlukan. Jika ini adalah tentang melindungi algoritma kepemilikan studio Flash 50-karyawan Anda telah mengembangkan selama dua tahun, Anda dapat mempertimbangkan sesuatu yang lebih baik kemudian berganti nama variabel. Di sisi lain, jika Anda ingin mencegah anak-anak mengirimkan skor tinggi palsu, Anda dapat mempertimbangkan untuk menggunakan teknik ini.

Apa yang saya suka tentang teknik ini adalah kenyataan bahwa Anda dilindungi SWF dibiarkan saja ketika menjalankan. Kebingungan tampers dengan kode byte dan itu mungkin bisa merusak SWF dan menyebabkan bug (walaupun saya belum menemukan apapun sendiri).

Itu saja untuk hari ini, harap Anda menikmati tutorial dan belajar sesuatu yang baru! Jika Anda memiliki pertanyaan jangan ragu untuk drop komentar.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.