Java Kaynak Koduna Erişilmenin Korunması [kapatıldı]


97

Geçen hafta, ev ödevi için küçük bir GUI oluşturmam gerekti. Okul arkadaşlarımdan hiçbiri yapmadı. Benim yüklemem gereken yerden benim kartımı çaldılar ve sonra tekrar kendilerininki olarak yüklediler. Öğretmenime her şeyin benim işim olduğunu söylediğimde bana inanmadı.

Bu yüzden işe yaramaz bir yöntem veya onu kodladığım bir kanıtı olan bir şey koymayı düşündüm. Şifrelemeyi düşündüm. Şimdiye kadarki en iyi fikrim:

String key = ("ZGV2ZWxvcGVkIGJ5IFdhckdvZE5U"); //My proof in base64

Başka daha iyi yollar düşünebilir misin?


31
Dosyaların yükleme sitesinde zaman damgası yok muydu?
Averroes

76
Kodunuzu yüklediğiniz yerden indirebileceklerini mi söylüyorsunuz? Bu çılgınca görünüyor. Öğretmenin yöntemlerini sorgulamalısınız. Tercihen, biraz mantıksız göründüğü için patronuyla konuşarak.
keyer

56
Epic ödevlerinden birinde başarısız olur ve tüm sınıfın başarısız olmasına izin verir.
2013 tarihinde

25
Öğretmen de acemi gibi görünüyor ...
UmNyobe

22
Bu durumda yapılacak tek mantıklı şey, ödevinizi nasıl yükleyeceğiniz konusunda öğretmenle konuşarak sorunu düzeltmeye çalışmaktır. Başkalarının sunumlarını indirebileceğiniz bir alana yüklemek sadece aptalca - Bu yaklaşımın iyi bir yaklaşım olduğunu düşünen bir öğretmenin gerçekten öğretmesi gerektiğinden emin değilim!
Michael Berry

Yanıtlar:


104

Uzun zaman önce seninle aynı sorunu yaşadım. Windows 2000 makinelerimiz vardı ve dosyaları herkesin görebileceği bir Novel ağ klasörüne yükledik. En iyi hırsızları bile yenmek için birkaç numara kullandım: boşluk filigranı; meta veri filigranı; sıradışı karakterler; güvenilir zaman damgası; modus operandi. İşte sırayla.

Boşluk filigranı:

Bu, filigranlamaya ilk katkım. Metin dosyalarında çalışan görünmez bir filigrana ihtiyacım vardı. Bulduğum hile, programlama ifadeleri (veya paragraflar) arasına belirli bir boşluk kalıbı koymaktı. Dosya onlara aynı görünüyordu: bazı programlama ifadeleri ve satır sonları. Metni dikkatlice seçmek beyaz boşlukları gösterecektir. Her boş satır, açıkça rastgele veya tesadüfi olmayan belirli sayıda boşluk içerir. (örn. 17) Uygulamada, bu yöntem benim için işe yaradı çünkü belgelere neyi gömdüğümü çözemediler.

Meta veri filigranı

Bu, dosyanın meta verilerini bilgi içerecek şekilde değiştirdiğiniz yerdir. Bir dosyanın görünmeyen kısımlarına, özellikle de EXE dosyalarına adınızı, bir karma değeri vb. Gömebilirsiniz. NT günlerinde, Alternatif Veri Akışları popülerdi.

Sıradışı karakterler

Bunu sadece tekme için atacağım. Eski bir IRC kimliğine bürünme hilesi, başka bir kişinin adına benzeyen harflerle bir isim yapmaktı. Bunu filigran yazmada kullanabilirsiniz. Windows'taki Karakter Haritası, size kaynak kodunuzda kullanabileceğiniz bir harf veya sayıya benzeyen ancak benzeyen birçok olağandışı karakter verecektir. Başkasının işinde belirli bir noktada ortaya çıkmaları tesadüfi olamaz.

Güvenilir Zaman Damgası

Özetle, bir dosyayı (veya karma değerini) üçüncü bir tarafa gönderirsiniz ve ardından ona bir zaman damgası ekler ve özel bir anahtarla imzalarsınız. Bir belgeyi ne zaman oluşturduğunuza dair kanıt isteyen herkes, oluşturma zamanınızın kanıtını doğrulamak için genellikle bir web sitesi olan güvenilir üçüncü tarafa gidebilir. Bunlar, fikri mülkiyet anlaşmazlıkları için mahkeme davalarında kullanılmıştır, bu nedenle çok güçlü bir kanıt biçimidirler. Aradığınız kanıtı elde etmenin standart yoludur. (Önce diğerlerini ekledim, çünkü onlar kolay, daha eğlenceliler ve muhtemelen işe yarayacaklar.)

Bu Wikipedia makalesi eğitmeninizin kanıtınızı anlamasına yardımcı olabilir ve harici bağlantılar bölümünde ücretsiz olanlar da dahil olmak üzere birçok sağlayıcı vardır. Test dosyalarını önemli bir şey için kullanmadan önce birkaç gün ücretsiz olarak çalıştırırdım.

Modus operandi

Yani, bir şey yaptın ve şimdi doğru kanıtın var mı? Hayır, öğrenciler yine de fikri onlardan çaldığını veya başka bir saçmalık olduğunu söyleyebilirler. Bu konudaki düzeltmem, özel olarak, eğitmenimle yöntemlerimden bir veya daha fazlasını oluşturmaktı. Eğitmene boşluğu aramasını, belirli sembolleri aramasını, vb. Ama filigranın ne olduğunu başkalarına asla söylememesini söylüyorum. Eğitmen basit tekniklerinizi gizli tutmayı kabul ederse, muhtemelen iyi çalışmaya devam edeceklerdir. Değilse, her zaman güvenilir zaman damgası vardır. ;)


5
+1 - Güzel, kapsamlı yanıt. Muhtemelen kabul edilen cevap olmalıdır.
Andy Thomas

5
Bir fikir daha: Baş harflerinizi değişken adlarında, alan adlarında, yöntem adlarında, sınıf adlarında vb. Kodlayın. Hırsız her şeyi yeniden yazmakta zorlanacaktır. (İyi bir koleksiyon olduğu için burada bahsetmiştim)
gaborsch

1
+1 GaborSch. Bu güzel bir ek. Belirsiz yöntem isimleri için puan kaybetmezseniz, taktik bu şekilde daha az belirgin hale getirilebilir ve adların baş harflerinin kendileri de adların içinde yayılabilir.
Nick P

4
Başka bir fikir GaborSch'un yorumundan ilham aldı: kasıtlı olarak belirli şeyleri yanlış yazmak. Bazı işlev veya değişken adlarında çok yaygın olmayan bir yazım hatası yapın. 10 kişi aynı şeyi kendi başına mı yaptı? Evet doğru ... (Not: Yeni Dünya İncil çevirisinin önde gelen bir eleştirmeni bunun bir KJV taklidi olduğunu iddia etti ve kanıt, KJV'deki nadir bir gramer hatasının "yepyeni" NWT'de olduğuydu. Yani, bu çalışmanın bir emsali var. )
Nick P

7
"Beyaz boşluk filigranı" ile ilgili dikkat edilmesi gereken bir nokta, IDE (yeniden) kodunuzu biçimlendirirse (örn. VS C # / Eclipse), bunların gitmiş olacağıdır.
Alvin Wong

63

Sınıf arkadaşlarınız kodunuzu yükleme sitesinden çaldıysa, ödevinizi şifreler ve anahtarı öğretmene e-posta ile gönderirim. Karmaşık olmak istiyorsanız veya şifreli bir Zip dosyası kadar basit bir şey istiyorsanız, bunu PGP ile yapabilirsiniz.

DÜZENLEME: PGP, anahtarınızı açığa çıkarmadan şifrelemenizi / imzalamanızı sağlar, ancak bir Zip dosyasının kesme basitliğini bir parola ile yenemezsiniz, bu nedenle her ev ödevinde yeni bir anahtar seçin. Sadelikteki güzellik :)


2
Bu en basit yaklaşımdır.
Jon Raynor

2
Kodun size ait olduğunu nasıl kanıtlarsınız? Kodunuzu çalabilir ve benimmiş gibi sıkıştırabilirim.
gaborsch

4
@GaborSch, eğer kodumu bir şifre ile bir zip dosyasına yüklersem, güneşin ısı ölümünden kısa bir süre sonra çalınan versiyonunu göreceğim (uygun şekilde seçilmiş şifre ile)
SeanC

11
Şifre çözme anahtarını başarıyla sağlayarak kodunuz olduğunu kanıtlayabilirsiniz.
Jonathan S. Fisher

10
Elbette, teoride pek çok boşluk var, ancak gerçekçi olarak, şifrelenmiş olarak gönderirse herhangi birinin dosyalarına erişme olasılığı düşük: Ne kadar ileri gidecekleri ve yeteneklerinin sınırları var. Ev ödevleri için bir GUI yazmayı başaramazlarsa, yakın zamanda herhangi bir zamanda şifreleri kırmayacak veya başkalarının bilgisayarına giremeyeceklerdir.
2013

39

Öğretmene kaynak kodu veriyorsan serialVersionUID, sınıf dosyalarından birine adının şifrelenmiş versiyonu olan a eklemen yeterli. Öğretmenin şifresini kendiniz çözebilirsiniz.

Bu diğerleri için hiçbir şey ifade etmiyor, sadece senin için. Üretilmiş bir kod olduğunu söyleyebilirsiniz, eğer onu çalıyorlarsa, muhtemelen onu değiştirmeye zahmet etmeyecektir.

Şık bir şekilde yapmak istiyorsanız , isminizi üreten rastgele tohumu bulursanız bu numarayı kullanabilirsiniz . :) O zaman bu sizin numaranız olurdu ve göründüğü her yerde bu kodu yapanın siz olduğunuzu kanıtlar .


5
Hırsız, hırsızlığı daha az belirgin hale getirmek için kodda kozmetik değişiklikler yapabilir. Seri sürüm UID'si, kolay bir kozmetik değişiklik olacaktır.
Andy Thomas

3
@GaborSch serialVersionUID'ye sahip olan mükemmel teşekkürler
allot

2
@ AndyThomas-Cramer evet, içinde şifrelenmiş ismim olan bir yöntem programlamalıyım ve kaldırılırsa program çalışmayacak haha
LoremIpsum

2
@ AndyThomas-Cramer Teoride evet. Pratikte hile yapanların çoğu tembeldir ve sadece gerekli olduğunu düşündükleri mutlak minimum şeyi yaparlar. (Muhtemelen değiştirilmesi //written by WarGodNTile //Written by ImaCheata.) Bu onları çok bile svUID onları mahvedecektir biliyorum da düşüktür. Birkaçı o kadar akıllı olsa bile; sınıfın çoğu kopya çekiyorsa, birkaçının yakalanacağı kesindir. En azından bu, öğretmeni sürecini serbest bırakmaya ikna etmek için yeterli olmalıdır.
Dan Is Fiddling By Firelight

3
@WilQu: Kendi kodunuzu başkasının adı veya özel anahtarıyla imzalamayacaksınız, değil mi?
Unslander Monica

35

Bu, aynı dairede yaşayan bir çift öğrencimde oldu. Biri kaynak kodunu masa çekmecesinde bırakılan bir diskten çaldı.

Hırsız, çalınan kaynağı biraz değiştirdi, böylece açık olmayacak. Yine de kodun benzerliğini fark ettim ve kaynağı bir editörde inceledim. Bazı satırların uçlarında fazladan boşluklar vardı. Her öğrencinin kaynağında aynı sayıda ekstra boşluk vardı.

Bilgiyi görünür hale getirmeden kodlamak için bundan yararlanabilirsiniz. Baş harflerinizi veya öğrenci kimliğinizi bazı satırların sonlarına boşluklarla kodlayabilirsiniz.

Bir hırsız büyük olasılıkla görünen kodda kozmetik değişiklikler yapacak, ancak görünmeyen karakterleri gözden kaçırabilir.

DÜZENLE:

Bunu biraz daha düşünürsek, boşlukları ve sekmeleri Mors kodu ditler ve dah'ler olarak kullanabilir ve adınızı birden çok satırın sonuna koyabilirsiniz. Bir hırsız, kimliğinizi bozmadan bazı satırları kaldırabilir, yeniden sıralayabilir veya yeniden yazabilir.

DÜZENLEME 2:

"Beyaz boşluk steganografisi", iletileri beyaz boşlukta gizlemek için kullanılan terimdir. Googling , 90'lı yıllara dayanan bu açık kaynaklı uygulamayı , Mors kodu yerine Huffman kodlamasını kullanarak ortaya koyuyor .


2
Rica ederim, soru için teşekkürler. Bana Mors kodu aralığını düşünme fırsatı verdi.
Andy Thomas

1
Herhangi bir Java IDE, tüm görünmez karakterleri kaldırarak kodu biçimlendirebilir ;-) Yine de mors kodu fikri güzel :-)
Prakash K

5
Uzantı: Herhangi bir dize değişmezinde, bazı boşlukları boş gibi görünen bir karakterle değiştirin. ASCII'deki 255 numaralı karakter veya unicode'daki "kaydedilemeyen boşluk" gibi. Yeni başlayanların çoğu farkı fark etmeyecek ve bu, kaynaklarınızı kimin (muhtemelen!) Çaldığını belirlemenize izin verecektir.
TheBlastOne

@PrakashK - Evet, bu önlemi karşılar. Bir önlem kombinasyonu muhtemelen en iyisidir.
Andy Thomas

@TheBlastOne - Güzel fikir. Kendi başına sizi tanımlamaz, ancak hırsız yeniden biçimlenirse kaybolmaz.
Andy Thomas

19

Bana bir BT yönetimi sorunu gibi görünüyor. Her öğrencinin, diğer öğrencilerin erişemeyeceği kendi yükleme alanı olmalıdır.

Öğretmen, her öğrenci yükleme klasörüne erişebilecek daha yüksek bir seviye olacaktır. Bu mümkün değilse @ exabrial cevabı ile devam edin, çünkü bu en basit çözümdür.


9

Yapabileceğiniz en iyi şey, kaynak kodunu bir parola ile sıkıştırmak ve parolayı öğretmene e-posta ile göndermektir.

Sorun çözüldü.


2
Basit çözümlere +1. Fazla mühendislik yapmayın. Ama önce profesöre sorun olup olmadığını kontrol edin.
Eduardo

6

Git gibi dağıtılmış (= bağımsız) bir sürüm kontrol sistemi kullanın . Çok da faydalı olabilir.

Adınız ve tarihlerin bulunduğu bir sürüm geçmişi yeterince ikna edici olabilir.


2
Ancak OP, kaynağının kendisi tarafından yaratıldığını kanıtlamakta başarısız olmaz. Okul arkadaşlarının kendi kaynaklarını kendi kaynakları için kullandığını kanıtlamakta zorlanıyor.
TheBlastOne

2
Dağıtılmış bir VCS oldukça karmaşıktır. Yazarın ihtiyacı olan tek şey, içeriğin ve / veya kopyalamanın orijinalliğini kanıtlamaktır. Bu, gönderiye zaman damgası vuran, göndereni tanımlayan ve öğrencilerin gönderimleri silmesine izin vermeyen herhangi bir dosya gönderme mekanizmasıyla gerçekleştirilebilir. Bu, bir FTP veya web sunucusu kadar basit bir şeyle yapılabilir.
Nick P

1
İşleme günlüğünü tarayacak ve aynı geçmişe sahip ancak farklı bir kullanıcıyla yeni bir depo oluşturacak bir komut dosyası yazmak oldukça kolaydır.
mikerobi

@mikerobi git filter-branchbunun gibi çılgın şeyler
Izkata

@ İzkata, revizyon geçmişini değiştirme olasılığını düşünmedim. İlk revizyonu kontrol eden ve başka bir depoya teslim eden, ardından ikinci revizyonu kontrol eden ve yeni repo taahhütlerini yayan, tekrar eden bir komut dosyası düşünüyordum. Bazı araçların bir VCS'den diğerine dönüştürülmesine benzer.
mikerobi

3

Ne çalındı?

  • Kaynak ? İçine rastgele Dizeler koyabilirsiniz (ancak değiştirilebilir). Ayrıca yalnızca sizden bildiğiniz özel bir davranış eklemeyi deneyebilirsiniz (özel bir tuşa basılması bir renk sırasını değiştirir), daha sonra öğretmene "diğerleri bu özel kombinasyonu biliyor mu?" Diye sorabilirsiniz. En iyi yol, 5 dakikalık etkinlikten sonra arşivde boş, işe yaramaz bir dosya yoksa programı çökertmek olacaktır, okul arkadaşlarınız bu süreyi beklemek için fazla tembel olacaktır.

  • İkili mi? Her .classın sağlama toplamını karşılaştırmak yeterli olacaktır (okul arkadaşlarınız sınıf dosyalarını yeniden yazmak için çok tembeldir)


2

Çözümünüzü son dakikada göndermeniz yeterlidir. Bu, kimseye kopyalamak için zaman vermez.

Ve öğrencilerin diğer öğrencilerin ödevlerini görmesine izin vermemek için yöneticiye bir geri bildirim gönderin.


1

Dosyayı parola şifrelemeli bir .zip biçiminde yüklerseniz, herkes .zip dosyasını indirerek parolayı kırabilir ve bu kadar büyük bir hile hırsızı iseler cpu'nun bir milyon sorgu çalıştırmasını sağlayabilir. Ne yazık ki, bazıları öyle ve yapması çok kolay.

Kaynağınız, diğer öğrenciler tarafından paylaşılan sunucuda görüntülenebilir. Öğretmen, yüklemeniz için size kendi şifreli dizini gerçekten vermelidir. Bu, yalnızca alt alan adları ekleyerek kolayca yapılabilir. Ama belki öğretmen, dosyalara orada erişmesi için kendi sunucunuza yüklemenize izin verebilir.

Komut dosyasını, bir document.write ('Bu sayfa xxxxx tarafından yazılmıştır') içerecek şekilde gizlemek de mümkündür, bu da çalışmanızı kopyalayanları, önce şifresini çözmedikçe krediyi silememeye zorlar. Ancak gerçek cevap, okulunuzun her öğrencisine kendi şifre korumalı dizinlerini vermesi gerektiğidir.


0

Benim durumumda, öğretmenlerim daha iyi bir yaklaşımla geldi. Verdikleri soruların kayıt numaramızla ilgisi var. Ör:

Bir fonksiyona / teoriye girdi, her öğrenci için farklı olan Kayıt numaramızdır.

Bu nedenle, cevaplar veya çözüme yaklaşım her öğrenciden nispeten farklıdır. Bu, tüm öğrencilerin zorunlu olarak ev ödevlerini kendi başlarına yapması veya en azından kendi kayıtlarıyla yaklaşımı nasıl kıracaklarını bilmelerini sağlar [it dersi öğrenmekten daha zor olabilir;)].

Hope your lecturer will read this thread before his next tutorial :D
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.