Saya ingin membuat aplikasi JavaScript yang bukan open source, dan karenanya saya ingin mempelajari cara mengaburkan kode JS saya? Apakah ini mungkin?
Saya ingin membuat aplikasi JavaScript yang bukan open source, dan karenanya saya ingin mempelajari cara mengaburkan kode JS saya? Apakah ini mungkin?
Jawaban:
Kebingungan:
Coba Kompresor YUI . Ini adalah alat yang sangat populer, dibangun, ditingkatkan dan dikelola oleh tim UI Yahoo.
Anda juga dapat menggunakan:
UPDATE: Pertanyaan ini awalnya ditanyakan lebih dari 10 tahun yang lalu, dan YUI tidak lagi dipertahankan. Google Closure Compiler masih digunakan, dan UglifyJS dapat dijalankan secara lokal melalui manajer paket simpul:npm install -g uglify-js
Data String Pribadi:
Menjaga nilai string tetap pribadi adalah masalah yang berbeda, dan kebingungan tidak akan benar-benar bermanfaat. Tentu saja, dengan mengemas sumber Anda ke dalam kekacauan, minified berantakan, Anda memiliki versi ringan keamanan melalui ketidakjelasan . Sebagian besar waktu, itu adalah pengguna Anda yang melihat sumber, dan nilai string pada klien dimaksudkan untuk penggunaannya, sehingga semacam nilai string pribadi tidak sering diperlukan.
Jika Anda benar-benar memiliki nilai yang Anda tidak ingin dilihat oleh pengguna, Anda akan memiliki beberapa opsi. Pertama, Anda bisa melakukan beberapa jenis enkripsi, yang didekripsi saat memuat halaman. Itu mungkin akan menjadi salah satu opsi yang paling aman, tetapi juga banyak pekerjaan yang mungkin tidak perlu. Anda mungkin dapat base64 mengkodekan beberapa nilai string, dan itu akan lebih mudah .. tetapi seseorang yang benar-benar menginginkan nilai-nilai string tersebut dapat dengan mudah mendekodekannya . Enkripsi adalah satu-satunya cara untuk benar-benar mencegah siapa pun mengakses data Anda, dan kebanyakan orang menemukan bahwa itu lebih aman daripada yang mereka butuhkan.
Sidenote:
Kebingungan dalam Javascript telah diketahui menyebabkan beberapa bug. Obfuscator menjadi sedikit lebih baik tentang hal itu, tetapi banyak pakaian memutuskan bahwa mereka melihat cukup banyak manfaat dari minifying dan gzipping , dan penghematan tambahan kebingungan tidak selalu sepadan dengan masalahnya . Jika Anda mencoba melindungi sumber Anda, mungkin Anda akan memutuskan bahwa itu layak untuk sementara, hanya untuk membuat kode Anda lebih sulit dibaca. JSMin adalah alternatif yang baik.
--preserve-semi
. Menulis ulang variabel pribadi ke a, b, c dll biasanya aman. Hal lain yang saya lakukan adalah membuat minifier meletakkan jeda baris setelah setiap titik koma di dalam kode --line-break 0
. Kemudian dalam produksi jika kesalahan saya paling tidak memiliki garis referensi yang valid untuk bekerja dan dapat menemukan kode itu dalam salinan pengembangan saya. Kalau tidak, Anda hanya berakhir dengan kesalahan pada garis besar kode dan tidak tahu di mana kesalahan itu.
Saya terkejut tidak ada yang menyebutkan Google's Closure Compiler . Itu tidak hanya mengecilkan / mengkompres, itu menganalisis untuk menemukan dan menghapus kode yang tidak digunakan, dan menulis ulang untuk minifikasi maksimum. Itu juga bisa melakukan pengecekan tipe dan akan memperingatkan tentang kesalahan sintaksis.
JQuery baru-baru ini beralih dari YUI Compresser ke Closure Compiler, dan melihat " peningkatan yang solid "
Kebingungan tidak akan pernah benar-benar berhasil. Bagi siapa saja yang benar-benar ingin mendapatkan kode Anda, itu hanya gundukan cepat. Lebih buruk lagi, ini membuat pengguna Anda tidak memperbaiki bug (dan mengirimkan perbaikan kembali kepada Anda), dan membuat Anda lebih sulit untuk mendiagnosis masalah di lapangan. Buang-buang waktu dan uang Anda.
Bicaralah dengan pengacara tentang hukum kekayaan intelektual dan apa pilihan hukum Anda. "Open Source" tidak berarti "orang dapat membaca sumbernya". Sebagai gantinya, Open Source adalah model lisensi tertentu yang memberikan izin untuk secara bebas menggunakan dan memodifikasi kode Anda. Jika Anda tidak memberikan lisensi seperti itu maka orang yang menyalin kode Anda melanggar dan (di sebagian besar dunia) Anda memiliki opsi hukum untuk menghentikannya.
Satu-satunya cara Anda benar-benar dapat melindungi kode Anda adalah dengan tidak mengirimkannya. Pindahkan kode penting di sisi server dan minta kode Javascript publik Anda melakukan panggilan Ajax.
Anda dapat mengaburkan sumber javascript semua yang Anda inginkan, tetapi akan selalu dapat direkayasa ulang hanya karena mengharuskan semua kode sumber untuk benar-benar berjalan pada mesin klien ... pilihan terbaik yang dapat saya pikirkan adalah menyelesaikan semua pemrosesan Anda. dengan kode sisi server, dan semua kode klien yang dilakukan javascript adalah mengirim permintaan untuk diproses ke server itu sendiri. Kalau tidak, siapa pun akan selalu dapat melacak semua operasi yang dilakukan kode.
Seseorang menyebut base64 untuk menjaga agar string tetap aman. Ini ide yang buruk. Base64 segera dikenali oleh tipe orang yang ingin merekayasa balik kode Anda. Hal pertama yang akan mereka lakukan adalah membuka kode dan melihat apa itu.
Ada sejumlah alat kebingungan JavaScript yang tersedia secara bebas; Namun, saya pikir penting untuk dicatat bahwa sulit untuk mengaburkan JavaScript ke titik di mana ia tidak dapat direkayasa ulang.
Untuk itu, ada beberapa opsi yang telah saya gunakan untuk beberapa derajat lembur:
Kompresor YUI . JavaScript JavaScript compressor melakukan pekerjaan yang baik untuk mengkondensasi kode yang akan meningkatkan waktu pemuatannya. Ada tingkat kebingungan kecil yang bekerja relatif baik. Intinya, Compressor akan mengubah nama fungsi, menghilangkan spasi, dan memodifikasi variabel lokal. Inilah yang paling sering saya gunakan. Ini adalah alat berbasis Java open-source.
JSMin adalah alat yang ditulis oleh Douglas Crockford yang berupaya untuk memperkecil sumber JavaScript Anda. Dalam kata-kata Crockford sendiri, "JSMin tidak mengaburkan, tapi itu jelek." Tujuan utamanya adalah memperkecil ukuran sumber Anda untuk memuat lebih cepat di peramban.
Obfuscator JavaScript Gratis . Ini adalah alat berbasis web yang mencoba mengaburkan kode Anda dengan benar-benar menyandikannya. Saya pikir trade-off dari bentuk encoding (atau kebingungan) dapat datang pada biaya filesize; Namun, itu masalah preferensi pribadi.
[ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]
vars menjadi setidaknya [var1, var2,..]
dalam satu menit. Saya benar-benar dapat menghapus, meng-indentasi, dan mencari / mengganti nama var dalam waktu dua menit. Dan tidak, saya lebih pintar dari Jr. Dev rata-rata. Fakta sederhananya adalah, TIDAK ada cara untuk mengaburkan JS sisi klien. Anda dapat membeli sendiri 5 menit, MAX, tetapi tidak ada gunanya. Barang ini benar-benar hanya untuk menjual seseorang yang tidak tahu kode tentang menambahkan "Keamanan". Tidak seorang pun yang pernah menulis sebaris JS akan membeli omong kosong itu.
Apa yang akan saya lakukan:
A. Troll si hacker!
Ini akan berada di bagian kedua kode peluncur rahasia palsu / dikaburkan saya. Yang Anda lihat di kode sumber.
Apa kode ini?
var ajax=function(a,b,d,c,e,f){
e=new FormData();
for(f in d){e.append(f,d[f]);};
c=new XMLHttpRequest();
c.open('POST',a);
c.setRequestHeader("Troll1","lol");
c.onload=b;
c.send(e);
};
window.onload=function(){
ajax('Troll.php',function(){
(new Function(atob(this.response)))()
},{'Troll2':'lol'});
}
B. Mengaburkan kode sedikit
Apa itu?
(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()
C Buat file php yang sulit ditampilkan dengan kode asli di dalamnya
Apa ini kode php?
Jika semuanya baik-baik saja itu akan menunjukkan kepada Anda kode yang benar lain kode palsu atau larangan ip, tutup halaman .. apa pun.
<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>
base64 referrer = http://here.is/my/launcher.html
SECRET javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';
PALSU = window.open('', '_self', '');window.close();
Sekarang .. jika Anda mendefinisikan event handler di javascript SECRET itu mungkin dapat diakses .. Anda perlu mendefinisikannya di luar dengan kode peluncuran dan menunjuk ke fungsi SECRET bersarang.
JADI ... adakah cara mudah untuk mendapatkan kodenya?
document.body.appendChild(document.createElement('div')).innerText='Awesome';
Saya tidak yakin apakah ini berfungsi tetapi saya menggunakan chrome dan memeriksa Elemen, Sumber Daya, Jaringan, Sumber, Garis Waktu, Profil, Audit tetapi saya tidak menemukan baris di atas.
note1: jika Anda membuka url Troll.php dari Inspect element-> jaringan di chrome Anda mendapatkan kode palsu.
note2: seluruh kode ditulis untuk browser modern. polyfill membutuhkan lebih banyak kode.
EDIT
launcher.html
<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>
Troll.php
<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>
Coba JScrambler . Saya memberikan spin baru-baru ini dan terkesan olehnya. Ini menyediakan satu set templat untuk kebingungan dengan pengaturan yang telah ditentukan untuk mereka yang tidak terlalu peduli tentang detail dan hanya ingin menyelesaikannya dengan cepat. Anda juga dapat membuat kebingungan kustom dengan memilih transformasi / teknik apa pun yang Anda inginkan.
Masalah dengan bahasa yang ditafsirkan, adalah bahwa Anda mengirim sumber untuk membuatnya bekerja (kecuali jika Anda memiliki compiler untuk bytecode, tapi sekali lagi, itu cukup sepele untuk mendekompilasi).
Jadi, jika Anda tidak ingin mengorbankan kinerja, Anda hanya dapat bertindak atas nama variabel dan fungsi, misalnya. menggantinya dengan a, b ... aa, ab ... atau a101, a102, dll. Dan, tentu saja, hapus ruang / baris baru sebanyak yang Anda bisa (itulah yang disebut dengan JS compressor lakukan).
String yang mengaburkan akan memiliki hit kinerja, jika Anda harus mengenkripsi dan mendekripsi mereka secara real time. Ditambah JS debugger dapat menunjukkan nilai akhir ...
Bertentangan dengan sebagian besar jawaban lain yang saya sarankan terhadap YUI Compressor; Anda harus menggunakan Google Closure .
Tidak banyak karena kompres lebih banyak, tetapi sebagian besar karena itu akan menangkap kesalahan javascript seperti a = [1,2,3,];
yang membuat IE rusak.
Aplikasi non-open-source berbasis Javascript cukup konyol. Javascript adalah bahasa yang ditafsirkan sisi klien .. Kebingungan tidak banyak perlindungan ..
Kebingungan JS biasanya dilakukan untuk mengurangi ukuran skrip, daripada "melindunginya". Jika Anda berada dalam situasi di mana Anda tidak ingin kode Anda dipublikasikan, Javascript bukan bahasa yang tepat ..
Ada banyak alat di sekitar, tetapi sebagian besar memiliki kata "kompresor" (atau "minifier") dalam namanya karena suatu alasan ..
Anda tidak dapat mengamankan kode sisi klien: cukup tekan F12 di Google Chrome, jeda eksekusi javascript dan Anda akan mendapatkan semua string, bahkan yang dienkripsi. Mempercantik dan mengubah nama variabel dan Anda akan mendapatkan hampir kode aslinya.
Jika Anda menulis javascript sisi server (yaitu NodeJS) takut seseorang meretas ke server Anda dan ingin membuat peretas bekerja lebih sulit, memberi Anda lebih banyak waktu untuk mendapatkan akses kembali, kemudian gunakan kompiler javacript :
Anda perlu menggunakan Closure Compiler pada Advanced Compilation, karena itu satu-satunya alat yang mengubah nama semua variabel Anda, bahkan jika itu digunakan dalam banyak file / modul. Tapi itu hanya memiliki masalah: itu hanya berfungsi jika Anda menulis dengan gaya pengkodean .
Saya dapat merekomendasikan Utilitas JavaScript oleh Patrick J. O'Neil. Itu dapat mengaburkan / memadatkan dan mengompres dan tampaknya cukup bagus dalam hal ini. Yang mengatakan, saya tidak pernah mencoba mengintegrasikannya dalam skrip build apa pun.
Adapun membingungkan vs minifying - Saya bukan penggemar yang lama. Itu membuat debugging tidak mungkin (Kesalahan pada baris 1 ... "tunggu, hanya ada satu baris") dan mereka selalu mengambil waktu untuk membongkar. Tetapi jika Anda perlu ... yah.
Pertama saya sarankan minify dengan sesuatu seperti YUI Compressor, dan kemudian konversikan semua string dan angka menjadi HEX Values menggunakan sesuatu seperti http://www.javascriptobfuscator.com/
Dengan ini, kode akan dibuat hampir mustahil untuk dipahami dan saya pikir pada tahap ini akan lebih banyak waktu bagi seorang peretas untuk membuat ulang kode Anda daripada benar-benar jika dia menulis ulang dari awal. Menulis ulang dan Kloning adalah hal yang tidak bisa Anda hentikan. Lagipula kita adalah orang bebas!
Packer Dean Edward adalah obfuscator yang sangat baik, meskipun itu terutama mengaburkan kode, bukan elemen string yang mungkin Anda miliki dalam kode Anda.
Lihat: Alat Kompresi Javascript Online dan pilih Packer (Dean Edwards) dari dropdown
Coba alat ini Javascript Obfuscator
Saya menggunakannya pada permainan HTML5 saya tidak hanya mengurangi ukurannya dari 950KB menjadi 150 tetapi juga membuat kode sumber kompiler penutupan dan minifiers yang tidak dapat dibalik dapat dibalik. Saya pribadi tidak tahu bagaimana cara membalikkan kebingungan ini.
Saya telah menggunakan Jasob selama bertahun-tahun dan ini adalah obfuscator terbaik di luar sana.
Ini memiliki UI canggih tetapi masih intuitif dan mudah digunakan.
Ini juga akan menangani file HTML dan CSS.
Cara terbaik untuk menggunakannya adalah dengan awalan semua variabel pribadi Anda dengan sesuatu seperti garis bawah, kemudian gunakan sort
fitur untuk mengelompokkan semuanya dan periksa sebagai target untuk kebingungan.
Pengguna masih dapat melihat sumber Anda, tetapi jauh lebih sulit untuk menguraikan ketika variabel pribadi Anda dikonversi dari sesuatu seperti _sUserPreferredNickName
ke a
.
Mesin akan secara otomatis menghitung jumlah variabel yang ditargetkan dan memprioritaskan mereka untuk mendapatkan kompresi maksimum.
Saya tidak bekerja untuk Jasob dan saya tidak mendapatkan apa-apa dari mempromosikan mereka, hanya menawarkan beberapa saran ramah.
The downside adalah bahwa itu tidak gratis dan sedikit mahal, tetapi masih layak ketika ditumpuk terhadap alternatif - opsi 'gratis' bahkan tidak mendekati.
Sudahkah Anda mencoba Bananascript ? Ini menghasilkan kode yang sangat terkompresi dan benar-benar tidak dapat dibaca.
eval()
di baris terakhir ke console.log()
dan konsol Anda akan memuntahkan semuanya
Saya menggunakan utilitas Closure-Compiler untuk kebingungan java-script. Ini mengecilkan kode dan memiliki lebih banyak opsi untuk kebingungan. Utilitas ini tersedia di kode Google di bawah URL:
Alat Penutupan
Tapi sekarang hari saya mendengar banyak tentang UglifyJS. Anda dapat menemukan berbagai perbandingan antara Closure Compiler dan UglifyJS di mana Uglify tampaknya menjadi pemenang.
UglifyJS: Kompresor JavaScript Baru Cepat Untuk Node.js Yang Setara Dengan Penutupan
Segera saya akan memberi kesempatan kepada UglifyJS.
Sebagai obfuscator / kompresor JavaScript / HTML / CSS Anda juga dapat mencoba Patu Digua .
Yang ini mengecilkan tetapi tidak mengaburkan. Jika Anda tidak ingin menggunakan baris perintah Java, Anda dapat menempelkan javascript ke formulir web.
Anda pasti harus mempertimbangkan untuk melihat Obfuscriptor .
Saya melampaui trik minifying Javascript khas yang telah kita lihat dari alat lain seperti YUI Compressor atau Google Closure .
Kode yang dikaburkan terlihat lebih seperti dienkripsi. Tidak seperti apapun yang pernah saya lihat sebelumnya.
Jika Anda menggunakan pustaka JavaScript, pertimbangkan Dojo Toolkit yang kompatibel (setelah modifikasi kecil) dengan kompilasi mode Advanced Closure Compiler.
Dojo - Satu-satunya Perpustakaan JavaScript yang Kompatibel dengan The Closure Compiler
Kode yang dikompilasi dengan mode Penutupan Tingkat Lanjut hampir tidak mungkin untuk direkayasa ulang, bahkan melewati perindah, karena seluruh basis kode (termasuk perpustakaan) dikaburkan. Ini juga rata-rata 25% kecil.
Kode JavaScript yang hanya diperkecil (Kompresor YUI, Uglify, dll.) Mudah direkayasa ulang setelah melewati ahli kecantikan.
Saya telah menggunakan ini di masa lalu, dan itu melakukan pekerjaan dengan baik. Ini tidak gratis, tetapi Anda harus melihatnya.
JavaScript Obfuscator & Encoder