Dekompliacja programu EXE

0

Witam,

Napisałem program, który zamierzam sprzedawać jako produkt komercyjny. W związku z tym pojawia się kwestia zabezpieczenia programu przed 'piratowaniem'.
Jako zabezpieczenie programu wybrałem klucz HASP HL Pro i klasyczne kopertowanie pliku wykonywalnego 'exe'.
http://www.systherm-info.pl/HASP/index.php?option=com_content&view=article&id=92&Itemid=201

Tak wiec zakładam, że program poprzez kopertowanie będzie dobrze chroniony.

Mam jednak spore wątpliwości jeżeli chodzi o wersję demonstracyjną, którą chcę umieścić na stronie - do pobrania i przetestowania.
Wersji demonstracyjnej nie zamierzam kopertować bo ograniczy to możliwość przetestowania programu (niezbędny klucz USB który musiałbym wysyłać - sporo zachodu).

W związku z tym mam pytanie - czy zamieszczona wersja demo może być zdekompilowana w taki sposób, że ktoś uzyska kod źródłowy wersji demo ? Czy dekompilacja to żadem problem, czy może "wyciągnięcie" kodu z pliku exe to mrzonka?
Jeżeli dekomplilacja jest możliwa to jest to w moim przypadku duży problem gdyż mając kod źródłowy wersję demo można przerobić dość prosto na wersję pełną.

Proszę o opinie na temat możliwości dekompiplacji pliku exe wykonanego w DELPHI ? Zaznaczam, że plik exe nie będzie kopertowany HASPem.

0

Kodu źródłowego jako-tako nie uzyskasz; a nawet jeżeli, to nie będzie on możliwy do skompilowania.

gdyż mając kod źródłowy wersję demo można przerobić dość prosto na wersję pełną.

JZ na JMP, prawda?
Skoro tak łatwo można demo na pełną wersję przerobić, to coś zepsułeś.

0

Wszystko jest bardzo prosto:

  1. Nie da się zrobić takich zabezpieczeń aby zupełnie się nie dało ich się pozbyć mając samo exe.
  2. Przy pewnej ilości/jakości takich zabezpieczeń okazuje się że "taniej" kupić od producenta niż walczyć z tymi zabezpieczeniami.
  3. Właśnie taki poziom zabezpieczenia w zupełności wystarczy.
0

Kodu nie uzyskasz jeżeli chodzi o Delphi to jest tylko możliwość deasemblacji (czyli uzyskania kodu w assemblerze) można też uzyskać informację na temat nazw modułów dlatego nie powinny być ona jasne dla potencjalnego crackera ale jednocześnie tak nazwane abyś nie pogubił się w projekcie w każdym razie nie nazywaj modułu. np. splashdemo.pas można też uzyskać kod plików dfm.
Wszystko zależy tylko od tego jak ograniczysz wersję demo jeżeli umieścisz kod funkcji których być nie powinno w założeniach wersji demo (jakieś ograniczenia np. możliwość zapisu) to będzie można taki program scrackować tak jak napisał poprzednik np. zmieniając instrukcje skoków. Można to trochę utrudnić złamanie zabezpieczeń programu szyfrując program jakimś pe crypterem.

0

Dziękuję za odpowiedź.

Wersję 'pełną' (czyli nie demo) zakopertuję i uważam, że to wystarczy. Bez klucza USB nie pójdzie.
Rozumie, że odnośnie wersji demo nie zabezpieczonej w żaden sposób (zamieszczona na stronie w postaci skompilowanego EXE) nie ma obaw, że ktoś ją dekompiluje do postaci kodu źródłowego, zmienia w kodzie z 'demo' na 'full' i program jest zcrackowany ?

0

Tak jak napisałem taka możliwość jest np. jeżeli ograniczysz demo w taki sposób:
Pseudo kod na przykładzie np. funkcji zapisującej:

zapisz 

jeżeli pełna wersja skok do zapis

demo:
info ze w demo nie ma możliwosci zapisu
skok do koniec

zapis:
funkcja zapisujaca

koniec:

Tutaj cracker zmienia tylko instrukcje skoku i ma pełną wersję. Aby nie było możliwości złamania tego programu funkcji zapisujacej nie powinno tam w ogóle być.

1

aby wersja demo była nie do "złamania" to trzeba z niej po prostu fizycznie wywalić np. możliwość zapisu. Wywalić kod źródłowy odpowiedzialny za to czego ma nie być i osobno skompilować taką wersję. Jest tu trochę zachodu ale masz gwarancję, że nikt nie dostanie czegoś, czego fizycznie nie ma. Wywalenie tego kawałka kodu też nie ma tu ujemnego znaczenia ponieważ i tak u Ciebie nie da się zamienić demo na full tylko trzeba dostać full razem z kluczem

0

Dziękuję wszystkim za odpowiedź.

Niestety potwierdziły się moje obawy, że zabezpieczenie wersji FULL to jedna sprawa i niezależnie od tego muszę "pociąć" kod źródłowy tak, aby przygotować wersję DEMO bez sporej części kodu.
Powiem szczerze, że póki co miałem wszystko w 1 projekcie i dość naiwnie chciałem zmienić jedną zmienną:

demoversion:=true

Raz jeszcze dziękuję za pomoc.
Kto pyta mniej błądzi :)

0

Poczytaj o IFDEF, etc.
Tutaj będzie przydatne ;)

Np.

{$DEFINE demoversion}

Procedure Save;
Begin
 {$IFDEF demoversion}
  RequireFullVersion();
 {$ENDIF}
 {$INFDEF demoversion}
  [wykonaj zapis]
 {$ENDIF}
End;

Jest to o tyle lepsze od if'ów, że kod który nie zostanie wykonany nie zostanie w ogóle dołączony do kodu wynikowego.

0

Tak wiec zakładam, że program poprzez kopertowanie będzie dobrze chroniony.

Powiedział co wiedział. Gotowe zabezpieczenia mają to do siebie że są już zbadane i wiadomo jak je zcrackować.

Powiem szczerze, że póki co miałem wszystko w 1 projekcie i dość naiwnie chciałem zmienić jedną zmienną:

Pokazujesz że nie znasz się na zabezpieczaniu plików, więc już lepiej używaj gotowców niż pisz samemu, ale bądź pewien że da się to złamać.

Procedure Save;
Begin
 {$IFDEF demoversion}
  RequireFullVersion();
 {$ENDIF}
 {$INFDEF demoversion}
  [wykonaj zapis]
 {$ENDIF}
End;

Ktoś tu o ELSE nie słyszał.. Jak chcesz dać mądry przykład to daj jakiś link..

Bez klucza USB nie pójdzie.

Powiedział co wiedział...

nie ma obaw, że ktoś ją dekompiluje do postaci kodu źródłowego, zmienia w kodzie z 'demo' na 'full' i program jest zcrackowany ?

Jak masz zmienną, to będzie to banalne. Jak wytniesz kod, to musi to sam dopisać. Nie rozumiesz działania procesu kompilacji i ty masz zabezpieczyć program? Masakra... Weź poczytaj o plikach PE,debuggerach, pobaw się w crackera to będziesz więcej rozumieć,,

0

Szanowny -oho123

Na początek jedna kwestia - skoro ktoś (w tym przypadku ja) o coś pyta na forum to znaczy, że nie wie. W związku z tym Twoje stwierdzenia:

Powiedział co wiedział
albo
i ty masz zabezpieczyć program? Masakra...
świadczą bardziej o Tobie niż o mnie...

Zawodowo zajmuje się budownictwem, hobbistycznie pisze programy więc nigdy nie będę programistą. Nie oznacza to jednak, że nie powinienem pytać takich jak Ty znających się na rzeczy.
To raczej Ty na pytania takich jak ja powiedział co wiedział nie powinieneś się wypowiadać bo zdrowie masz jedno i nie ma się co irytować tymi co nic nie wiedzą ;)

Powiem Ci jednak szczerze, że pomimo Twojej soczystej wypowiedzi nie jestem usatysfakcjonowany :|
Moją wypowiedź:
Tak wiec zakładam, że program poprzez kopertowanie będzie dobrze chroniony.
skomentowałeś:

Powiedział co wiedział. Gotowe zabezpieczenia mają to do siebie że są już zbadane i wiadomo jak je zcrackować.

W związku z tym wyjaśnij nam wszystkim proszę, czy rzeczywiście jest tak, że zabezpieczenie polegające na zakopertowaniu EXE jest nic nie warte i że można je zcrackować?
Jeżeli jest tak rzeczywiście, to oznacza że np. firma SYSTHERM INFO Sp. z o.o. to naciągacze, którzy sprzedają zabezpieczenie w postaci kluczy HASP HL oraz soft do kopertowania Sentinel HASP 5.1 skoro takie zabezpieczenie (jak sam napisałeś)?

jest zbadane i wiadomo jak je zcrackować

Może masz racje, może tak właśnie jest. Ja tej pewności nie mam więc nieśmiało spytam ;)

0

Są 2 możliwości:

  • stworzysz aplikacje taką zajebistą, że najlepsi crakcerzy rzucą się na nią i za kilka miesięcy znajdziesz już keygena na stronkach z crakcami i na peb.pl. W takim wypadku, i tak nie dasz rady jej tak zabezpieczyć żeby uniemożliwić złamanie. Nie ma więc sensu i tak zawracać sobie głowy zabezpieczaniem twojej aplikacji. Z drugiej strony, jeśli byś potrafił napisać aplikacje która będzie warta chociaż 500 zł i każdy prawie użytkownik komputera będzie pragnął pełnej wersji to nie pytałbyś tu o takie rzeczy.
  • ci, którzy będą używać twojej aplikacji (jeśli tacy się znajdą) nie mają w ogóle żadnego pojęcia o łamaniu aplikacji i tworzeniu cracków, bo ledwo umieją obsługiwać system operacyjny nie mówiąc o reszcie. Poniewaz nie nastąpiła sytuacja z punktu poprzedniego, nigdzie cracka do twojej aplikacji nie znajdą. Nie ma więc sensu zawracać sobie głowy szczególnym zabezpieczaniem twojej aplikacji.

WNIOSEK: daj sobie spokój z tym. Pierwsza sytuacji jest niezwykle mało prawdopodobna.

0

[Twoje stwierdzenia] świadczą bardziej o Tobie niż o mnie...

Przecież to nie przedszkole.

Zawodowo zajmuje się budownictwem, hobbistycznie pisze programy więc nigdy nie będę programistą. Nie oznacza to jednak, że nie powinienem pytać takich jak Ty znających się na rzeczy.

Jasne, że pytaj, ale jestem za tym żeby samemu ogarniać temat (są tutoriale itd.)

To raczej Ty na pytania takich jak ja powiedział co wiedział nie powinieneś się wypowiadać bo zdrowie masz jedno i nie ma się co irytować tymi co nic nie wiedzą

Nie, nie irytuję się aż tak jak się może wydawać z mojej wypowiedzi.

Powiem Ci jednak szczerze, że pomimo Twojej soczystej wypowiedzi nie jestem usatysfakcjonowany
Moją wypowiedź:
Tak wiec zakładam, że program poprzez kopertowanie będzie dobrze chroniony.
skomentowałeś:

Miałem ci podać 5 sposób którymi można to zhackować skoro nie umiesz podstaw?
Ja nawet nie mówię że sam umiem to zrobić! Po prostu umiem podstawy, nigdy nie hackowałem programów, ja je zabezpieczam.
Ale dzięki temu wiem, że każde zabepieczenie da się złamać. I to nie jest pytanie CZY da się złamać tylko W JAKIM czasie.
Dlatego na każde stwierdzenie 'że to dobre zabezpieczenie' wybucham śmiechem. Bo ani ty, ani ja nie jesteśmy crackerami, a cracker by to złamał bez problemów. Z tym że ja mam o tym pojęcie, a ty nie.

W związku z tym wyjaśnij nam wszystkim proszę, czy rzeczywiście jest tak, że zabezpieczenie polegające na zakopertowaniu EXE jest nic nie warte i że można je zcrackować?
Jeżeli jest tak rzeczywiście, to oznacza że np. firma SYSTHERM INFO Sp. z o.o. to naciągacze, którzy sprzedają zabezpieczenie w postaci kluczy HASP HL oraz soft do kopertowania Sentinel HASP 5.1 skoro takie zabezpieczenie (jak sam napisałeś)?

Każde zabezpieczenie da się złamać. Najlepsze moim zdaniem są zabezpieczenia własne, bo są niezbadane. Jeżeli wymyślisz coś nowego, to jest to zabezpieczenie lepsze, bo nieznane. Wszystkie te komercyjne zabezpieczacze są zbadane i wiadomo jak je złamać. Oczywiście, coś tam mają, ale złamanie tego to kwestia czasu.

Może masz racje, może tak właśnie jest. Ja tej pewności nie mam więc nieśmiało spytam

Othello ci bardzo ładnie (i nieco mniej dosłownie niż ja) wytłumaczył o co chodzi. Jeżeli warto złamać twój soft, to twój soft już jest złamany.

ty za to podałeś tyle konkretów, że aż głowa boli...

@Misiekd , przecież to nie kurs łamania zabezpieczeń. Pytacz nic nie wie więc nic nie warto mu mówić. Zresztą, ja nawet nie twierdzę że jestem jakimś guru zabezpieczeń. Mam o tym wiedzę, ale nie jest to wiedza ktora by póki co wykraczała poza coś znanego. Wciąż się uczę. Nie zmienia to jednak faktu że znam realia łamania programów.

0

aby napisać zabezpieczenie mające jakąkolwiek wartość trzeba znać asembler i tego jak jest zbudowany plik wykonywalny. Prosty if to jest coś co można złamać w 5 minut i wcale nie trzeba być super haxiorem. Jeśli pytacza stać na wywalenie parę złotych w profesjonalne zabezpieczenie to będzie to dużo lepsze rozwiązanie niż próba napisania czegoś samemu.

0

Dziękuję wszystkim za odpowiedź.
Ostatnia kwestia - Misiekd napisałeś:

Jeśli pytacza stać na wywalenie parę złotych w profesjonalne zabezpieczenie to będzie to dużo lepsze rozwiązanie niż próba napisania czegoś samemu.

Zgadzam się całkowicie z podejściem, że specjalistyczne rzeczy powinni robić specjaliści i tyle. Ja nim na pewno nie jestem.

Zastanawiam się więc, czym (tzn. jak mocnym) zabezpieczeniem są te klucze HASP http://www.systherm-info.pl/HASP/index.php?option=com_content&view=article&id=92&Itemid=201. Oczywiście temat rzeka, ale proszę o prostą odpowiedź (1, 2 lub 3):
Opcja 1. "Chłopie daj sobie spokój z tymi kluczami, bo jeżeli chcesz program wyłącznie kopertować to takie zabezpieczenie jest kompletnie nic nie warte."
Opcja 2. "Zabezpieczenie HASP jak każde można złamać, ale metoda kopertowania wymaga jednak trochę czasu i choć nie jest "mocna" sama w sobie to jednak stanowi utrudnienie - możesz liczyć na to, że dla Twojego mizernego programu nikomu się tego nie będzie chciało robić."
Opcja 3. "Ostatnia, w którą pisząc sam nie wierzę - to taka, że kopertowanie się łamie, ale napiepszyć się z tym trzeba co niemiara."

Także 1 czy 2 ? :)

0

ja obstawiam za 2. Każde zabezpieczenie, nawet hardware`owe można złamać (np. ps3). To czy komuś się będzie chciało łamać dany produkt zależy od jego popularności i poziomu zabezpieczeń. Inna sprawa, że coraz więcej firm w pl boi się kontroli i stawia na legalne oprogramowanie

0

Jeżeli się zastanawiasz nad jakimś mechanizmem zabezpieczającym najprościej jest o nim poszukać w google: https://www.google.pl/search?q=hasp+cracking .

To jest akurat płatny program, ale pewnie mniej, niż twój: http://www.software-key.org/haspsbs.html .

Przeglądając forum chyba z największą na ten temat wiedzą znalazłem ten temat: http://www.reteam.org/board/showthread.php?t=2833 , a w nim ciekawy cytat:

"With the advice and tools from this board, I was able to use my software without the dongle. Just for info, I am 57 years old, with absolutely zero knowledge of programming."

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