Açık kaynak olmayan bir JavaScript uygulaması yapmak istiyorum ve bu nedenle JS kodumu nasıl gizleyebileceğinizi öğrenmek isterim? Mümkün mü?
Açık kaynak olmayan bir JavaScript uygulaması yapmak istiyorum ve bu nedenle JS kodumu nasıl gizleyebileceğinizi öğrenmek isterim? Mümkün mü?
Yanıtlar:
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.
--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.
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ü
Ş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.
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.
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.
[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.
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?
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?
(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()
C İçinde gerçek kod ile görüntülemek zor bir php dosyası oluşturun
Bu php kodu nedir?
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=';}; ?>
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.
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 ...
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.
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.
İ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 .
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.
Ö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!
Dean Edward's Packer mükemmel bir obfuscator olsa da, kodunuzda sahip olabileceğiniz herhangi bir dize öğesi değil, öncelikle kodu gizler.
Bkz: Çevrimiçi Javascript Sıkıştırma Aracı ve açılır menüden Packer (Dean Edwards) seçeneğini belirleyin
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.
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 _sUserPreferredNickName
iç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.
Bananascript'i denediniz mi? Yüksek oranda sıkıştırılmış ve tamamen okunamayan kod üretir.
eval()
son satırda değiştirin console.log()
ve konsolunuz her şeyi
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.
Bir JavaScript / HTML / CSS obfuscator / kompresör olarak Patu Digua'yı da deneyebilirsiniz .
Bu küçültülüyor ancak gizlenmiyor. Java komut satırı kullanmak istemiyorsanız, javascriptinizi bir web formuna yapıştırabilirsiniz.
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.
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.
Bunu geçmişte kullandım ve iyi bir iş çıkarıyor. Ücretsiz değil, ama kesinlikle bir göz atmalısınız.
JavaScript Gizleme ve Kodlayıcı