İmzamı bir programda nasıl gizleyebilirim? [kapalı]


31

Bir üniversite programlama kursumuz var ve diğer öğrenciler Facebook grubumuzda bazı programlama soruları soruyorlar. Tüm programlarımı paylaşmak konusunda biraz tereddütlüyüm, özellikle görevlendirmelerden biri için iyi bir şeyse, bunlar TA'lara baktığında ve birinin aynı programa sahip olup olmadığını ve nereden geldiği hakkında sorular sormaya başladığını fark edebilirler. dan. Yine de, bazen başkalarına yardım etmek için kodumu paylaşmak isterim, ancak insanların çalışmamı almasını istemiyorum. (Açıklama: Görevlerle işbirliği yapmamıza izin verildi) Bu elbette ince bir çizgi. Bazı insanlara yardım etmek istememe rağmen, kodu kendi başlarına yeniden yazmak için akademik dürüstlükleri olmayabilir.

Öğrenci arkadaşlarımın çoğu becerilerinde çok ileri düzeyde değiller, bu yüzden adımı ayrı bir yere hazırlanmış Base-64 kodlu dizgede ismimi gizleyerek uzak dururum. Yine de, rastgele bir dizginin etrafta oturması çok açık olabilir.

Adımı şüpheli görünmeden bir programda gizlemek için hangi seçenekler var?

CodeGolf’ta, bilinçli sanatın değerlendirildiğinde diğer şeylere dönüşmesini sağladığını gördüm. Kullanabileceğim benzer stratejiler var mı? İdeal çözüm, gizlice uyan bir şeye benzeyen bir şey olabilir, ancak gerçekte onu en baştan kodladığımı kanıtlayacak bir işlevi vardır.

Açıklama: (Üzgünüm, bunu daha önce söylemeliydim) İşbirliği yapmamıza izin veriyor, ancak programlarımızı puanları almak için TA'larımıza açıklamamız gerekiyor. Bazı Paskalya Yumurtasının sızması durumunda diğerlerinin kodunda saklanması, özellikle de ürettikleri sorunların cevaplarının eşdeğer olduğunu kontrol etmek veya başkalarının sorunu nasıl çözdüğünü görmek için programları değiş tokuş etmek için cazip olacağı için memnuniyet içindir.


70
kodu paylaşma ama fikirleri paylaşma
cırcır ucube

7
Birkaç yıl önce yaptığım, farkedilmeyen şeyler (genellikle "ben" dediğiniz türden bir şey için) yazdığım her kodda kullandığım belirli bir isimle (benim durumumda: "pkmn") bir değişkene sahipti. j" ...). Birisi benim kodumu çaldığında, tüm kodu alamadılar ve değişkeni dokunmadan bıraktılar. Bu benim imzamdı.
DrakaSAN

29
Neden bize soruyorsun Profesörünüze veya TA'ya okulunuzda hangi davranışların uygun olduğunu sorun .
Eric Lippert

6
Bu bir steganografi uygulamasıdır . Normalde gerçek dünyadaki uygulamalar, mesajları sesli, görüntülü veya diğer kayıplı formatlarda gizlemeyi içerir, ancak genel durum burada uygulanabilir. Kabul edilen cevap iyi bir cevap ancak steganografiyi de öğrenmenizi tavsiye ederim.

2
Sadece biraz bozuk kod gönderme hakkında nasıl?
Benjol

Yanıtlar:


44

İmzanızı kodunuzda değil, herkesin erişimine açık bir geliştirme günlüğünde kullanın.

Kodunuzu genel bir Github deposunda yayınlayın. "Yazar" alanına adınızla birlikte bir Doküman Bloğu ekleyin. Bu şekilde programın asıl yazarı olduğunuza dair genel bir kayıt vardır.


Bu, "saklanma" olarak nitelendirilemez, ama bence öyle. Bir öğrenci kodunuzu kopyalamaya karar verirse, yalnızca sizin imzalarını değiştirmek zorunda olduklarını düşüneceklerdir. Halka açık yaptıklarını gösteren kanıtları sunarken şaşırdıklarını hayal edin. Meseleleri onlar için daha kötü hale getirmek için çevrimiçi olarak erişilebilir. Kodunuzun hangi kısımlarının çalındığını göstermek için Diffchecker gibi çevrimiçi bir araç bile kullanabilirsiniz !

EDIT: Yorumlarda belirtildiği gibi, okulunuzun çalışmanızı bu şekilde paylaşmasına izin verin! OP, kurumlarının bu konuda iyi olduğunu belirtti ancak sizinki olmayabilir!


26
@exizt - Bu okul ortamından sonra iyi bir fikir olsa da. Okul ortamındaki resmi durumların çoğunun bunu kabul edeceğinden şüphelerim var çünkü sonunda çalışmanızı diğer öğrencilerle paylaşıyorsunuz. Okulunuzdan ayrılmanın en iyisi, kendiniz için (ve yalnızca sizin) çalışarak onun için bir not alacaksınız.
Ramhound

4
@exizt - Profesörler hile konusunda endişeleniyorlar. Profesör, başka bir öğrenciyle çalışabileceğinizi söylemedikçe, normalde akranlarınızdan kod çıkarmama beklentisine sahip olurlar. Programa ihtiyacınız varsa, meslektaşlarınıza değil, öğretmen adaylarına ve / veya profesöre gitme beklentiniz vardır. Bu yüzden, bir not alabilmeniz için çalışmanızı kendinize saklamanızı önerdim. Tamamen sıcak ve bulanık olmasına rağmen, yazar sorununa değil akranlarına yardım etmek istiyor, işleri yardımsız yapamıyor. Sadece böyle bir tapu kanıtı bulunmamasına yardım edebilir Eğer orada oturup bir şeyler açıklamak isterse
Ramhound

4
Bu, orijinal yazarı nasıl çözer? Kodunuzu çalan kişi, github check-in işleminden önce yazdıklarını ve onlardan çaldığınızı iddia edebilir. Bunun sorudaki sorunu ele aldığını görmüyorum.
Adam Davis,

7
Üniversitemde TA görevlendirildikten sonra, bunun cevabını izlemenin akademik suiistimal için atıfta bulunacağının bir gerçeğini (ve bunun gerçekleştiğini izleyerek) biliyorum. Ülkemde (Avustralya), kopyalayıcıyla kopya sahibi arasında intihal konusunda ayrım yapan hiçbir üniversite politikasının farkında değilim ve bunun başka hiçbir yerde büyük ölçüde farklı olacağından şüpheliyim. Kodunuzu kendinize saklamak çok daha güvenli!
sapi

2
Git, istediği zaman damgasını koymayı taahhüt eder. Bu yüzden herhangi bir kanıt için git deposuna güvenebileceğinizden şüpheliyim.
Zan Lynx,

14

“Bunlar TA'lara baktığından ve birinin aynı programa sahip olup olmadığını anlayabildiklerinden dolayı”

Umarım öyle olur, hile, intihal ve diğer sahtekarlıkları tespit etmek ve cezalandırmak işlerinin bir parçasıdır.
Ve başkalarının çalışmalarını çoğaltmak ve kendin olarak bırakmak, bu hile ve intihaldır.

Çok basit: işinizi başkalarına vermeyin. Sorunların nasıl çözüleceği hakkında fikir vererek, kendi kodlarını yazmalarına izin vermek için kendilerini yazmalarına yardımcı olun.


Bingo. İlk ders kuralı, insanların kendi başlarına çözümler bulmalarına yardımcı olmanız gerektiğidir. İnsanların kodunuzu çalmasını istemiyorsanız, kodu vermeyin. Onlara yardım etmek istiyorsanız, ipuçlarını, yardımcı algoritmaların ve veri yapılarının listelerini veya çözümün üst düzey açıklamalarını yayınlayın.
Sean McSomething

2
Kod düzeyinde işbirliğinden elde edilecek çok şey var. 1) Başkalarına kod açıklama pratiği yapın 2) Çalışma ilişkileri kurma 3) Sınıf arkadaşlarının yeteneklerini öğrenme 4) En iyi çözüme sahip olmadığınız zaman sınıf arkadaşlarından öğrenme. Çaba toplayan gruplar adalarda yıldızlardan daha iyi performans gösterir. Diğer öğrenciler her zaman delilik olacak; OP, zaman zaman düşman tarafını hafifletirken, arkadaş tarafından en iyi şekilde yararlanmaya çalışıyor.
duozmo

@duozmo birlikte çalışma ile ilgili yanlış bir şey (ödev elbette izin verirse), başkaları için onlar için çalışmalarını yapmadığınız sürece. Ve hayır, diğer öğrencilerim üniversitedeyken asla düşman olmadılar. En kötüsü, en iyi görevler için rakiplerdi.
saat

7

Yukarıdaki cevap gibi, kod geliştirme sürecinizi günlüğe kaydetmek için Github gibi bir şey kullanmayı teşvik ediyorum, herkesin görebileceği bir depo olmasına rağmen, kaynağını paylaşmadan önce kendinize e-postayla göndermek gibi sırtınızı örtmek için kullanabileceğiniz başka yöntemler de var. şiddetle önerdiğim şeyi.

Elbette, kod paylaşımı oldukça gerekliyse. Peki ya sahte kod? veya "cırcır ucube" gibi, uygulama değil fikrini paylaşın. (bu daha karmaşık kod için daha mantıklı)


7

Mesajların gizlenmesinde en eski numaralardan birini de kullanabilirsiniz. Her değişkenin ilk harfinin bir mesajı gizlemesini sağlayın. Örneğin,

$Image = "test";
$a = "/test/img.jpg";
$message = "This is img.jpg";
$Full = 435674;
$rate = 3;
$ascii = "---....!--";
$number = 2040;
$k = 5;

// Do some work here?

6
Bunun gibi bir şeye bağlı kalmam - eğer onun kodunu kullanıyorlarsa, değişken isimleri ve sırayı değiştirmek, kopya çekmekten kaçınmak için açık bir adım olacaktır.
thegrinner

6

GitHub veya benzer bir çözümün sorun olmadığını düşünüyorum, ancak dikkate alınması gereken iki şey var:

  • Bu hala çalışmanızı kendi başlarına yapması gereken başkalarına veriyor, bu yüzden içinde bir tür Paskalya yumurtası saklamasanız da olmasa da cezalandırılabilir.
  • Okulun politikası bu tür şeyler için oldukça kısıtlayıcı olabilir. Örneğin, Almanya'da, öğrencilerine bir tür “sözleşme” imzalamalarını sağlayan ve hatta bu derste verilen ödevin bir parçası olarak geliştirdikleri her şeyin üniversitenin mülkü olduğunu belirten çok sayıda üniversite vardır. ve kurumun açık izni olmadan hiçbir şekilde dağıtılamaz. Bu yüzden internete okuldan bir şeyler göndermeden önce sormanızı şiddetle tavsiye ediyorum (genellikle her eğitimsel ve bilimsel kurumda bu konularda çalışan insanlar var), çünkü başınız gerçekten belaya girebilir ve bununla demek istemiyorum F almak, ama daha kötüsü. Arkadaşlarına gerçekten yardım etmek istiyorsan,

Bunların hepsi çok iyi noktalar! Cevabımda onları hiç düşünmedim.
sbichenko

endişe için teşekkürler, iyi noktalar :) Görevler konusunda başkalarıyla işbirliği yapmamıza izin veriyoruz, ancak bazılarını paylaşırsam, insanların kodumun kodunu kopyalamasını istemiyorum.
MikeFoxtrot

4

Kartografların da aynı problemi var . Birkaç teknik:

  1. Dilinizin geleneksel tarzına uygun olmayan bir sapma tanıtın, örneğin, operatörler çevresinde her zaman dengesiz alanlar var

    if (lefthand== righthand)

  2. Kullandığınız dilin bir parçasıysa, kodunuz boyunca no-op'ları dağıtın .

    lefthand = righthand;;


(1) öğrenciler Eclipse'in otomatik formatlayıcısı gibi bir şey kullanıyorsa dağılırlardı. (2) NOP'larla birlikte hoş biri.
Richard Le Mesurier

İnsanların sizi kopyaladığını ve tam tersi olduğunu nasıl kanıtlarsınız?
Pierre Arlaud

2
@ArlaudPierre bir kişinin daha önce dediği gibi, oyunun başlangıcından itibaren tüm programlar için böyle bir şey kullandığını, böylece kasıtlı olarak yaptığını ve diğer kişinin yapmadığını ispatlayabileceğinizi söyledi.
MikeFoxtrot

İlki blech'tir ve belirtildiği gibi bir formatlayıcı tarafından kolayca yenilir; İkincisi, herhangi bir iyi IDE'de uyarılar verecektir.
David Conrad,

3

Bir öğrenci olarak işinizde DEĞİL intiharı önleme , tamamen bir eğitmenin / TA'nın elinde.

Genel olarak konuşursak, okulu tedavi etmek kapalı kaynak işiydi. Sevgili öğrencileriniz diğer işverenlerin meslektaşlarıdır. Basit tek gömleklerin ve benzerlerinin ötesinde kod paylaşamazsınız ve tüm sınıfları veya projeleri ASLA paylaşmazsınız.

"Paskalya Yumurtası" nın kodda saklanması genellikle profesyonelce görülmez. (Görüşler burada değişebilir)

Kokan kodunu imzanız yapma

"İmzanız" veya kodunuzu diğerlerinden nasıl ayırt ettiğinizde zevkli olmalı ve kodunuzun "kokusunu" hiçbir şekilde engellememelidir. Bu yüzden aşağıdakileri kesinlikle önermiyorum:

  • Bilerek yanlış yazılmış şeyler (değişkenler, yöntem adları)
  • Kasten, kodu sizinki gibi işaretlemek amacıyla no-ops gibi "tuhaflıklar" kodunu ekleyin.
  • Standart olmayan veya sıradışı kod yapısını kullanarak (beyaz boşluk, satır kesmeleri, vb.)
  • Standart olmayan veya sıra dışı kodlama kalıplarını kullanma (gerçek kod mantığı)
  • Gereksiz yere kod dağıtımı (sebepsiz yöntemlerle gömme yöntemleri)
  • Alışılmadık bir şekilde ayırt etmeye çalışmak için başka herhangi bir kod hilesi veya sihirbazlık.

O zaman kodumu nasıl korurum?

Genel olarak, kısıtlı kullanılabilirliği konuşmak, kodunuzu korumanın en iyi yoludur. Eğer herkese açık hale getirmezseniz ve hiç kimse bilgisayarınızı rahatsız etmezse , kodunuz genel olarak güvenlidir. Tabii ki ayrıştırılabilir, tersine mühendislik yapılabilir, vs.

Halka açık yapmak istiyorum, ancak intihal düşmesini engellemek istiyorum.

Sadece hayır ... Elbette, kodunuzdaki karışık sihirbazlar, bir intiharı kodlarının da kullanılabilir olduğunu varsayarak öne çıkarabilir ... ve yapmayacaklardır .

Ayrıca, diğerleri kodunuzu okuyup gittiğinde sizi korkunç gösterir. "Tüm yazım hataları ve no-op'ların nesi var?"

Ama bir kod imzası istiyorum, koda bakabileceğim ve bunu yaptığımı söyleyebileceğim bir şey , o bendim, bu benim

Dürüst olmak gerekirse, iyi kodlarsanız, üzerinde çalıştığınız projelerdeki herhangi bir koddan genellikle ayırt edilemez olmalıdır. Elbette, Bob’un yaptıklarına karşı neyin üzerinde çalıştığınızı size bildiren nüanslar olabilir, ancak bunlar oldukça yumuşak olmalıdır.

Eşler arasında büyük bir şekilde göze çarpan tek zaman kodu, bir şeyin yeni olması ve dairenizde daha önce hiç yapılmamış olması veya dairenize özgü bir şekilde kokmasıdır.


Sen "versus" istiyorsun, "verses" değil. Siz ve Bob şiir yazmıyorsanız. ;)
David Conrad

@DavidConrad Teşekkürler, sonuçta kod şiirdir;) buna göre düzeltilmiş.
RualStorge

1

Sorunun kaynak kodunda bir imzayı gizlemek olduğu düşünüldüğünde,

  • hemen belli olmayacak
  • tesadüfen veya kazayla alınamaz
  • Gerektiğinde, kanıt oluşturabilecek bir kesinliğe kadar bulunur.

Steganografide ilginç bir varyasyon .

Biçimlendirme veya boşluk kullanamazsınız, çünkü bu, herhangi bir yetkili IDE tarafından önemsiz şekilde kaldırılabilir.

Bu gerçekten sadece değişkenlerin ve fonksiyonların isimlendirilmesini sağlar. Genel bir ayırt edici alt dize kullanamazsınız, çünkü bir arama ve değiştirme ile kolayca kaldırılabilir. Bu, ayrı ayrı kaldırılması gereken ayırt edici ve orijinal değişken adlarının kullanılmasını sağlar. Yazım hataları ve yabancı dil kelimeleri iyi adaylardır.

if (a== x) {}   // disappears on reformatting
int gghhjj_i;   // easily removed by search and replace, if all the same
int couunt = 0;  //spelling
int nummer = 0; // german
float doppel = 0.0; // german
string spago = "xx"; // italian
boolean manana = true; // spanish
struct perzon;  // excess use of z's.
class employeej; // what if every variable contained a 'j'?

Yaratıcılık için fırsatlar sınırsız!

Daha sonra, belirteçleri çıkarmak ve karşılaştırmak için bazı basit metin işlemleri, intihalcileri hızla keşfedecektir.


2
Aslında bunu caydırmaya gidiyorum. Bu sorunla başa çıkmanın yaratıcı yolunu takdir ederken, bunlar hiçbir profesyonelin uğraşmak istemediği alışkanlıklara yol açabilir. Bir mektubu değiştirmek vb. Fena değil ama kasıtlı olarak yanlış yazım, takım halinde çalışmaya başladığınızda sahip olabileceğiniz çok kötü bir alışkanlık. "Ah, 'ortak' klasörde", "" Ortak "adında bir klasör bulamıyorum", "Ah crap" commom "demek", "..." com_mom "," comm_mom "," commmom 'veya' commom '... "
RualStorge

Belli ki, ingilizcenin ilk dil olmadığı bazı dış kaynaklarla çalışmadınız. 'Duyuru' kelimesinin 11 farklı yazımını saydım (en azından sanırım öyle).
david.pfx

Bende "Commom" bu şekilde oldu. Günün rahatsız edici kelimesini düzeltmek için birisini sinirlendirene kadar birlikte yaşadığımız bir şeydi. "İmzanız" olarak öne çıkma amacıyla bu soruna eklenmesi çok değerlidir
RualStorge

@RualStorge: Ah. Zekice bir cevap, ama belki de bir röportajda çıkarılan biri değil?
david.pfx

1
Hayır, fakat daha sonra bir röportaj sürecinde söylenmeyen birçok şey var. Kötü proje yönetimine sahip bir şirkete girmek gibi ... Biri, şirketin uygulama ve politikalarını iyileştirmek için ince bir mahalle ve sınır çizgisi
sahtekarlığı


0

Daha önce kullandığım benzer bir şey, diğer önemli değişkenlerle aynı isimli değişkenler oluşturmak, ancak metin editörüne bağlı olarak isimlerini silmeyi, böylece değişimin kolayca görünmemesini sağlamak veya aksanlı harfleri kullanmaktır. Programın önemli değişkenlerinin birçoğunu, if ifadesinden göndereceğiniz ve hiçbir zaman doğru olmayacak şekilde, değişkenlerinizi kullanarak, birkaç işlevi çağırın, örneğin, eğer (1eft == wrōng) İşe yaramaz bir işlevde bazı önemli değişkenleri gizlenmiş imzanıza ayarlayın.

Yardımcı olamayacak 'Devamsız kod nasıl yazılır' konusunda birkaç ders bulabilirsin.


Ancak bu, programlar olması gerektiği kadar iyi olmadığından ve
TA'ların

Notunuz, fark edilirse, bunun için cezalandırılır. Kimse "logRepository" yi aramaya gittiğinde sadece "1ogRepository" yi bulmaktan hoşlanmıyor, sadece seni kötü gösteriyor.
RualStorge

Bu bana söyledi. Ceketimi alacağım.
Sanepete
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.