Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials
Autor
Nachricht
DizzY_D
Tutorial Leser
Tutorial Leser

Anmeldedatum: 01.05.2008
Beiträge: 28

Tut #1 Software besser schützen by DizzY_D
Verfasst am: 07.08.2008, 23:48

<!--coloro:Green--><span style="color:Green"><!--/coloro--><!--sizeo:5--><span style="font-size:18pt;line-height:100%"><!--/sizeo-->Das Thema: Software besser schützen<br />Autor: DizzY_D<br /><br /><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><!--coloro:Green--><span style="color:Green"><!--/coloro--><!--sizeo:5--><span style="font-size:18pt;line-height:100%"><!--/sizeo--><!--coloro:Black--><span style="color:Black"><!--/coloro--><!--sizeo:2--><span style="font-size:10pt;line-height:100%"><!--/sizeo-->In diesem Tutorial geht es darum wie man seine Software besser vor Cracking Schützen kann.<br /><br />Vorab:<br /><br /><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><!--coloro:Green--><span style="color:Green"><!--/coloro--><!--sizeo:5--><span style="font-size:18pt;line-height:100%"><!--/sizeo--><!--coloro:Black--><span style="color:Black"><!--/coloro--><!--sizeo:2--><span style="font-size:10pt;line-height:100%"><!--/sizeo-->Jeder der programmiert und seine Software verkauft hat sich schonmal damit auseinander setzen müssen:<br />Was kann man tun um ungewollte Verbreitung seiner Software zu vermeiden?<br />Die meisten entscheiden sich bei dieser Frage für die Hardware ID.<br />Es ist die beste Wahl wenn man seine Software nicht im großen Stil verkaufen wil.<br />Deswegen beziehe ich mich bei diesem Tut auf diese Methode.<br /><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><br /><!--coloro:Green--><span style="color:Green"><!--/coloro--><!--sizeo:5--><span style="font-size:18pt;line-height:100%"><!--/sizeo--><!--coloro:Black--><span style="color:Black"><!--/coloro--><!--sizeo:2--><span style="font-size:10pt;line-height:100%"><!--/sizeo-->Um wissen zu können wie man seine Software besser schützt muss man wissen wie unsere "Feinde", die Cracker vorgehen.<br />Deshalb werde ich zwischendurch erklären was wieso sinnvoll ist.<br />Ich werde euch nicht zeigen, wie ihr den ultimativen AntiCrack Schutz codet, sondern wie die Cracker vorgehen und was man deshalb dagegen machen kann.<br />Was ich auch noch sagen muss ist, dass die Möglichkeiten in VB hier an ihre Grenzen stoßen und deshalb bei weitem nicht alles möglich ist.<br /><br />Benötigte Tools:<br /><br />-Ollydbg<br />-VB Anticrack<br />Beide Tools sind im Web als Freeware/Testversion erhältlich und sollten leicht mit google zu finden sein.<br /><br />Standard Aufbau eines HWID geschützten Programms:<br /><br />- Auslesen einiger Hardware Infos <br />- Verrechnen/Verschlüsseln dieser Informationen<br />- Eigenen String kreieren<br />- Auslesen des im Programm gespeicherten Strings<br />- Originalstring mit dem ausgelesenen String vergleichen<br />- Wenn alles ok, Programm starten<br />- Wenn Vergleich scheitert, MSGBOX anzeigen, Programm beenden<br /><br />Falsche Hoffnungen:<br /><br />Einige, in diesem Gebiet unerfahrene Coder denken häufig, dass man nur viele Informationen auslesen und sie durch etlich viele Algos jagen müsse, und dass dadurch die Sicherheit gewärleistet wäre.<br />Dem ist aber nicht so.<br />Den Cracker interessiert es herzlich wenig wieviele Algos ihr verwendet habt, wenn unter diesem ganzen Code ein JNZ steht, der verhindert ,dass das Programm gestartet wird.<br />Einige denken sich jetzt vieleicht:<br />"Was zum Teufel ist JNZ???"<br />JNZ ist Assembler und steht für "Jump if Not Zero". Also springe wenn nicht null.<br />Was Assembler ist werde ich jetzt allerdings nicht klären.<br />Das ist mindest Voraussetzung für dieses Tut.<br /><br /><br />Ein Blick hinter die Kulissen der Reverser:<br /><br />Schauen wir uns mal an, wie volgender Code in Oly aussieht, welcher meistens für den Vergleich beider Hardware IDs zuständig ist:<br /><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><br />Visual Basic:
Code:
<br />Me.Hide<br />Dim UsrName as string<br />Dim SavedUsrName as string<br /><br />UsrName = environ("Username")<br />SavedUsrName = "Max Mustermann"<br /><br />if UsrName = SavedUsrname Then<br />Me.show<br />else<br />Msgbox "Sorry falscher Name!"<br />end<br />end if<br />
<br /><!--coloro:Green--><span style="color:Green"><!--/coloro--><!--sizeo:5--><span style="font-size:18pt;line-height:100%"><!--/sizeo--><!--coloro:Black--><span style="color:Black"><!--/coloro--><!--sizeo:2--><span style="font-size:10pt;line-height:100%"><!--/sizeo--><br /> Wir laden dieses Projekt in Olly und machen Rechtsklick -> Search for -> All referenced text Strings.<br />Wir scrollen ein bisschen und sehen letztendlich den Sring aus unserem Environ Befehl:<br />"Username"<br />Doppelklick drauf und wir landen an der Stelle im Code:<br /><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><br />Visual Basic:
Code:
<br />00401A78   . FF15 1C104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresu>;  MSVBVM60.__vbaHresultCheckObj<br />00401A7E   > 8B3D 80104000  MOV EDI,DWORD PTR DS:[<&MSVBVM60.__vbaVa>;  MSVBVM60.__vbaVarDup<br />00401A84   . 8D55 94        LEA EDX,DWORD PTR SS:[EBP-6C]<br />00401A87   . 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]<br />00401A8A   . C745 9C 6C1840>MOV DWORD PTR SS:[EBP-64],Project1.00401>;  UNICODE "Username"  <-- Hier mit F2 nen BP!<br />00401A91   . C745 94 080000>MOV DWORD PTR SS:[EBP-6C],8<br />00401A98   . FFD7           CALL EDI                                 ;  <&MSVBVM60.__vbaVarDup><br />00401A9A   . 8D45 D4        LEA EAX,DWORD PTR SS:[EBP-2C]<br />00401A9D   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]<br />00401AA0   . 50             PUSH EAX<br />00401AA1   . 51             PUSH ECX<br />00401AA2   . FF15 24104000  CALL DWORD PTR DS:[<&MSVBVM60.#666>]     ;  MSVBVM60.rtcEnvironVar<br />
<!--fonto:monospace--><span style="font-family:monospace"><!--/fonto--><br /><br />Das sieht doch schonmal nach einem guten Ansatz aus!<br />Also mit F2 nen BreakPoint drauf!<br /><br />Was ist ein BreakPoint?<br />Ein BreakPoint ist wie ein Lesezeichen in Olly.<br />Man kann Zeilen mit ihm makieren um später ab diesem Punkt das Programm verfolgen zu können.<br /><br />Wir starten das Programm nun mit F9 und sehen dass wir auf unserem BreakPoint breaken.<br />Das ist ja schön und gut.<br />Aber was bringt das?<br />Ein BreakPoint ist notwendig, danit man im Code tracen kann.<br />Mit Traceing ist es möglich die Befehle einzeln auszuführen und genau zu beobachten, was passiert.<br />Wo wir grade im Code sind sieht man an dem schwarzen Balken links am Rand von Olly, wo auch die Adressen stehen.<br />F8 ist die Taste zum tracen.<br /><br />Wir drücken also ein Paar mal auf F8 bis wir hier gelandet sind:<br /><!--fontc--></span><!--/fontc-->Visual Basic:
Code:
<br />00401AE7   . 50             PUSH EAX<br />00401AE8   . FF15 40104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>; <- Hier sind wir!<br />00401AEE   . 85C0           TEST EAX,EAX<br />00401AF0   . B8 04000280    MOV EAX,80020004<br />00401AF5   . 75 5F          JNZ SHORT Project1.00401B56<br /><br /><br /><br /><br />
<br /><!--fonto:monospace--><span style="font-family:monospace"><!--/fonto--><br /><br />Wer gut aufgepasst hat, dem ist aufgefallen, dass im Stack (Fenster unten rechts in Olly), unser gespeicherte Name und darunter der richtige Name steht.<br />Jetzt wirs spannend, denn ein Paar Zeilen weiter sehen wir schon unseren gefürchteten JNZ Befehl Wink.<br />Wir Tracen auf diesen Befehl und gucken was in dem kleinen Fenster über dem Dump (Großes Fenster am unteren Rand neben Stack) steht:<br />"Jump is taken"<br />Bevor wir weitertracen schauen wir uns erstmal an, wohin dieser JNZ eigendlich führt.<br />Das machen wir indem wir auf dem Befehl ENTER drücken.<br /><br />Wir landen hier:<br /><!--fontc--></span><!--/fontc-->Visual Basic:
Code:
<br />00401B56   > B9 0A000000    MOV ECX,0A <- Hier führt der JNZ hin!<br />00401B5B   . 8D55 94        LEA EDX,DWORD PTR SS:[EBP-6C]<br />00401B5E   . 894D A4        MOV DWORD PTR SS:[EBP-5C],ECX<br />00401B61   . 894D B4        MOV DWORD PTR SS:[EBP-4C],ECX<br />00401B64   . 894D C4        MOV DWORD PTR SS:[EBP-3C],ECX<br />
<br /><!--fonto:monospace--><span style="font-family:monospace"><!--/fonto--><br /> OK<br />Wir beschrenken uns nicht nur auf diese Paar Zeilen sondern wir sollten unseren Blick jetzt etwas unterhalb dieser Zeilen fixieren Smile<br />An den netten Kommentaren <br />MSVBVM60.rtcMsgBox<br />und<br />MSVBVM60.__vbaEnd<br />hintereinander kann man unschwer erkennen um welche stelle in unserem Quelltext es sich bei diesem Stück handelt.<br />Richtig! Um das stück was unsere Fehlermeldung anzeigt und anschließend unser Programm beendet.<br /><br />Der JNZ springt also mitten in das stück hinein, was unser Programm beendet.<br />Weil ich euch mal zeigen will, wie einfach wir Reverser es in diesem Fall haben, werde ich euch nun zeigen was ihr tun müsst um das Programm trotzdem zum laufen zu bekommen.<br /><br />Wir gehen also zurück zu unserem JNZ.<br />Da wir ja nicht wollen, dass er springt, müssen wir nichts weiter tun, als diesen JNZ mit einem NOP befehl zu ersetzen.<br />NOP steht für "No Operation" also auf gut Deutsch:<br />Mach nix xD<br /><br />So sieht die stelle also jetzt aus:<br /><!--fontc--></span><!--/fontc-->Visual Basic:
Code:
<br />00401AE7   . 50             PUSH EAX<br />00401AE8   . FF15 40104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>;  MSVBVM60.__vbaStrCmp<br />00401AEE   . 85C0           TEST EAX,EAX<br />00401AF0   . B8 04000280    MOV EAX,80020004<br />00401AF5     90             NOP  <- JNZ mit NOP ersetzen!<br />00401AF6     90             NOP<br />00401AF7   . 83EC 10        SUB ESP,10<br />
<br /><!--fonto:monospace--><span style="font-family:monospace"><!--/fonto--><br />Ok das wars auch schon was wir tuen mussten:)<br />Wir lassen unser Programm also mit F9 normal weiterlaufen, und siehe da:<br />Es läuft!!!<br /><br /><br />Abschließendes:<br />In der Ersten Volge meiner Tutorialserie ging es um eine kleine Einleitung ins Thema Reverse Engineering, welches unverzichtbar ist um seine Softare optimal zu schützen.<br />Es ging mir im Ersten teil auch darum etwas Spass am Reversen zu wecken damit auch mal wieder etwas Nachwuchs in die Szene kommt Wink.<br />Im/In den nächsten Teil/en geht es darum langsam zu verstehen was man alles gegen das Cracken tuen kann und als letzes dann die Umsetzung in VB.<br /><br />Ich hoffe es hat euch gefallen.<br />Der nächste Teil kommt morgen.<br /><br /><br />PS:<br />N sticky wär cool:)<br /><br />MFG DizzY_D<br /><br /><!--fontc--></span><!--/fontc--><!--coloro:Green--><span style="color:Green"><!--/coloro--><!--sizeo:5--><span style="font-size:18pt;line-height:100%"><!--/sizeo--><!--coloro:Black--><span style="color:Black"><!--/coloro--><!--sizeo:2--><span style="font-size:10pt;line-height:100%"><!--/sizeo--> <br /><br /> <br /><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc--><!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
_________________


Zuletzt bearbeitet von DizzY_D am 06.06.2010, 09:28, insgesamt einmal bearbeitet
 
igoe
Gast





Verfasst am: 07.08.2008, 23:56

Finde ich sher schön gemacht, freue mich auf weitere Tutorials! Wink
 
L!x
Coder
Coder

Anmeldedatum: 04.05.2008
Beiträge: 93


Verfasst am: 08.08.2008, 04:46

Finde ich auch sehr schön gemacht. Aber du hast Paar Fehler drin (wie ich auch oft :p) zB.
...Aber was bringt das?
Eine weitere super Funktion von Olly nennt sich Tracing.
 
DizzY_D
Tutorial Leser
Tutorial Leser

Anmeldedatum: 01.05.2008
Beiträge: 28


Verfasst am: 08.08.2008, 10:34

Ja ich war gestern nichtmehr so 100%ig wach als ich das hier geschrieben habe Smile.

Hab aber n Paar Fehler verbessert.

Gebt bitte ma n Paar Komentare zum Tut ab damit ich weis, was ich beim 2ten Teil besser machen kann!!!

MFG DizzY_D
_________________


 
L!x
Coder
Coder

Anmeldedatum: 04.05.2008
Beiträge: 93


Verfasst am: 14.08.2008, 19:20


Wann kommt denn das Nächste....
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials

Tags: schützen, programm, olly, software

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 869 09.06.2011, 12:19
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 796 20.05.2002, 00:28
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 2433 06.03.2008, 20:19
Keine neuen Beiträge Eine kleine Frage an euch.. 906 30.09.2007, 08:57
Keine neuen Beiträge Listbox speichern & laden 2047 22.03.2007, 20:25
 




[ Time: 0.2593s ][ Queries: 97 (0.0369s) ][ GZIP on - Debug on ]