Jak mogę ukryć swój podpis w programie? [Zamknięte]

31

Mamy uniwersytecki kurs programowania, a inni studenci zadają pytania dotyczące programowania w naszej grupie na Facebooku. Nie jestem pewien, czy mogę udostępnić wszystkie moje programy, zwłaszcza jeśli jest to coś fajnego do jednego z zadań, ponieważ są one rozpatrywane przez pracowników pomocy technicznej i mogą zauważyć, że ktoś ma ten sam program i zacząć zadawać pytania o to, skąd on przyszedł z. Mimo to czasami chciałbym udostępnić mój kod, aby pomóc innym, ale nie chcę, aby ludzie po prostu chwytali moją pracę. (Wyjaśnienie: wolno nam współpracować z zadaniami) Jest to oczywiście cienka linia. Chociaż chcę pomóc niektórym ludziom, obawiam się, że mogą nie mieć akademickiej uczciwości, aby samodzielnie przepisać kod.

Większość moich kolegów nie jest zbyt zaawansowana w swoich umiejętnościach, więc chciałbym ukryć swoje imię w łańcuchu zakodowanym w Base-64, stworzonym w dyskretnym miejscu. Mimo to może być zbyt oczywiste, aby losowa struna siedziała wokół.

Jakie są opcje, aby ukryć moje imię w programie bez podejrzenia?

Widziałem w CodeGolf, że sprawili, że sztuka ascii zmieniła się w inne rzeczy podczas oceny. Czy są dostępne podobne strategie? Idealnym rozwiązaniem byłoby coś, co wygląda dyskretnie, ale w rzeczywistości ma funkcję potwierdzającą, że kodowałem to od samego początku.

Wyjaśnienie: (Przepraszam, powinienem to powiedzieć wcześniej) Możemy współpracować, ale musimy wyjaśnić naszym programom pomoc techniczną, aby uzyskać punkty. Z przyjemnością ukrywa się niektóre pisanki w kodzie innej osoby, jeśli wycieknie, szczególnie, że może być kuszące, aby wymieniać programy, aby sprawdzić, czy odpowiedzi na generowane przez nich problemy są równoważne itp. Lub zobaczyć, jak inni rozwiązują problem.

MikeFoxtrot
źródło
70
nie dziel się kodem, ale dziel się pomysłami
maniak ratchet
7
To, co zrobiłem kilka lat temu, miało zmienną o określonej nazwie (w moim przypadku: „pkmn”), której użyłem w każdym kodzie, który napisałem, z powodu rzeczy niezauważalnych (coś, co zwykle nazywasz „i”, „ jot"...). Kiedy ktoś ukradł mój kod, nie przejrzał całego kodu i nie zmienił zmiennej. To był mój podpis.
DrakaSAN
29
Dlaczego nas pytasz Zapytaj swojego profesora lub TA, jakie zachowanie jest właściwe w twojej szkole .
Eric Lippert
6
Jest to aplikacja steganografii . Zwykle rzeczywiste aplikacje obejmują ukrywanie wiadomości w dźwięku, obrazach lub innych formatach stratnych, ale tutaj ogólny przypadek ma zastosowanie. Przyjęta odpowiedź jest dobra, ale zalecałbym również poznanie steganografii.
2
A może po prostu opublikujesz subtelnie uszkodzony kod?
Benjol

Odpowiedzi:

44

Użyj podpisu nie w kodzie, ale w publicznie dostępnym dzienniku programowania.

Opublikuj swój kod na publicznym repozytorium Github. Dołącz Docblock ze swoim imieniem w polu „Autor”. W ten sposób istnieje publiczny zapis, że jesteś faktycznym autorem programu.


Może się to nie kwalifikować jako „ukrywanie”, ale moim zdaniem tak. Jeśli uczeń zdecyduje się skopiować Twój kod, pomyśli, że musi jedynie zamienić swój podpis na Twój. Wyobraź sobie ich zdziwienie, gdy przedstawisz publiczne dowody ich wykroczenia. Co gorsza, jest on dostępny online. Możesz nawet użyć narzędzia online, takiego jak Diffchecker , aby pokazać, które części twojego kodu zostały skradzione!

EDYCJA: Jak wskazano w komentarzach, upewnij się, że Twoja szkoła pozwala dzielić się swoją pracą w ten sposób! OP wskazało, że ich instytucja jest w porządku, ale twoja może nie być!

sbichenko
źródło
26
@exizt - Chociaż jest to dobry pomysł po szkolnym środowisku. Mam wątpliwości, że większość formalnych sytuacji w środowisku szkolnym zaakceptowałaby to, ponieważ w końcu nadal dzielisz się swoją pracą z innymi uczniami. Najlepiej zostawić pracę w szkole własną (i swoją w spokoju), dopóki nie uzyska się za nią oceny.
Ramhound
4
@exizt - Profesorowie martwią się oszukiwanie. O ile profesor nie powie, że możesz pracować z innym uczniem, normalnie oczekują, że nie będziesz zakopywał kodu od swoich rówieśników. Jeśli potrzebujesz tego programu, oczekujesz, że pójdziesz do TA i / lub profesora, a nie rówieśników. Z tego powodu zasugerowałem zachowanie pracy dla siebie, dopóki nie otrzymasz oceny. Choć wszystko jest ciepłe i rozmyte, autor chce pomóc swoim rówieśnikom, nie jest jego problemem, ale nie mogą wykonać pracy bez pomocy. Może pomóc po prostu nie mieć dowodów na taki czyn, jeśli chce tam usiąść i coś wyjaśnić
Ramhound
4
Jak to rozwiązałoby oryginalnego autora? Osoba kradnąca twój kod może po prostu twierdzić, że napisała go przed zalogowaniem się na github i że go ukradłeś. Nie widzę w tym rozwiązaniu problemu.
Adam Davis
7
Po ukończeniu TA na moim uniwersytecie wiem na pewno (i po obejrzeniu, jak to się dzieje), że po otrzymaniu tej odpowiedzi otrzymają informację o wykroczeniach akademickich. Nie znam żadnej polityki uniwersyteckiej w moim kraju (Australii), która rozróżniałaby kopiującego i kopiującego w odniesieniu do plagiatu, i wątpię, że byłby zupełnie inny w innym miejscu. Bezpieczniej jest zachować swój kod dla siebie!
sapi
2
Git pozwala zatwierdzić ustawić dowolne znaczniki czasu, które chce. Wątpię więc, czy możesz polegać na repozytorium git w przypadku jakichkolwiek dowodów.
Zan Lynx
14

„ponieważ patrzą na to TA i mogą zauważyć, że ktoś ma ten sam program”

Mam nadzieję, że ich zadaniem jest wykrywanie i karanie oszukiwania, plagiatu i innych oszustw.
Powielanie pracy innych i przekazywanie jej jako własnej, to oszustwo i plagiat.

To takie proste: nie oddawaj swojej pracy innym. Pomóż im napisać własne, jeśli chcesz, dając im pomysły na rozwiązywanie problemów, a następnie pozwól im wykonać własne kodowanie.

jwenting
źródło
Bingo Pierwszą zasadą korepetycji jest to, że powinieneś pomagać ludziom w samodzielnym znajdowaniu rozwiązań. Jeśli nie chcesz, aby ludzie kradli Twój kod, nie dawaj mu kodu. Jeśli chcesz im pomóc, opublikuj wskazówki, listy pomocnych algorytmów i struktur danych lub opisy rozwiązania na wysokim poziomie.
Sean McSomething
2
Dzięki współpracy na poziomie kodu można wiele zyskać. 1) Ćwicz wyjaśnianie kodu innym 2) Budowanie relacji roboczych 3) Uczenie się talentów kolegów z klasy 4) Uczenie się od kolegów z klasy, gdy nie masz najlepszego rozwiązania. Grupy, które łączą wysiłek, przewyższą gwiazdy na wyspach. Koledzy zawsze będą wrogami; OP stara się jak najlepiej wykorzystać od strony przyjaciela, jednocześnie łagodząc od czasu do czasu stronę wroga.
duozmo
@duozmo nie ma nic złego we współpracy (JEŻELI zadanie to na to oczywiście pozwala), pod warunkiem, że nie wykonasz dla nich pracy innej osoby. I nie, moi koledzy nigdy nie byli wrogami, kiedy byłem na uniwersytecie. W najgorszym przypadku byli konkurentami do najpiękniejszych zadań.
jwenting
7

Podobnie jak powyższa odpowiedź, zachęcam do używania czegoś takiego jak Github do rejestrowania twojego rozwoju kodu, istnieją inne metody, których możesz użyć, aby zakryć swoje plecy, takie jak wysłanie e-maila do źródła przed udostępnieniem go, chociaż publicznie dostępne repozytorium to co zdecydowanie zalecam.

Dzieje się tak oczywiście, jeśli udostępnianie kodu jest bardzo konieczne. Co z pseudo-kodem? lub, jak stwierdził „maniak ratchet”, podziel się pomysłem, a nie implementacją. (ma to sens w przypadku bardziej złożonego kodu)

CraigChilds94
źródło
7

Możesz także użyć jednej z najstarszych sztuczek w ukrywaniu wiadomości. Niech pierwsza litera każdej zmiennej ukryje wiadomość. Na przykład,

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

// Do some work here?
Francisco Presencia
źródło
6
Nie zależałbym od czegoś takiego - jeśli używają jego kodu, zmiana nazw zmiennych i porządku byłaby oczywistym krokiem, aby uniknąć przyłapania na kopiowaniu.
thegrinner
6

Myślę, że GitHub lub podobne rozwiązanie jest w porządku, ALE należy wziąć pod uwagę dwie rzeczy:

  • Nadal daje to twoją pracę innym, którzy powinni to robić sami, więc może być karalne bez względu na to, czy ukryjesz w niej jakieś jajko wielkanocne, czy nie.
  • Polityka szkoły może faktycznie ograniczać takie rzeczy. Na przykład w Niemczech istnieje wiele uniwersytetów, które nawet zmuszają swoich studentów do podpisania swego rodzaju „kontraktu”, który stanowi, że wszystko, co rozwijają w ramach zadania podanego w tym i tym kursie, jest własnością uniwersytetu i nie może być rozpowszechniany w żadnej formie bez wyraźnej zgody instytucji. Dlatego przed opublikowaniem materiałów szkolnych w Internecie zdecydowanie radzę ci zapytać (zwykle są ludzie, którzy pracują nad tymi rzeczami w każdej instytucji edukacyjnej i naukowej), ponieważ możesz wpaść w kłopoty i nie mam na myśli tylko dostaje F, ale znacznie gorzej. Jeśli naprawdę chcesz pomóc swoim kolegom,
rbaleksandar
źródło
To są bardzo dobre punkty! W ogóle nie rozważyłem ich w swojej odpowiedzi.
sbichenko
dziękuję za troskę, dobre punkty :) wolno nam współpracować z innymi przy zadaniach, ale nie chcę, aby ludzie kopiowali mój kod w celu przypisania, jeśli podzielę się częścią.
MikeFoxtrot
4

Kartografowie mają ten sam problem . Kilka technik:

  1. Wprowadź nieprawdopodobne odchylenie od tradycyjnego stylu języka, np. Zawsze zachowuj nierówne przestrzenie wokół operatorów

    if (lefthand== righthand)

  2. Rozrzucaj brak operacji w całym kodzie, jeśli są one częścią używanego języka.

    lefthand = righthand;;

duozmo
źródło
(1) rozpadłby się, jeśli uczniowie używają czegoś takiego jak auto-formatator Eclipse. (2) z NOP jest fajny.
Richard Le Mesurier
Jak udowodnisz, że ludzie na ciebie kopiują, a nie na odwrót?
Pierre Arlaud
2
@ArlaudPierre, jak jedna osoba wcześniej powiedziała, że ​​sztuczka jest zbyt podobna do wszystkich programów od początku roku, abyś mógł udowodnić, że zrobiłeś to celowo, a druga osoba tego nie zrobiła.
MikeFoxtrot
Pierwszy to blech i, jak wskazano, łatwo można go pokonać przez formatyzator; drugi daje ostrzeżenia w każdym dobrym IDE.
David Conrad
3

Zapobieganie plagiatowi NIE w pracy studenckiej, która leży wyłącznie w gestii instruktora / TA.

Ogólnie rzecz biorąc, traktuj szkołę tak, jakby to była firma zamknięta. Twoi koledzy są kolegami dla innych pracodawców. Nie możesz udostępniać kodu poza prostymi liniami, i NIGDY nie udostępniaj całych klas lub projektów.

Ukrywanie „pisanek” w kodzie jest ogólnie uważane za nieprofesjonalne. (Opinie mogą się różnić tutaj)

Nie rób śmierdzącego kodu swoim podpisem

Twój „podpis” lub sposób odróżnienia kodu od innych powinien być gustowny i nie powinien w żaden sposób utrudniać „zapachu” kodu. Dlatego zdecydowanie odradzam:

  • Celowo niepoprawna pisownia (zmienne, nazwy metod)
  • Celowe dodawanie „osobliwości” kodu, takich jak brak operacji, w celu oznaczenia kodu jako twój.
  • Używanie niestandardowej lub nietypowej struktury kodu (białe znaki, łamanie linii, ect)
  • Używanie niestandardowych lub nietypowych wzorców kodowania (rzeczywista logika kodu)
  • Niepotrzebne zaciemnianie kodu (metody zakopywania w metodach bez przyczyny)
  • Wszelkie inne oszustwa lub sztuczki w kodzie, aby spróbować je rozróżnić w nietypowy sposób.

Jak mam chronić mój kod ?!

Mówiąc ogólnie, ograniczenie dostępności jest najlepszym sposobem ochrony twojego kodu. Jeśli nie podasz go do wiadomości publicznej i nikt nie włamie się na Twój komputer, Twój kod jest ogólnie bezpieczny. Pewnie, że może zostać zdekompilowany, poddany inżynierii wstecznej itp. W tym momencie nie jest tak, że i tak będzie pasował do kodu, który go wygenerował.

Chcę to upublicznić, ale nie dopuść do plagiatu

Po prostu nie ... Za wszelką cenę niechlujne czarodziejstwo w twoim kodzie może wyróżnić plagiatora, zakładając, że również udostępni swój kod ... i nie będzie .

Sprawi też, że będziesz wyglądać okropnie, gdy inni przejrzą Twój kod i odejdą. „co do diabła jest ze wszystkimi literówkami i brakami?”

Ale chcę podpisu kodu, czegoś, na co mogę spojrzeć na kod i powiedzieć , że to zrobiłem, to byłem ja, to jest moje

Szczerze mówiąc, jeśli dobrze kodujesz, to na ogół nie można go odróżnić od żadnego innego kodu w projektach, nad którymi pracujesz. Jasne, że mogą to być niuanse, które dadzą ci znać nad tym, nad czym pracowałeś, w porównaniu z tym, co zrobił Bob, ale powinny one być dość łagodne.

Jedynym kodem czasowym wyróżniającym się na tle innych jest to, że coś jest nowe i nigdy nie było zrobione wcześniej w twoim kręgu lub pachnie w sposób unikalny dla twojego kręgu.

RualStorge
źródło
Chcesz „kontra”, a nie „wiersze”. Chyba że ty i Bob piszecie wiersze. ;)
David Conrad
@DavidConrad Dziękujemy, mimo wszystko kod jest poezją;) odpowiednio poprawione.
RualStorge
1

Ponieważ problemem jest ukrywanie podpisu w kodzie źródłowym gdzie

  • nie będzie to od razu oczywiste
  • nie można go usunąć przypadkowo lub przypadkowo
  • w razie potrzeby można go odzyskać do poziomu pewności, który stanowiłby dowód.

Ciekawa odmiana steganografii .

Nie możesz używać formatowania ani białych znaków, ponieważ może to być trywialnie usunięte przez dowolne kompetentne IDE.

To naprawdę pozostawia tylko nazywanie zmiennych i funkcji. Nie można użyć wspólnego wyróżniającego podłańcucha, ponieważ jest on zbyt łatwy do usunięcia przez wyszukiwanie i zamianę. Pozostawia to zastosowanie charakterystycznych i oryginalnych nazw zmiennych, które należałoby usunąć indywidualnie. Błędy ortograficzne i słowa w obcym języku są dobrymi kandydatami.

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'?

Możliwości kreatywności są nieograniczone!

Następnie proste przetwarzanie tekstu w celu wyodrębnienia i porównania tokenów szybko odkryje plagiatorów.

david.pfx
źródło
2
Właściwie to zniechęcę. Chociaż pochwała twórczego sposobu rozwiązania tego problemu, może to prowadzić do nawyków, z którymi żaden profesjonalista nie chce się uporać. Zmiana listu itp. Nie jest zła, ale celowe pisownia jest okropnym nawykiem, kiedy masz pracować w zespołach. „Och, hej, to jest w folderze„ wspólnym ”,„ Nie znajduję żadnego folderu o nazwie „wspólny”, „O cholera, mam na myśli„ commom ””, „… czy to„ com_mom ”,„ comm_mom ”,„ commmom ”lub„ commom ”...”
RualStorge
Oczywiście nie współpracowałeś z niektórymi outsourcingami, dla których angielski nie jest pierwszym językiem. Naliczyłem 11 różnych pisowni słowa „ogłoszenie” (przynajmniej tak mi się wydaje).
david.pfx
Tak, „Commom” powstało właśnie w ten sposób. Było to coś, z czym żyliśmy, dopóki nie wkurzyło kogoś na tyle, by naprawić cokolwiek złego słowa tego dnia. Dodanie do tego problemu w celu
wyróżnienia
@RualStorge: Ah. Genialna odpowiedź, ale może nie taka, którą można wypróbować podczas wywiadu?
david.pfx
1
Nie, ale z drugiej strony jest wiele rzeczy, których nie mówi się w trakcie rozmowy kwalifikacyjnej. Takich jak wejście do firmy z kiepskim zarządzaniem projektami ... Nie można powiedzieć, że planują aktywnie wykorzystywać subtelne podstępy i niesubordynację na granicy, aby poprawić praktykę i politykę firmy, ale oto jesteśmy;)
RualStorge
1

Sugestia duozmo dotycząca noops prawdopodobnie wygeneruje słabe oceny za niechlujstwo, ale dobrze byłoby dołączyć przykładowy kod, który nie powinien być używany dosłownie.

Zainspirowało mnie to do przemyślenia charakterystycznego wzoru tabulatorów i spacji zarówno w początkowych, jak i końcowych białych znakach.

Andy Dent
źródło
4
Jest już dla niego język - en.wikipedia.org/wiki/Whitespace_(programming_language)
Ondrej Svejdar
0

Coś podobnego, którego użyłem wcześniej, to tworzenie zmiennych o takich samych nazwach, jak inne ważne zmienne, ale zmienianie ich nazw w zależności od edytora tekstu, aby zmiana nie była łatwo oczywista, lub używanie liter z akcentami. Wywołaj kilka funkcji, do których wysyłasz wiele ważnych zmiennych programu z instrukcji if, wykorzystując twoje zmienne, co nigdy nie będzie prawdziwe, np. If (1eft == wrōng) Ustaw jakąś ważną zmienną w bezużytecznej funkcji do zaciemnionego podpisu.

Powinieneś być w stanie znaleźć kilka samouczków na temat „Jak napisać niemożliwy do utrzymania kod”, które mogą pomóc.

sanepete
źródło
Powinno to jednak spowodować utratę ocen, ponieważ programy nie są tak dobre, jak powinny, a także pracownicy pomocy technicznej nie będą w stanie ich odczytać
użytkownik151019
Twoja ocena będzie karana za to zazwyczaj, jeśli zostanie zauważona. Nikt nie lubi, kiedy idziesz do wyszukiwania „logRepository” tylko po to, aby znaleźć to faktycznie „1ogRepository”, to tylko sprawia, że ​​wyglądasz źle.
RualStorge
To mi powiedziało. Wezmę płaszcz.
sanepete