Hallo nahow1,
Allereerst, geen enkel stuk software is niet te kraken. Aangezien jouw programma in .net is geschreven is het inderdaad relatief eenvoudig om de software te reverse-engineeren. Alle instructies moeten namelijk door een soort van virtual machine met een intermediate language. Hiervoor zijn bijvoorbeeld tools geschreven die deze code gewoon weer terug zetten naar leesbare .net code. Een goed voorbeeld hiervan is: Redgate’s .net Reflector.
Obfuscators zijn een van de simpelste stappen om je code te beschermen. Echter is niet elke obfuscator het zelfde, de simpelste versie (gratis versie zit in visual studio) doet alleen maar function names en variables onzinnig/leesbaar maken. De wat geavanceerdere versies gebruiken encryptie algorithms die net voor de JIT weer decrypted worden. Misschien kan deze site je hierbij helpen:
http://howtoselectguides....cators/1st#sc_obfuscators
Maar een obfuscator is niet heilig, uiteindelijk kan je de .net of MSIL code weer naar voren toveren.
Java heeft naar mijn weten het zelfde probleem, uiteindelijk is het makkelijker te dissambelen dan native code voor het doel platform.
Een alternatief zijn launchers en packers. Dit zijn kleine programma’s/stukken code die jouw originele applicatie encapsuleren. Deze applicaties laten jouwn applicatie bijvoorbeeld draaien in een stukje encrypted memory en zijn daardoor moeilijker te disassemble. Deze packers/launchers zijn meestal geschreven in bijvoorbeeld: C/C++/ASM. Hierdoor is de applicatie niet meer door Red Gates .net Reflector te halen. ( er zit namelijk geen .net spul meer omheen). Echter uiteindelijk is dit ook weer te kraken.
Overstappen naar C++ kan je doen, echter dit is ook niet heilig. Als jij niets doet aan beveiliging voor de gecompileerde code kan het net zo makkelijk reversed/gekraakt worden. De drempel om het te doen is misschien wat hoger, maar het kan relatief eenvoudig. Bijvoorbeeld als jij een schermpje hebt waar de gebruiker een wachtwoord moet invullen, en je terug geeft het wachtwoord goed was of niet. Dan kan men 7/10 keer de letterlijke string van jouw bericht terug vinden in een disassembler. Hier kan je dan een breakpoint neer zetten, en langzaam maar zeker terug “jumpen” naar je beveiligingscode. Hiervoor wordt vaak OllyDBG of Syser Debugger gebruikt. Het is allemaal assembly wat eruit komt, maar goed te begrijpen. IDA Pro is ook een professionele tool om zoiets voor elkaar te krijgen. Dit is ook te kraken, alleen moeilijker.
Een laatste methode is Code Virtualization. Hiervoor zijn tools zoals Themida of Code Virtualizer van Oreans Software (
http://www.oreans.com/products.php) voor in het leven gebruiken. Ook Xenocode (
http://www.xenocode.com/) heeft heel leuke tool die Code Virtualization toepassen. Bijvoorbeeld Xenocode genereerd een minivirtual machine die jouw applicatie encapsuleerd. Jouw code wordt samen met alle dependencies mee gecompileerd in een enkele executable. Deze executable is dan de mini virtual machine en de code calls van die machine worden gesnapt door je host OS. Voor betere uitleg zou ik de sites van Oreans en Xenocode eens doorlezen. Echter zijn deze tools ook te kraken:
http://www.codebreakers-journal.com/content/view/290/97/
Al de bovengenoemde tools zijn meestal niet gratis en zeker niet goedkoop. Het is maar net hoe sterk jij de beveiliging wil hebben. Alles is uiteindelijk kraakbaar, je kan het alleen wat langer laten duren. Je kan je ook afvragen of je de beveiliging wel nodig hebt. Als het mogelijk is om de applicatie in een client-server architectuur te gieten dan kan je erover denken om essentiële functionaliteit aan de server kant te leggen. Zo zijn de gebruikers afhankelijk van de service/server die jij alleen in bezit hebt. Dit kan men weer langzaam emuleren e.d. maar het maakt het minder aantrekkelijk. Jij hoeft je dan niet meer druk te maken dat ze je code reversen, je kroon juweel zit dan nog steeds op je server.
Een goed algoritme of data te beveiliging is bijvoorbeeld public/private keypairs als je applicatie veel communicatie heeft of voor licensing mechanismen. Gebruik ook bewezen algorithms, ga vooral niet het wiel opnieuw uitvinden.
Hopelijk heb ik je niet weg gejaagd door de vele tekst en heb ik je enigszins kunnen helpen. Ik wens je veel succes met de keuzes die je gaat maken. En als er iets niet klopt in mijn verhaal hoor ik het graag!
Nog een link met interessante link met leesvoer:
.net Protection and Reversing:
http://www.codebreakers-journal.com/content/view/123/97/