JavaScript'i nasıl gizleyebilirim (koruyabilirim)? [kapalı]


714

Açık kaynak olmayan bir JavaScript uygulaması yapmak istiyorum ve bu nedenle JS kodumu nasıl gizleyebileceğinizi öğrenmek isterim? Mümkün mü?


15
Kodu gizlemeye çalıştığınızın nedenini duymak isterim, yararlı bir cevap vermek için gerekli bağlamı verebilir.
JohnFx

45
Bir şeyi gerçekten gizli tutmanın tek yolu onu müşteriye göndermemektir . Eğer sahip değillerse okuyamazlar. Şifreli göndermek, gerçekten bakım veren birkaç kişinin elinde sorun istemektedir ve net bir şekilde gönderirseniz bile (herkes cf DRM) etrafta dolaşmayacaktır.
Donal Fellows


8
Kodunuzu gizlemek iyi bir fikir değildir. Yalnızca meşru kullanıcıları rahatsız eder (örneğin bir hatayı düzeltmeleri gerektiğinde) ve bunu tersine mühendislik yapmak için (finansal) teşviki olan kişilerden 'korumak' için hiçbir şey yapmaz. Öyle temelde imkansız JavaScript kodunun ters mühendislik önlemek için.
Sven Slootweg

14
Gizlememe argümanı bana kusurlu gözüküyor. Kullanıcılarınızın hataları düzeltebileceğini / raporlayabileceğini gerçekten düşünmüyorsanız, bunu yapmalısınız. Minimize ederek yükleme sürelerini azaltabilir. Asla gerçekten adanmış bir hacker'ı durdurmayacak, ancak onu yavaşlatacak ve yarı silahlı hack girişimlerini durduracak. Yapması çok kolay ve birçok araç var (diğer cevaplara bakın), çoğu zaman sadece avantajları olduğu için bunu kesinlikle söyleyebilirim, ancak gerçek güvenlik getirmesini veya birisinin kodunuzu kopyalamasını durdurmasını beklemeyin eğer gerçekten istiyorlarsa. Bunu yapmanın tek yolu kod sunucusu tarafı tutmak ve ajax kullanmaktır.
Benjamin

Yanıtlar:


405

Gizleme:

YUI Kompresörünü deneyin . Yahoo UI ekibi tarafından geliştirilen, geliştirilen ve sürdürülen çok popüler bir araçtır.

Ayrıca şunları kullanabilirsiniz:

GÜNCELLEME: Bu soru başlangıçta 10 yıldan fazla bir süre önce sorulmuştur ve YUI artık korunmamaktadır. Google Closure Derleyici hala kullanımda ve UglifyJS düğüm paketi yöneticisi aracılığıyla yerel olarak çalıştırılabilir:npm install -g uglify-js

Özel Dize Verileri:

Dize değerlerini gizli tutmak farklı bir endişe kaynağıdır ve şaşkınlık pek fazla fayda sağlamaz. Tabii ki, kaynağınızı bozuk, küçültülmüş bir karmaşaya paketleyerek, belirsizliğin üzerinden hafif bir güvenlik sürümüne sahip olursunuz . Çoğu zaman, kaynağı görüntüleyen kullanıcıdır ve istemcideki dize değerleri kullanımları için tasarlanmıştır, bu nedenle özel dize değeri genellikle gerekli değildir.

Hiç bir kullanıcının görmesini istemediğiniz bir değeriniz olsaydı, birkaç seçeneğiniz olurdu. İlk olarak, sayfa yüklenirken şifresi çözülen bir tür şifreleme yapabilirsiniz. Bu muhtemelen en güvenli seçeneklerden biri olacak, ancak gereksiz olabilecek birçok iş de olacaktır. Muhtemelen base64 bazı dize değerlerini kodlayabilirsiniz ve bu daha kolay olurdu .. ama bu dize değerlerini gerçekten isteyen biri bunları kolayca çözebilir . Şifreleme, kimsenin verilerinize erişmesini gerçekten önlemenin tek yoludur ve çoğu insan bunu ihtiyaç duyduklarından daha fazla güvenlik olarak görür.

Kenar notu:

Javascript'teki gizlemenin bazı hatalara neden olduğu bilinmektedir. Obfuscators bu konuda biraz daha iyi oluyor, ancak birçok kıyafet küçültme ve gzipleme ile yeterince fayda gördüklerine karar veriyor ve ek gizleme tasarrufları her zaman zahmete değmez . Kaynağınızı korumaya çalışıyorsanız, kodunuzun okunmasını zorlaştırmak için zaman ayırmaya değer olduğuna karar verebilirsiniz. JSMin iyi bir alternatiftir.


32
Bir base64 kodlama yapmanın, önemsiz bir şekilde tersine çevrilebilir bir prosedür olduğu için güvenliğe faydası olmayacağını eklemek istiyorum. Şifreleme bile, istemci tarafında şifresi çözülmüşse yardımcı olmaz. Bir dizenin güvenliğini sağlamanın tek yolu, istemcinin SADECE şifrelenmiş dizeyi görmesini sağlamaktır ve bu
diziye

16
daha fazla işlem için sunucu.
Claudiu

9
Bilginize, çevrimiçi YUI kompresör burada bulunabilir: refresh-sf.com/yui
mtness

7
Dize değerlerini şifrelemek, bunları kullanmak için tarayıcı tarafından şifresi çözülmeleri gerekiyorsa, bunları kodlayan base64'ten sadece çok az fayda sağlayacaktır. Bunun nedeni, tarayıcıya da şifreleme anahtarı vermeniz ve tarayıcının kullanıcının yapabileceği her şeyi vermenizdir.
Ben

9
YUI Kompresör ile küçültme yaptığımda "güvenli" küçültme yöntemleri kullandığından emin olurum, yani noktalı virgülleri tutar --preserve-semi. Özel değişkenleri a, b, c vb. Olarak yeniden yazmak genellikle güvenlidir. Yaptığım başka bir şey, kıyma makinesinin koddaki her noktalı virgülden sonra bir satır sonu yapmasıdır --line-break 0. Daha sonra üretimde hata olursa, çalışmak için geçerli bir referans çizgim var ve geliştirme kodumda bu kodu bulabilirim. Aksi takdirde, büyük bir kod satırında bir hatayla karşılaşırsınız ve hatanın nerede olduğu hakkında hiçbir fikriniz yoktur.
zuallauz

136

Kimsenin Google'ın Kapanış Derleyicisi'nden bahsetmediğine şaşırdım . Sadece küçültmek / sıkıştırmak değil, kullanılmayan kodu bulmak ve kaldırmak için analiz eder ve maksimum küçültme için yeniden yazar. Ayrıca tür denetimi yapabilir ve sözdizimi hataları hakkında uyarır.

JQuery kısa süre önce YUI Compresser'dan Closure Compiler'a geçti ve " sağlam bir gelişme " gördü


60
evet, ama son zamanlarda Closure derleyicisinden ayrıldılar ve şimdi UglifyJS kullanıyorlar. JQuery kodu kapatma derleyici ile sıkıştırma sonra buggy oldu
Chielus

Eğer açısal ile çalışıyorsanız, bunu belirtmek isterim. göremediğim bir onay kutusu olmadığı sürece bu araç bağımlılık enjeksiyonu ve argümanların yeniden adlandırılması nedeniyle gerçekten çalışmaz.
iConnor

1
Yararlı bir araç, ancak şaşkınlık yapmaz, bu yüzden muhtemelen başka hiç kimse bundan bahsetmemişti.
Madbreaks

1
@Gelişmiş Optimizasyonlara sahip madbreaks ( developers.google.com/closure/compiler/docs/api-tutorial3 ) kodu gizleme noktasına indirecektir. Örneğin değişkenler kısalık olarak yeniden adlandırılabilir.
Jason Hall

Google güvenlik için de bir seçenek değil
Fillipo Sniper

121

Şaşkınlık asla gerçekten işe yaramaz. Gerçekten kodunuzu almak isteyen herkes için, bu sadece bir hız tümseği. Daha da kötüsü, kullanıcılarınızın hataları düzeltmesini (ve düzeltmeleri size geri göndermesini) engeller ve alandaki sorunları teşhis etmenizi zorlaştırır. Bu zaman ve para kaybıdır.

Bir avukatla fikri mülkiyet hukuku ve yasal seçeneklerinizin neler olduğu hakkında konuşun. "Açık Kaynak" , "insanların kaynağı okuyabileceği" anlamına gelmez. Bunun yerine, Açık Kaynak kodunuzu özgürce kullanma ve değiştirme izni veren belirli bir lisanslama modelidir. Böyle bir lisans vermezseniz, kodunuzu kopyalayan kişiler ihlal edilir ve (dünyanın çoğunda) bunları durdurmak için yasal seçenekleriniz vardır.

Kodunuzu gerçekten korumanın tek yolu kodu göndermemektir. Sunucu tarafından önemli kodu taşıyın ve genel Javascript kodunuzun Ajax çağrılarını yapmasını sağlayın.

Tıkayıcılar hakkında tam cevabımı burada görebilirsiniz.


14
Avukat için +1, ancak bu diğer ülkelerde / yargı bölgelerinde çalışmayabilir.
jmort253

16
Avukatlar muhtemelen kayıp koddan daha fazla maliyet / konu yaratır, çok dikkatli düşünür ve avukatlarla meşgul olmak için çok para düzenler !!
andora

11
-1: JavaScript'i anlayan bir avukat bulmanın zor olacağını düşünüyorum ... "İhlal edenler" bulmak için gereken ücretlerden ve süreden bahsetmiyorum bile. Birisi, daha önce hiçbir şey imzalamazsa HTML / JavaScript dosyalarına gömülmüş bir lisansı gerçekten ihlal ediyor olabilir mi? AJAX çağrıları için +1.
Uyarı

12
@Alerty 1) Lisansı temelde yaklaşık olarak verilmesi telif hakkı malzeme kullanımını. Lisans olmadan kullanma hakkınız çok az. Hakları almak için imzalamanız gerekmez. Lisans, sözleşmeden farklıdır. 2a) Soru, HTML / Javascript'i izinsiz olarak kopyalayıp kullanan kişilerle ilgili olduğundan, lisans "gömülmez", tam orada alınan şey üzerinde. 2b) Başka birinin telif hakkıyla korunan materyallerini lisanssız kullanma hakkınız yoktur. 3) Avukatın Javascript'i anlaması gerekmez, sadece fikri mülkiyet kanunu.
Schwern

4
@Alerty Kibirli olma. Bu, dosyayı kendi sitelerinde izinsiz kullanmak üzere kopyalayanları cezalandırmakla ilgilidir. Bahsettiğiniz şey bir lisans değil, bir sözleşmedir. Sözleşmeler karşılıklı onay gerektirir ve bir ver ve al işlemidir. Lisanslar, fikri mülkiyeti kullanma hakkını verir. Lisanslar bir yoludur (sahibi size bir şeyler veriyor), herhangi bir şey vermediğiniz için imzalamanız gerekmez. Birçok "Yazılım Lisans Sözleşmesi" aslında sözleşmelerdir çünkü mülkü lisanslamanın ötesinde ve bazen dava açma hakkı gibi saçma şeylere girerler.
Schwern

49

Javascript kaynağını istediğiniz gibi gizleyebilirsiniz, ancak tüm kaynak kodunun gerçekten istemci makinede çalışmasını gerektirerek her zaman tersine çevrilebilir olacaktır ... aklınıza gelebilecek en iyi seçenek tüm işlemlerinizin yapılmasıdır. sunucu tarafı kodu ile ve tüm istemci kodu javascript sunucunun kendisine işleme istekleri göndermek olduğunu. Aksi takdirde, kodun yaptığı tüm işlemleri her zaman takip edebilirsiniz.

Birisi dizeleri güvende tutmak için base64'ten bahsetti. Bu korkunç bir fikir. Base64, kodunuzu tersine çevirmek isteyen insanlar tarafından hemen tanınır. Yapacakları ilk şey kodu çözüp ne olduğunu görmektir.


45
Nereye gidersem gideyim, "Javascript'imi nasıl gizleyebilirim?" "Bu konuda endişelenmemelisiniz, çünkü birisi bunu gizleyebilir." Bu gerçekten bir cevap değil.
Travis Wilson

2
@Vivek: Biraz geç, ama gerçekten demek istediğim "sunucu tarafı kodu". Javascript'i bir tarayıcıda değil, sadece bir sunucuda çalıştırmak mümkündür, ancak bunun ne kadar yaygın olduğunu bilmiyorum.
Claudiu

8
@Travis: "Endişelenmemelisin" demedim. Sadece kapalı kaynaklı bir program istiyorsanız, istemci tarafı javascript'te yazmak istemeyeceğinizi söyledim, çünkü yaptığınız herhangi bir gizleme (oldukça kolay) tersine mühendislik yapılmasını engellemeyecektir.
Claudiu

8
Sağ. Bu hiçbir şekilde "JavaScript'imi nasıl gizleyebilirim" diye cevap vermez. Gizleme soyut bir kavram değil, teknik bir kavramdır. Operasyon basitçe "nasıl?" Diye sordu.
Madbreaks

2
@Madbreaks: Soru, kodunu açık kaynak yapmamak bağlamındaydı. Anında teknik cevap kabul edilen cevaptır, ancak daha iyi bağlam içi cevap (olduğu gibi, gerçekten ne yapmaya çalışıyorsunuz?), IMO, açık kaynaklı olmayan istemci tarafı javascript'iniz olamaz, çünkü nasıl gizlediğinize bakılmaksızın herkes kaynağa sahiptir. Her iki şekilde de cevaplar burada ve insanlar her ikisini de okuyabilir ve yararlanabilir.
Claudiu

45

Serbestçe kullanılabilen bir dizi JavaScript gizleme aracı vardır; ancak, JavaScript'in tersine mühendislik yapılamadığı noktaya gizlenmesinin zor olduğunu belirtmek önemlidir.

Bu amaçla, bir dereceye kadar fazla mesai için kullandığım birkaç seçenek var:

  • YUI Kompresör . Yahoo! 'Nun JavaScript kompresörü, yükleme süresini artıracak kodu yoğunlaştırma konusunda iyi bir iş çıkarıyor. Nispeten iyi çalışan küçük bir şaşkınlık seviyesi vardır. Temel olarak, Kompresör işlev adlarını değiştirecek, boşluk bırakacak ve yerel değişkenleri değiştirecektir. En sık kullandığım şey bu. Bu, açık kaynaklı bir Java tabanlı araçtır.

  • JSMin , JavaScript kaynağınızı küçültmek isteyen Douglas Crockford tarafından yazılmış bir araçtır. Crockford'un kendi sözleriyle, "JSMin şaşırtmaz, ama çirkinleşir." Birincil hedefi, tarayıcılara daha hızlı yükleme yapmak için kaynağınızın boyutunu küçültmektir.

  • Ücretsiz JavaScript Obfuscator . Bu, kodunuzu gerçekten kodlayarak gizlemeye çalışan web tabanlı bir araçtır. Kodlama (ya da gizleme) biçimindeki değiş tokuşların dosya boyutu pahasına olabileceğini düşünüyorum; ancak bu kişisel tercih meselesidir.


19
Javascript kodu istemcinin makinesinde çalışması gerektiğinden, kodun tersine değiştirilemediği, ancak imkansız olduğu noktaya gizlenmek zor değildir .
Schwern

20
istatistiklerle ilgili. birisinin kodunuza şaşkınlıkla ve onsuz erişebileceği eşik nedir? yine de erişebilirler, ancak eşik ne kadar yüksek olursa insanlar o kadar az olur. ne kadar az insan bir şey bilirse o kadar güvenli olur. standart güvenlik sınıflandırma uygulaması.
Cris Stringfellow

1
@PeterR bir metin düzenleyicide arama / değiştirme, hayatınızı okumak veya tersine çevirmek için çok daha zor hale getirecektir. mükemmel değil, ancak bağlam ipuçlarını kaldırarak fazladan bir sıkıntı / zorluk katmanı ekliyor. Çoğu programcı sizin kadar zeki değil, bu da bunu büyük bir caydırıcı kılıyor.
SED

1
@SED Bir grup vars'ı [ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]en az [var1, var2,..]bir dakika içinde bulamayan / değiştiremeyen tek bir programcı bilmiyorum . İki dakika içinde kelimenin tam anlamıyla çirkinliğini kaldırabilir, yeniden girintili hale getirebilir ve arama / değiştirme yapabilirim. Ve hayır, ortalama bir Jr. Dev'den daha zekiyim. Basit gerçek şu ki, istemci tarafı JS'yi gizlemenin hiçbir yolu yoktur. Kendinize 5 dakika, MAX alabilirsiniz, ancak bu işe yaramaz. Bu şey gerçekten sadece eklenen "Güvenlik" kod bilmeyen birini satmak içindir. Daha önce hiç JS yazmamış olan kimse bu saçmalığı satın alamaz.
Peter R

3
@PeterR "Değişken adlarını iki dakika içinde tam anlamıyla çirkinleştirebilir, yeniden girintili hale getirebilir ve arayabilir / değiştirebilirim" - emin olun, devam edin ve çok geçişli küçültülmüş, gizlenmiş, 20 MB kod tabanı paketinde, Orijinal, yorumlanmış kaynak koduyla bile anlaşılması için haftalar. Daha da zorlaştırmak için, girinti, çizgiler vb. Değişirse kodunuzu kasıtlı olarak bozan gizleme araçları mevcuttur.
John Weisz

23

Ne yaparım:

A. Hacker'ı troll et!

Bu ikinci bölümde benim sahte / gizlenmiş gizli javascript kodu LAUNCHER olacak. Kaynak kodunda gördüğünüz.

Bu kod ne?

  1. gerçek kodu yükler
  2. özel bir başlık ayarlar
  3. özel bir değişken yayınlar

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. Kodu biraz gizleyin

O nedir?

  1. base64'de yukarıdaki ile aynı kod
  2. bu SECRET javascript kodu değil

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

C İçinde gerçek kod ile görüntülemek zor bir php dosyası oluşturun

Bu php kodu nedir?

  1. Doğru yönlendireni kontrol eder (başlatıcınızın alan / dizin / kodu)
  2. Özel HEADER kontrolleri
  3. Özel POST değişkenini kontrol eder

Her şey yolundaysa, size doğru kodu başka bir sahte kod veya ban ip gösterecektir, sayfayı kapatın .. ne olursa olsun.

<?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 yönlendiren = http://here.is/my/launcher.html

GİZLİ javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

SAHTE = window.open('', '_self', '');window.close();

Şimdi .. Eğer SECRET javascript içinde olay işleyicileri tanımlarsanız, büyük olasılıkla erişilebilir .. Bunları dışarıda başlatma kodu ile tanımlamanız ve iç içe bir SECRET işlevine işaret etmeniz gerekir.

SO ... kodu almanın kolay bir yolu var mı? document.body.appendChild(document.createElement('div')).innerText='Awesome';

Bu işe yarayıp yaramadığından emin değilim ancak krom ve işaretli öğeler, kaynaklar, ağ, kaynaklar, zaman çizelgesi, profiller, denetimler kullanıyorum ama yukarıdaki satırı bulamadım.

note1: Chrome'da Inspect element-> ağından Troll.php url'sini açarsanız sahte kodu alırsınız.

note2: tüm kod modern tarayıcılar için yazılmıştır. polyfill çok daha fazla koda ihtiyaç duyar.

DÜZENLE

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=';}; ?>

1
oh ve evet ben de javascript kodunu şaşırtmak istiyorum.
cocco

1
Bu sadece düşündüğüm bir şeydi, krakeri trol ediyordu. Ben PHP kullanmak zorunda kalmadan böyle bir şey görmek istiyorum :)
pgarciacamou

6
Bu komik olsa bile, siteyi düzgün bir şekilde inceleyebilen bir web geliştiricisi bir şekilde kaynak kodunu alabilir. Gerçekten, çevrimiçi duruma getirdiğiniz anda herhangi bir veri türünü gizlemenin bir yolu olmadığını düşünüyorum.
cocco

Bence herhangi bir şaşkınlık değil. ancak konsolu nasıl açacağını bilir, base64 kodlama / kod çözme hakkında da çok basit olabilir.
T.Todua

19

JScrambler'ı deneyin . Geçenlerde bir spin verdi ve çok etkilendim. Ayrıntılar hakkında çok fazla umursamayan ve sadece hızlı bir şekilde yapmak isteyenler için önceden tanımlanmış ayarlarla gizleme için bir dizi şablon sağlar. İstediğiniz dönüştürmeleri / teknikleri seçerek özel gizleme de oluşturabilirsiniz.


7
JScrambler aboneliği çok çok pahalı ... En ucuz abonelik minimum 3 ay fiyatı 145 $ gerektirir - bu çılgınca.
Ağustos'ta barbushin

1
Artık ücretsiz bir planları var. Diğer abonelik planları hala pahalı.
user7610

2
Ücretsiz plan sadece optimizasyon ve minimizasyonu içerir.
Jean Hominal

1
'Ücretsiz plan optimizasyon ve minimizasyonu içeriyor', evet hayır. Şaşkınlık ve optimizasyon birlikte gitmez, üzgünüm.
NiCk Newman

2
Bugün JScrambler web sitesine ve daha fazla fiyatlandırma planlarına baktığımda ücretsiz bir seçenek göremiyorum. Sadece ücretsiz deneme ..
KDT

18

Yorumlanan dillerle ilgili sorun, onları çalıştırmak için kaynağı göndermenizdir (bayt kodlamak için bir derleyiciniz yoksa, ancak yine de, koda dönüştürmek oldukça önemsizdir).

Dolayısıyla, performanstan ödün vermek istemiyorsanız, yalnızca değişken ve işlev adları üzerinde hareket edebilirsiniz, örn. Bunları a, b ... aa, ab ... veya a101, a102 vb. ile değiştirin. Ve elbette, olabildiğince çok alan / satırsonu kaldırın (JS kompresörleri olarak adlandırılan şey budur).
Bunları şifrelemek ve gerçek zamanlı olarak şifresini çözmek zorundaysanız, dizeleri şaşırtmak bir performans isabetine sahip olacaktır. Ayrıca bir JS hata ayıklayıcısı son değerleri gösterebilir ...


17

YUI Kompresörüne karşı önerdiğim diğer cevapların aksine; Google Closure'u kullanmalısınız .

Fazla sıkıştırmadığı için değil, çoğunlukla a = [1,2,3,];IE'nin samanlaşmasını sağlayan javascript hatalarını yakalayacağı için.


5
kodunuzu hatalara karşı kontrol etmemeli ve uyumsuzluk şaşırtmadan önce her iki şekilde yapılmalıdır ?? aslında şaşırtmakla ilgisi yok
phil294

13

Açık kaynaklı olmayan Javascript tabanlı bir uygulama oldukça aptalca. Javascript istemci tarafında yorumlanan bir dildir .. Gizleme pek koruma değildir ..

JS gizleme genellikle komut dosyasının boyutunu korumak için "korumak" yerine yapılır. Kodunuzun herkese açık olmasını istemediğiniz bir durumdaysanız, Javascript doğru dil değildir.

Etrafta çok sayıda araç var, ancak çoğunun adında bir sebepten dolayı "kompresör" (veya "madenci") kelimesi var.


11

İstemci tarafı kodunu güvence altına alamazsınız: Google Chrome'da F12 tuşuna basmanız, javascript uygulamasını duraklatmanız yeterlidir ve şifrelenmiş olanlar dahil tüm dizeleri alırsınız. Güzelleştirin ve değişkenleri yeniden adlandırın ve neredeyse orijinal kodu alacaksınız.

Sunucu tarafı javascript (yani NodeJS) yazıyorsanız, sunucunuza hacklenen birinden korkuyorsa ve bilgisayar korsanının daha zor çalışmasını istiyorsanız, erişiminizi geri almak için daha fazla zaman verin, ardından javacript derleyicilerini kullanın :

Birden çok dosya / modülde kullanılmış olsalar bile, tüm değişkenlerinizi yeniden adlandıran tek araç olduğu için Gelişmiş Derleme'de Kapatma Derleyicisini kullanmanız gerekir. Ama sadece bir sorunu var: sadece kodlama tarzında yazarsanız işe yarar .


Kapatma derlemesi kodları
şaşırtmıyor

1
Bunun için yapılmadı, ancak iyi çalışıyor: bazı derleyiciler gibi ekstra kod eklemiyor (genellikle bahsettiğim araçların tersine çevrilebilir) ancak alışılmadık yollarla değiştirir, bazıları geri alınamaz ve kullanılmayanları kaldırır Gerçek gizleme ile karşılaştırıldığında performans için iyi olan kod.
Gustavo Rodrigues

1
İyi bir fikir değil. Kodlayıcıyı küçültmek / derlemek sunucu tarafında bir hata varsa güvenlik sorunları getirebilir: zyan.scripts.mit.edu/blog/backdooring-js
mgol

Belirttiğiniz hata yalnızca UglifyJS için geçerlidir: Closure Compiler için geçerli değildir.
Gustavo Rodrigues

Javascript dosyalarını küçültmeyi önemseyen herkes için, bir javascript un-minifier da vardır. bu yüzden don, t bu bir güvenlik katmanı olduğunu düşünüyorum
Fillipo Sniper

11

JavaScript Utility programını Patrick J. O'Neil tarafından önerebilirim . Bulanıklaşabilir / sıkıştırabilir ve sıkıştırabilir ve bunlarda oldukça iyi görünüyor. Bununla birlikte, hiçbir zaman herhangi bir türdeki bir komut dosyasına entegre etmeyi denemedim.

Gizlemek ve küçültmek için gelince - Ben eskisinin büyük bir hayranı değilim. Hata ayıklamayı imkansız hale getirir (1. satırdaki hata ... "bekleyin, sadece bir satır var") ve paketlerini açmak her zaman zaman alır. Ama gerekiyorsa ... iyi.


1
Ancak gizleme mutlaka bir satıra sıkıştırmaz, işlevi ve değişken adlarını değiştirmek veya dizeleri base64'e dönüştürmek kadar basit olabilir. Küçültme tüm kodu bir satıra koyar.
rw-nandemo

Günümüzde UglifyJS en iyi seçim gibi görünüyor. Yazar da havalı bir adam! :)
Tsvetomir Tsonev

Hata ayıklama ile ilgili olarak, çoğunlukla test sırasında dahil edebileceğiniz kaynak haritalarını oluşturabilirsiniz, böylece küçültülse bile bir hatanın hangi satırda meydana geldiğini görebilirsiniz.
Luca Steeb

5

Önce YUI Kompresörü gibi bir şeyle küçültmeyi ve ardından tüm dizeleri ve sayıları http://www.javascriptobfuscator.com/ gibi bir şey kullanarak HEX Değerlerine dönüştürmeyi öneririm.

Bununla birlikte, kodu anlamak neredeyse imkansız hale getirilecek ve sanırım bu aşamada bir Hacker'ın kodunuzu yeniden canlandırması aslında sıfırdan yeniden yazdığından daha fazla zaman alacak. Yeniden yazma ve Klonlama aslında durduramadığınız şeydir. Sonuçta biz özgür insanlarız!



4

Bazı işletmelerin (örneğin: JackBe), gizli bir ek önlem olarak JS dosyaları yerine * .gif dosyalarının içine şifreli JavaScript kodu koyduğu izlenimi altındayım.


4

Bu aracı deneyin Javascript Obfuscator

HTML5 oyunumda sadece 950KB'den 150'ye düşürmekle kalmadım, aynı zamanda kaynak kodunu okunamaz kapatma derleyicileri ve minifüsleri tersine çevirebildim Kişisel olarak bu gizlemeyi nasıl tersine çevireceğimi bilmiyorum.


4

Jasob yıllardır kullanıyorum ve orada en iyi obfuscator aşağı eller.
Gelişmiş bir kullanıcı arayüzüne sahiptir, ancak yine de sezgisel ve kullanımı kolaydır.
Ayrıca HTML ve CSS dosyalarını da işleyecektir.

Bunu kullanmanın en iyi yolu, tüm özel değişkenlerinizin altını alt çizgi gibi bir şeyle öneklemek, daha sonra bu sortözelliği hepsini bir arada gruplamak ve gizleme hedefleri olarak kontrol etmektir .

Kullanıcılar hala kaynağını görüntüleyebilir, ancak özel değişkenler gibi bir şey dönüştürülür zaman deşifre etmek çok daha zordur _sUserPreferredNickNameiçin a.

Motor, hedeflenen değişkenlerin sayısını otomatik olarak hesaplar ve maksimum sıkıştırmayı elde etmek için bunlara öncelik verir.

Jasob için çalışmıyorum ve onları tanıtmaktan hiçbir şey alamıyorum, sadece dostça önerilerde bulunuyorum.
Olumsuz, özgür değil ve biraz pahalı, ama yine de alternatiflere karşı yığılmış değer - 'ücretsiz' seçenekleri bile yakın gelmiyor olmasıdır.


Jason, bir gizleme aracından daha çok bir küçültücü gibi görünüyor. Bir şey mi kaçırıyorum?
Alan McBee - MSFT

4

Bananascript'i denediniz mi? Yüksek oranda sıkıştırılmış ve tamamen okunamayan kod üretir.


18
kodu güzelce sıkıştırır, ancak sadece eval()son satırda değiştirin console.log()ve konsolunuz her şeyi
tükürecektir

4

Java komut dosyası gizleme için Closure-Compiler yardımcı programını kullanıyorum. Kodu küçültür ve gizleme için daha fazla seçeneğe sahiptir. Bu yardımcı program, Google kodunda aşağıdaki URL'den bulunabilir:
Kapatma Araçları

Ama şimdi bir gün UglifyJS'nin çoğunu duyuyorum. Closure Compiler ve Uglify'nin kazanan gibi göründüğü UglifyJS arasında çeşitli karşılaştırmalar bulabilirsiniz.
UglifyJS: Node.js İçin Hızlı Yeni JavaScript Kompresörü

Yakında UglifyJS'ye şans vereceğim.




2

Kesinlikle Obfuscriptor'a bir göz atmayı düşünmelisin .

YUI Kompresör veya Google Closure gibi diğer araçlardan gördüğümüz tipik Javascript küçültme hilelerinin ötesine geçiyorum .

Gizlenmiş kod daha çok şifreli gibi görünür. Daha önce gördüğüm hiçbir şeye benzemiyor.


Bağlantı için teşekkürler! Sadece obfuscriptor ve gerçekten şifrelenmiş kodu denedim (anahtar olmadan ???). Ve senaryomu 211'den 36 Kb'ye kadar sıkıştırdı!

Obfuscriptor'ın IE ile çalışmadığını bildirdiğini unutmayın. Bu bazıları için bir anlaşma kırıcı.
Alan McBee - MSFT

1
Yanıttaki bağlantı artık aracı işaret etmiyor. Başka bir canlı referans bulamadım.
buzoherbert

ilk bağlantı öldü. "Gizleyici"
Alp Altunel

2

Bir JavaScript kitaplığı kullanıyorsanız, Closure Compiler'ın Gelişmiş mod derlemesiyle uyumlu olan (küçük değişikliklerden sonra) Dojo Toolkit'i düşünün.

Dojo - Kapatma Derleyici ile Uyumlu Tek JavaScript Kütüphanesi

Closure Advanced moduyla derlenen kod , tüm kod tabanının (kütüphane dahil) gizlendiği için, bir güzelleştiriciden bile geçerek tersine mühendislik yapmak neredeyse imkansızdır . Aynı zamanda ortalama% 25 küçüktür.

Sadece küçültülmüş JavaScript kodunun (YUI Kompresör, Uglify vb.) Bir güzellikten geçtikten sonra tersine mühendislik yapmak kolaydır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.