Jak zabezpieczyć kod przed kradzieżą.

0

Mam taki problem: jak mogę zabezpieczyć swój kod przed próbą skopiowania, albo jak oznaczyć go tak aby w wypadku kradzieży można było jednoznacznie określić jego autora. Złodziej może przejrzeć i delikatnie zmienić kod, więc umieszczenie komentarza z imieniem i nazwiskiem nic nie da.

0

Spojrz na ta tabelke:

0   48  00110000
1   49  00110001
2   50  00110010
3   51  00110011
4   52  00110100
5   53  00110101
6   54  00110110
7   55  00110111
8   56  00111000
9   57  00111001
A   65 01000001
B   66 01000010
C   67 01000011
D   68 01000100
E   69 01000101
F   70 01000110
G   71 01000111
H   72 01001000
I   73 01001001
J   74 01001010
K   75 01001011
L   76 01001100
M   77 01001101
N   78 01001110
O   79 01001111
P   80 01010000
Q   81 01010001
R   82 01010010
S   83 01010011
T   84 01010100
U   85 01010101
V   86 01010110
W   87 01010111
X   88 01011000
Y   89 01011001
Z   90 01011010
a   97 01100001
b   98 01100010
c   99 01100011
d  100 01100100
e  101 01100101
f  102 01100110
g  103 01100111
h  104 01101000
i  105 01101001
j  106 01101010
k  107 01101011
l  108 01101100
m  109 01101101
n  110 01101110
o  111 01101111
p  112 01110000
q  113 01110001
r  114 01110010
s  115 01110011
t  116 01110100
u  117 01110101
v  118 01110110
w  119 01110111
x  120 01111000
y  121 01111001
z  122 01111010

Wiadomo komentarze mozna usonac, wiec proponuje Ci zakodowac swoje jakies dane i klucz, np wygenerowany za pomoca gnupg. Nastepnie to wszystko zaszyfrowac i wyswietlic sobie jak wyglada kazdy znak po zaszyfrowaniu w postaci binarnej, czyli tak jak w tabelce.
Mozesz np. bit po bicie zaszyfrowac to w nazwach zmiennych, czyli wychodzi Ci po zaszyfrowaniu przykladowo miedzy innymi litera 'z', wiec tak:
01111010
teraz sobie szukasz osmiu liter, ktorych ostatni bit odpowiada po kolei kazdemu bitowi z tej litery i tak sobie nazywasz jakas zmienna, czyli musisz tak dobrac algorytm i literki, aby ta nazwa byla jakas sensowna. Nazywasz tak wszystkie zmienne, funkcje, itp. w ustalonej kolejnosci.
Oczywiscie algorytm musi byc odwracalny, zebys w razie czego mogl udowodnic, ze Ty jestes autorem tego kodu.

Strasznie duzo z tym roboty, ale watpie, zeby ktos to rozszyfrowal, poniewaz:

  1. nazwy zmiennych, maja byc sensowne
  2. dane maja byc zaszyfrowane i dopiero zapisane, wiec jak ktos nawet pomysli, ze jednak jest tam cos ukryte to zobaczy jakis syf i moze odposci
  3. trzeba wpasc na algorytm, ktorym to bylo zaszyfrowane, jak uzyjesz takich jak sha, czy rot :D to raczej mozna na to wpasc
  4. kod udostepniasz, wiec jakby nie bylo jest darmowy, czyli juz kilka osob odpada na starcie

Oczywiscie bedzie to jak najbardziej do odszyfrowania, ale jesli odpowiednio dobierzesz algorytm i nazwy zmiennych/funkcji/metod/klas/itp. to tylko nie licznym sie uda wpasc na taki pomysl i brac sie za odszyfrowanie kodu ogolnie dostepnego.
Nie zabezpieczy Cie to w 100 procentach, ale zawsze zabezpieczy ;)

0

Moim zdaniem skomplikowane i bezużyteczne. Pierwszym co takie osob robią jest refactoring poelgający na zmianie nazw i kolejności instrukcji ;)

0

Jak zabezpieczyć kod przed kradzieżą
Schować do sejfu i postawić przy nim goryla z automatem.
Żadne programowe rozwiązanie przed zdeterminowanym hakerem cię nie uchroni.

0

@Shalom: wiesz zalezy jaki to bedzie kod i kto sie na niego polakomi.

Ja bym w takiej kolejnosci usowal/edytowal, hipotetycznie oczywiscie:

  1. komentarze
  2. nazwy funkcji/klas/metod i wszystkiego innego co da sie wywolac od razu
  3. nazwy zmiennych globalnych
  4. nazwy parametrow tego co da sie wywolac :D
  5. teraz lokalne zmienne

Typow bym nie ruszal, a mozna tak to zrobic, zeby w nazwie "int" cos zaszyfrowac i poustawiac w odpowiedniej kolejnosci deklaracje zmiennych, wiec mysle ze to juz by wiele dalo. Nawet petle tak dobierac, zeby juz cos wychodzilo z nazw 'for', 'while'.
Strasznie duzo roboty, ale co zrobic w takim przypadku ?

Jak ktos bedzie chcial ukrasc kod ogolnie dostepny to gratuluje pomyslowosci, ale tak naprawde i tak ukradnie.

0
Azarien napisał(a)

Żadne programowe rozwiązanie przed zdeterminowanym hakerem cię nie uchroni.

Obfuskatory kodu źródłowego np. dla C++ chodzą za grube tysiące dolarów, są w stanie całkowicie przebudować źródło programu. Nie ma gwarancji, że ponowne potraktowanie innym obfuskatorem usunie wszelkie markery zawarte w strukturze kodu.

@t0m_k, nazwy to sobie możesz zmieniać, to nic nie da. Nawet amator z zacięciem i softem do refaktoryzacji pozmienia praktycznie wszystko co się da.

0

Jak zabezpieczyć kod przed kradzieżą
Wydać na GPL.

0
Drajwer napisał(a)

Jak zabezpieczyć kod przed kradzieżą
Wydać na GPL.

A przed „kradzieżą” chroni to jak?

Autor wątka nie określił dokładnie co ma na myśli pisząc „kradzież kodu”. Jeśli chodzi o „zabranie” czyjegoś publicznie dostępnego kodu, i podpisanie go własnym nazwiskiem, to GPL do tego wręcz prowokuje, na tej samej zasadzie co podatek 100% prowokuje do jego niepłacenia.

0

@Azarien - no ale to nie będzie kradzież. Wszystko zupełnie legalnie ;)

0

Przez kradzież rozumiem skopiowanie kodu źródłowego i przedstawianie go jako swojego. Zabezpieczenia jakie mnie interesują powinny sprawić, że kod się nie skompiluje/uruchomi jeżeli zostanie skopiowany. Zakładam, że złodziej będzie kopiował tylko kod, dlatego jakiś ukryty plik który jest wymagany do działania uznaje za jakieś zabezpieczenie. Chciałbym się dowiedzieć jakie są inne metody zabezpieczania lub znakowania kodu.

0

jakiś ukryty plik który jest wymagany do działania uznaje za jakieś zabezpieczenie

Takie zabezpieczenie złamie każdy.

Zabezpieczenia jakie mnie interesują powinny sprawić, że kod się nie skompiluje/uruchomi jeżeli zostanie skopiowany.

Firmy komputerowe wydają grube tysiące/miliony/wtf na zabezpieczenia antypirackie (np. gier) a ty chcesz zabezpieczyć swój program w warunkach prawie że domowych, za darmo?

0

Zdziwiłbyś się MSM, ale trochę dobrych protectorów jest tworzonych i rozwijanych w warunkach domowych, przez pojedyncze osoby. Wypadałoby odróżnić zabezpieczanie i znakowanie kodu źródłowego od zabezpieczania aplikacji. Poza tym język też ma znaczenie. Tak czy inaczej - obfuscator.

Co do ukrytych plików - rotfl. Starczy skopiować folder.

0
Świętowit napisał(a)

Co do ukrytych plików - rotfl. Starczy skopiować folder.

Kopiując ukryte pliki==oznaczony kod.

Jeżeli komuś zależy to nieważne co się zrobi i tak zabezpieczenie złamie.
Powiedzmy że zależy mi na tym, aby profesjonalista złamał zabezpieczenia w 5-10min.

0
notaras napisał(a)

Powiedzmy że zależy mi na tym, aby profesjonalista złamał zabezpieczenia w 5-10min.

Dołącz na początku każdego pliku źródłowego 'Profesjonalisto, idź zrobić dobrą kawę!'.

0

dobre zabezpieczenia to takie których na pierwszy rzut oka nie widac, można robic kod rewizyjny tj biblioteki kompilowac z różnych wersji bardzo delikatnie sie od siebie rózniących, wtedy dane elementy hashujesz, wszystko powinno wygladac naturalnie. W szczególności dobrze jest pokompilować kod za pomoca różnych wersji kompilatora, i różnych flag. Mozna w stosunku do małych prostych funkcjo mało odpalanych dodac troche dodatkowego nadmiarowego kodu, np sprawdzac obszar pod katem czegos, tak zeby nie bylo obciazajace dla aplikacji ale jednak zmieniało troche kodu. Wtedy tworzysz skrypt ktory wygeneruje odpowiednio spreparowaną wersję, walisz make'a czy co tam masz zapisujesz sobie kto to kupił i wsio. W takich warunkach musisz dissasemblerke sprowadzic do poziomu sprawdzania co kazdy skok i instrukcja robi, a watpie zeby ktos sie tego podjął, byłoby mu szybciej chyba to napisac samemu.

0

Sorry stary, ale o czym Ty pieprzysz? Mówimy o kodzie źródłowym...

0

mhm, wydawało mi sie ze chodziło o cos ala biblioteka, w kazdym razie jezeli mowimy o oznaczaniu plikow tekstowych to po prostu odpowiednio formatujemy kod takze w rewizje, zrob 3 wersje kazdego pliku rozniace sie od siebie minimalnie, to moze byc nawet po 7 lini na plik jak masz duzy projekt to to bedzie max 100 plikow z kodem własnym czyli koło 3000 linii, przepisanie powinno zajac mniej wiecej tyle samo czasu. Nikt nie bedzie przeciez tego zmieniał manualnie, a mamy w końcu wiele mozliwosc nawet zrobienia pętli.
Ktoś powie że to duzo roboty, no ale jak chcemy dobrze to zabezpieczyc? To musi kosztowac troche pracy, jak używa się kodu cudzego (bez wzgledu na licencje) to i tak robisz ctrl+c i ctrl+v. Potem tylko napisac skrypt wykrywający rewizje pliku. Jak ktos ci skopiuje jeden plik albo 3 to tam banan, gorzej jak cały lub pół projektu.
Matematycznie sobie obliczcie ile da sie wygenerowac wersji z 100 plikow z 3 wersjami :) To ma swoje granice oczywiscie, ale gdybym sprzedał taka ilosc to chyba bym zatrudnił do tego dedykowanego programiste.

0

Formatowanie? Z nawyku w swoim IDE wszystko formatuje tak aby wygodnie mi sie czytalo kod, pare skrotow klawiatury i nawiasowanie, odstepy miedzy operatorami, klamry sa sformatowane wedlug moich potrzeb.
Nie widze wiekszych szans na zabezpieczenie otwartego kodu zrodlowego z wyjatkiem pierwszego sposobu, ktory tez pozostawia wiele do zyczenia.
Mysle, ze udostepniajac kod trzeba sie liczyc z tym, ze ktos moze go skopiowac i tyle. Komu to sie nie podoba niech nie udostepnia.

0

tak, ale mnie nie tyle chodziło o entery co przykładowo małe zmiany w pętli, kilka rożnych podejść, tego nikt nie bedzie zmieniał.

0

Ech, pisze się parser, buduje drzewo wyrażeń, robi trochę przekształceń i wypluwa z tego nowy kod. Przekształcenia wybierane i wykonywane na bazie jakiejś wartości początkowej, np. identyfikatora użytkownika. Dla każdego usera otrzymujemy nowy kod, do tego posiadający pewne cechy charakterystyczne + niezależność od takich rzeczy jak zmiany identyfikatorów czy formatowania.

0

A warto w ogóle się w coś takiego bawić? I tak pomysł masz w swojej głowie. Gorszym zagrożeniem jest zleceniodawca, który Ci nie zapłaci.

0

Jeżeli się tylko da, to kod zabezpiecza się poprzez rozwiązania client-server, gdzie większość lub cała logika aplikacji znajduje się na odległym serwerze, do którego użytkownik nie ma dostępu i to jest najlepsze rozwiązanie.

0

No wiadomo - jeżeli nie możesz tego dotknąć to nie możesz tego złamać. Ale wymaga to mocnego serwera albo i chmury serwerów, a to pociąga za sobą abonamenty i mnóstwo pieprzenia z zarządzaniem tym. Dobre rozwiązanie ale tylko dla dużych projektów.

0

Jeśli ruch nie jest duży, to można serwer postawić u siebie w domu na łączu wychodzącym 2Mb z systemem operacyjnym windows. Komputer do tego najtańszy używany za 100 zł. Może być też laptop włożony do biurka, żeby go nie było słychać w nocy. W routerze nastawić przypisanie dynamicznego IP do mac karty sieciowej tego komputera, żeby się nie zmienił adres wewnętrzny gdy napięcie zasilające chwilowo zaniknie.

0

Wiecie co? Ja wam powiem tyle że na świecie nie ma rzeczy niemożliwych!
Są tylko niewykonalne i nie opłacalne.
Z tym że znalezienie sposobu na zakodowanie nazw zmiennych (tak żeby nikt ich nie odczytał) jest wykonalne, ale udaremnienie komuś kradzież nie!
A próbowanie zrobienia czegoś co takową kradzież uniemożliwi jest nieopłacalne, bo i tak nie znajdziesz takiego sposobu bo jak już mówiłem to nie wykonalne.

Bo nawet jeżeli zakodujesz jakoś słowo "Jestem z Krakowa" i zakodujesz to np. tak "a5s8c9 8 sf2b9eh", to nie możesz udowodnić tego jak to zrobiłeś, bo zawsze może znaleźć się jakiś lamer co użyje innego algorytmu z którego wynika że "a5s8c9 8 sf2b9eh" znaczy "Bolek i Lolek".

1 użytkowników online, w tym zalogowanych: 0, gości: 1