Bagaimana saya bisa mengaburkan (melindungi) JavaScript? [Tutup]

714

Saya ingin membuat aplikasi JavaScript yang bukan open source, dan karenanya saya ingin mempelajari cara mengaburkan kode JS saya? Apakah ini mungkin?

Teifion
sumber
15
Saya tertarik mendengar alasan Anda mencoba mengaburkan kode, mungkin memberikan konteks yang diperlukan untuk memberikan jawaban yang bermanfaat.
JohnFx
45
Satu-satunya cara untuk benar-benar merahasiakan sesuatu adalah dengan tidak mengirimkannya ke klien . Jika mereka tidak memilikinya, mereka tidak dapat membacanya. Mengirimnya terenkripsi hanya meminta masalah di tangan beberapa orang yang benar-benar peduli, dan semua orang tidak akan melihat-lihat meskipun Anda mengirimkannya dengan jelas (bdk DRM).
Donal Fellows
8
Mengacaukan kode Anda bukan ide yang baik. Itu hanya akan merepotkan pengguna yang sah (mis. Ketika mereka perlu memperbaiki bug), dan tidak melakukan apa pun untuk 'melindunginya' dari orang-orang yang memiliki insentif (finansial) untuk merekayasa baliknya. Pada dasarnya tidak mungkin untuk mencegah rekayasa ulang kode Javascript.
Sven Slootweg
14
Argumen untuk tidak mengaburkan tampaknya cacat bagi saya. Kecuali Anda benar-benar berpikir pengguna Anda dapat memperbaiki / melaporkan bug, maka Anda harus melakukannya. Itu dapat mengurangi waktu muat dengan meminimalkan. Itu tidak akan pernah menghentikan seorang hacker yang benar-benar berdedikasi, tetapi itu akan memperlambatnya dan itu akan menghentikan upaya peretasan setengah-arsed. Ini sangat mudah dilakukan dan ada banyak alat (lihat jawaban lain), saya katakan pasti melakukannya karena hanya ada keuntungan sebagian besar waktu, tetapi jangan berharap itu membawa keamanan nyata atau untuk menghentikan seseorang menyalin kode Anda jika mereka benar-benar mau. Satu-satunya cara untuk melakukan ini adalah menjaga sisi server kode dan menggunakan ajax.
Benjamin

Jawaban:

405

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.

keparo
sumber
32
Saya ingin menambahkan bahwa melakukan pengkodean base64 tidak akan bermanfaat bagi keamanan, karena ini adalah prosedur yang dapat dibalik sepele. Bahkan mengenkripsi itu tidak akan membantu jika itu sisi klien didekripsi. Satu-satunya cara untuk memastikan keamanan sebuah string adalah dengan meminta klien HANYA melihat string yang dienkripsi, dan diteruskan ke
Claudiu
16
server untuk diproses lebih lanjut.
Claudiu
9
FYI, kompresor YUI online dapat ditemukan di sini: refresh-sf.com/yui
mtness
7
Mengenkripsi nilai-nilai string hanya akan sedikit lebih bermanfaat daripada base64 yang menyandikannya, jika harus didekripsi oleh browser untuk menggunakannya. Alasannya adalah bahwa Anda juga harus memberikan kunci enkripsi kepada browser, dan apa pun yang dapat dilakukan oleh browser juga dapat dilakukan oleh pengguna.
Ben
9
Ketika saya melakukan minifying dengan YUI Compressor, saya memastikannya menggunakan metode minifikasi "aman", yaitu membuat semi-titik dua --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.
zuallauz
136

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 "

Jason Hall
sumber
60
ya, tetapi baru-baru ini mereka meninggalkan kompiler Penutupan dan menggunakan UglifyJS sekarang. Kode JQuery
bermasalah
Saya ingin mencatat bahwa, jika Anda bekerja dengan sudut. alat ini tidak akan berfungsi karena injeksi ketergantungan dan penggantian nama argumen, kecuali ada kotak centang yang tidak bisa saya lihat.
iConnor
1
Alat yang berguna, tetapi tidak membuat kebingungan yang mungkin mengapa tidak ada orang lain yang menyebutkannya.
Madbreaks
1
@Madbreaks dengan Advanced Optimisation ( developers.google.com/closure/compiler/docs/api-tutorial3 ) itu akan mengecilkan kode ke titik kebingungan. Variabel dapat diubah namanya menjadi singkat, misalnya.
Jason Hall
Google juga bukan opsi untuk keamanan
Fillipo Sniper
121

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.

Lihat jawaban lengkap saya tentang obfuscator di sini.

Schwern
sumber
14
+1 pada Pengacara, tetapi itu mungkin tidak berfungsi di negara / yurisdiksi lain.
jmort253
16
Pengacara mungkin menciptakan lebih banyak biaya / masalah daripada kode yang hilang, berpikir dengan sangat hati-hati dan mengatur banyak uang untuk melibatkan pengacara !!
andora
11
-1: Saya percaya bahwa menemukan pengacara yang memahami JavaScript akan sulit ... Belum lagi biaya dan jumlah waktu yang dibutuhkan untuk menemukan "pelanggar". Bisakah seseorang benar-benar melanggar lisensi yang terkubur dalam file HTML / JavaScript jika dia tidak pernah menandatangani sesuatu? +1 untuk panggilan AJAX.
Alerty
12
@Alerty 1) Lisensi pada dasarnya adalah tentang pemberian penggunaan materi berhak cipta. Anda memiliki sedikit hak untuk menggunakannya tanpa lisensi. Anda tidak harus menandatanganinya untuk mendapatkan hak. Lisensi berbeda dari kontrak. 2a) Karena pertanyaannya adalah tentang orang-orang menyalin dan menggunakan HTML / Javascript tanpa izin, lisensi tidak "dikubur", itu ada di sana pada hal yang diambil. 2b) Anda memiliki sedikit hak untuk menggunakan materi berhak cipta milik orang lain tanpa lisensi. 3) Pengacara tidak perlu memahami Javascript, hanya hukum kekayaan intelektual.
Schwern
4
@Alerty Jangan bodoh. Ini tentang menghukum mereka yang menyalin file untuk digunakan di situs mereka sendiri tanpa izin. Yang Anda bicarakan adalah kontrak, bukan lisensi. Kontrak membutuhkan persetujuan bersama dan memberi dan menerima. Lisensi memberi Anda hak untuk menggunakan kekayaan intelektual. Lisensi adalah satu arah (pemilik memberikan Anda sesuatu), Anda tidak perlu menandatangani karena Anda tidak memberikan apa pun. Banyak "Perjanjian Lisensi Perangkat Lunak" sebenarnya adalah kontrak karena mereka melampaui lisensi properti dan menjadi hal-hal konyol seperti hak untuk menuntut.
Schwern
49

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.

Claudiu
sumber
45
Kemanapun saya pergi, jawaban paling umum untuk "bagaimana saya bisa mengaburkan Javascript saya?" adalah "Anda tidak perlu khawatir tentang itu karena seseorang dapat meng-unfuskannya." Ini sebenarnya bukan jawaban.
Travis Wilson
2
@Vivek: Agak terlambat, tapi yang saya maksud sebenarnya adalah "kode sisi server". Dimungkinkan untuk menjalankan javascript bukan di browser, hanya di server, tapi saya tidak tahu seberapa umum itu.
Claudiu
8
@ Travis: Saya tidak mengatakan "Anda tidak perlu khawatir tentang hal itu." Saya hanya mengatakan bahwa jika Anda menginginkan program sumber tertutup, Anda tidak akan ingin menulisnya di javascript sisi klien, karena kebingungan apa pun yang Anda lakukan tidak akan mencegahnya dari (cukup mudah) direkayasa ulang.
Claudiu
8
Baik. Yang sama sekali tidak menjawab "bagaimana saya bisa mengaburkan JavaScript saya". Kebingungan bukanlah konsep abstrak, itu konsep teknis. Op hanya bertanya "bagaimana?"
Madbreaks
2
@Madbreaks: Pertanyaannya adalah dalam konteks tidak membuat kode sumber terbuka. Jawaban teknis langsung adalah yang diterima, tetapi jawaban dalam konteks yang lebih baik (seperti pada, apa yang sebenarnya Anda coba lakukan?) Adalah, IMO, bahwa Anda tidak dapat memiliki javascript sisi klien yang bukan open-source, karena setiap orang memiliki sumbernya, terlepas dari bagaimana Anda mengaburkannya. Either way kedua jawaban ada di sini dan orang-orang dapat membaca dan mendapat manfaat dari keduanya.
Claudiu
45

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.

Tom
sumber
19
Karena kode Javascript harus dijalankan pada mesin klien, bukan hanya sulit untuk mengaburkan ke titik di mana kode tidak dapat direkayasa balik tetapi tidak mungkin .
Schwern
20
ini tentang statistik. apa ambang batas bahwa seseorang akan mendapatkan akses ke kode Anda dengan kebingungan dan tanpa? mereka masih bisa mendapatkan akses, tetapi semakin tinggi ambang, semakin sedikit orang. semakin sedikit orang yang tahu tentang sesuatu, semakin aman sesuatu itu. praktik klasifikasi keamanan standar.
Cris Stringfellow
1
@PeterR mencari / mengganti editor teks akan membuat hidup Anda menjadi jauh lebih sulit untuk membacanya atau merekayasa baliknya. itu tidak sempurna, tetapi menambah lapisan gangguan / kesulitan dengan menghapus petunjuk konteks. sebagian besar programmer tidak sepintar Anda, yang membuat ini menjadi pencegah hebat.
SED
1
@ SED Saya tidak tahu seorang programmer tunggal yang tidak dapat menemukan / mengganti sekelompok [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.
Peter R
3
@PeterR "Saya benar-benar dapat menghapus, meng-indentasi, dan mencari / mengganti nama var dalam waktu dua menit" - tentu, silakan dan coba itu pada multi-pass yang diperkecil, dikaburkan, bundel basis kode 20MB dengan struktur yang mengambil minggu untuk memahami bahkan dengan kode sumber asli, yang dikomentari. Dan untuk membuatnya lebih sulit, ada alat kebingungan yang sengaja membuat kode Anda rusak jika lekukan, baris, dll berubah.
John Weisz
23

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?

  1. memuat kode nyata
  2. menyetel tajuk khusus
  3. memposting variabel khusus

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?

  1. itu kode yang sama seperti di atas di base64
  2. ini bukan kode javascript SECRET

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C Buat file php yang sulit ditampilkan dengan kode asli di dalamnya

Apa ini kode php?

  1. Memeriksa perujuk yang tepat (domain / dir / kode peluncur Anda)
  2. Memeriksa HEADER khusus
  3. Memeriksa variabel POST khusus

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=';}; ?>
cocco
sumber
1
oh dan ya saya juga akan mengaburkan kode javascript.
cocco
1
Ini adalah sesuatu yang baru saja saya pikirkan, mengendalikan kerupuk. Saya ingin melihat sesuatu seperti ini tanpa harus menggunakan PHP :)
pgarciacamou
6
Bahkan jika ini lucu, seorang pengembang web yang mampu memeriksa situs dengan benar, entah bagaimana bisa mendapatkan kode sumber. Saya benar-benar berpikir bahwa tidak ada cara untuk menyembunyikan semua jenis data pada saat Anda meletakkannya online.
cocco
Saya kira tidak ada kebingungan. Namun tahu cara membuka konsol, ia mungkin juga tahu tentang pengkodean / decoding base64, sangat sederhana.
T.Todua
19

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.

Anthony
sumber
7
Berlangganan JScrambler sangat sangat mahal ... Langganan termurah membutuhkan harga minimum 3 bulan $ 145 - ini gila.
barbushin
1
Mereka sekarang memiliki rencana gratis. Paket berlangganan lainnya masih pricy.
user7610
2
Paket gratis hanya mencakup optimasi dan minifikasi.
Jean Hominal
1
'Paket gratis termasuk optimasi dan minifikasi', ya tidak. Kebingungan dan optimisasi tidak sejalan, maaf.
NiCk Newman
2
Melihat situs web JScrambler hari ini dan lebih banyak lagi rencana penetapan harga, saya tidak dapat melihat opsi gratis. Hanya uji coba gratis ..
KDT
18

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 ...

PhiLho
sumber
17

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.

Thomas Bonini
sumber
5
tidak seharusnya memeriksa kode Anda terhadap kesalahan dan ketidaksesuaian dilakukan sebelum mengaburkan ?? tidak ada hubungannya dengan mengaburkan sebenarnya
phil294
13

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 ..

dbr
sumber
11

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 .

Gustavo Rodrigues
sumber
Kompilasi penutupan tidak mengaburkan kode: P
NiCk Newman
1
Itu tidak dibuat untuk itu, tetapi bekerja dengan baik melakukannya: itu tidak menambahkan kode tambahan seperti beberapa kompiler (yang biasanya dapat dibalik dengan alat yang saya kutip) tetapi mengubahnya menjadi cara yang tidak biasa, beberapa bahkan sulit untuk dibatalkan, dan menghapus yang tidak digunakan kode, yang dibandingkan dengan kebingungan nyata baik untuk kinerja.
Gustavo Rodrigues
1
Bukan ide yang bagus. Meminimalkan / mengkompilasi kode sisi server mungkin dapat menyebabkan masalah keamanan jika minifier memiliki bug: zyan.scripts.mit.edu/blog/backdooring-js
mgol
Bug yang Anda kutip hanya berlaku untuk UglifyJS: tidak berlaku untuk Closure Compiler.
Gustavo Rodrigues
Untuk semua orang yang peduli tentang minifying file javascript, ada juga javascript un-minifier. jadi saya tidak berpikir itu adalah lapisan keamanan sama sekali
Fillipo Sniper
11

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.

Tsvetomir Tsonev
sumber
1
Tetapi mengaburkan tidak selalu memampatkannya ke satu baris, itu bisa sesederhana mengubah fungsi dan nama variabel atau mengubah string ke base64. Minifying menempatkan semua kode pada satu baris.
rw-nandemo
Saat ini UglifyJS tampaknya menjadi pilihan terbaik. Penulis juga orang yang keren! :)
Tsvetomir Tsonev
Mengenai debugging, Anda sebagian besar dapat menghasilkan peta sumber yang dapat Anda sertakan saat pengujian sehingga Anda dapat melihat pada baris mana kesalahan terjadi, bahkan jika itu dikurangi.
Luca Steeb
5

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!

Blitzer Dynamite
sumber
5

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

smdrager
sumber
Tidak ada gunanya. Itu dapat dibongkar dengan mudah dengan jsbeautifier.org
Maciej Krawczyk
4

Saya mendapat kesan bahwa beberapa perusahaan (misalnya: JackBe) memasukkan kode JavaScript terenkripsi di dalam file * .gif, daripada file JS, sebagai ukuran tambahan kebingungan.

xgMz
sumber
4

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.

Jerczu
sumber
4

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 sortfitur 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 _sUserPreferredNickNameke 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.

Mat
sumber
Jason tampaknya lebih seperti minifier daripada obfuscator. Apakah saya melewatkan sesuatu?
Alan McBee - MSFT
4

Sudahkah Anda mencoba Bananascript ? Ini menghasilkan kode yang sangat terkompresi dan benar-benar tidak dapat dibaca.

niutech
sumber
18
itu memampatkan kode dengan baik, tetapi hanya mengubah eval()di baris terakhir ke console.log()dan konsol Anda akan memuntahkan semuanya
LobsterMan
4

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.

shaILU
sumber
3

Sebagai obfuscator / kompresor JavaScript / HTML / CSS Anda juga dapat mencoba Patu Digua .

Adrian
sumber
3

Yang ini mengecilkan tetapi tidak mengaburkan. Jika Anda tidak ingin menggunakan baris perintah Java, Anda dapat menempelkan javascript ke formulir web.

Chris S
sumber
1
Catatan: Tautan sekarang mati.
Scott C Wilson
1
@ScottWilson terima kasih, perbarui
Chris S
2

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.

Mike
sumber
Terima kasih untuk tautannya! Hanya mencoba obfuscriptor dan kode yang dienkripsi memang (tanpa kunci ???). Dan mengompres skrip saya dari 211 hingga 36 Kb!
Perhatikan bahwa Obfuscriptor memperingatkan Anda bahwa itu tidak berfungsi dengan IE. Itu kesepakatan untuk beberapa.
Alan McBee - MSFT
1
Tautan pada jawaban tidak menunjuk ke alat lagi. Saya tidak dapat menemukan referensi langsung lain untuk itu.
buzoherbert
tautan pertama sudah mati. "Obfuscriptor"
Alp Altunel
2

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.

Stephen Chung
sumber