Salve,

So Leute es ist zwar schon spt in der Nacht aber fr euch mach ich ja so einiges.
Dieses Tutorial soll sich mit SoftIce beschftigen.
Wieso ?
Nun ja, mit der Hilfe von SoftIce hat man z.B. die Mglichkeit eine gltige Seriennummer fr ein Programm zu ermitteln.
Das hat den Vorteil, da man diese Seriennummern meistens auch bei spteren Versionen noch verwenden kann.
----
Um mein Tutorial besser verfolgen zu knnen braucht ihr folgende Programme:
1. W32DASM ver. 8.x (mu nicht sein, ist aber zum besseren Verstndnis gedacht, bzw. zum Nachvollziehen des ASM Codes)
2. SoftIce v3.2x
3. TxEdit v4.5 unser "Opfer" (--> http://www.execpc.com/~sbd)
4. Zeit,einen Zettel mit Stift und ein khles Bier

W32DASM und SoftIce bekommt ihr unter www.crackstore.com !

----
Bevor ich nun loslege will ich mich an dieser Stelle schon mal fr meine Rechtschreibfehler und meine 
Ausdrucksweise entschuldigen. Auerdem ist dieses Tutorial in erster Linie fr Anfnger gedacht, da es sich
mit den Grundlagen des Crackens beschftigt und noch nicht in die unendlichen Weiten der anderen Mglichkeiten eindringt.
Dennoch setze ich eine gewisse Vertrautheit mit den Programmen voraus 
(=Wingdings in W32DASM ersetzen, Datei zum Disassemblen ffnen usw.).
Weiter rate ich dringend dieses Tutorial ohne Zeilenumbruch zu betrachten !

LOS GEHT'S :
------------------

Als erstes mssen noch ein paar Einstellungen in der Datei 'winice.dat' (<--im SoftIce Verzeichnis) vorgenommen werden.
Ihr ffnet nun die Datei mit dem Notepad und scrollt bis zum Ende der Datei.
Dort sollte es etwa so aussehen:

; ***** Examples of export symbols that can be included for Windows 95 *****
;	Change the path to the appropriate drive and directory
;EXP=c:\windows\system\kernel32.dll
;EXP=c:\windows\system\user32.dll
;EXP=c:\windows\system\gdi32.dll
;EXP=c:\windows\system\comdlg32.dll
;EXP=c:\windows\system\shell32.dll
;EXP=c:\windows\system\advapi32.dll
;EXP=c:\windows\system\shell232.dll
;EXP=c:\windows\system\comctl32.dll
;EXP=c:\windows\system\crtdll.dll
;EXP=c:\windows\system\version.dll
;EXP=c:\windows\system\netlib32.dll
;EXP=c:\windows\system\msshrui.dll
;EXP=c:\windows\system\msnet32.dll
;EXP=c:\windows\system\mspwl32.dll
;EXP=c:\windows\system\mpr.dll

ndert dies nun in (Laufwerk\Pfad beachten!):

; ***** Examples of export symbols that can be included for Windows 95 *****
;	Change the path to the appropriate drive and directory
EXP=c:\windows\system\kernel32.dll                     <--  " ; " entfernen
EXP=c:\windows\system\user32.dll                       <--  " ; " entfernen
EXP=c:\windows\system\gdi32.dll                        <--  " ; " entfernen
;EXP=c:\windows\system\comdlg32.dll
;EXP=c:\windows\system\shell32.dll
;EXP=c:\windows\system\advapi32.dll
;EXP=c:\windows\system\shell232.dll
;EXP=c:\windows\system\comctl32.dll
;EXP=c:\windows\system\crtdll.dll
;EXP=c:\windows\system\version.dll
;EXP=c:\windows\system\netlib32.dll
;EXP=c:\windows\system\msshrui.dll
;EXP=c:\windows\system\msnet32.dll
;EXP=c:\windows\system\mspwl32.dll
;EXP=c:\windows\system\mpr.dll

So, das drfte fr unser "Opfer" ausreichen.
Ach nein, ndert noch folgendes am Anfang der Datei:

INIT="X;"

wird zu:

INIT="lines 60;color f a 4f 1f e;wd 22;wc 22;wr;code on;X;"   <-- Das sorgt fr eine bersichtlichere Anordnung
                                                                  der SoftIce Fenster .

So, jetzt noch schnell Windows neu gestartet (falls es dies nicht schon von alleine tat *grrhh*) und schon kann es los gehen (mal wieder):

Nachdem ihr TxEdit installiert habt startet ihr es und klickt in der Menleiste auf das Feld  Help-->Register...
Nun knnt ihr euren Namen in der Box "User Name" und eure Organisation in der Box "Organization" eintragen.
Bei mir wre das bekanntlich "RAHOWA" als Name und "GCG" als Organisation. Fr die "Registration"-Box denken wir uns eine Zahl aus. 
Ich nehme hier hufig die Zahl "1111111111" , da es viele Programme gibt die krzere Nummern nicht annehmen 
und eine Zahlenfolge wie "123456" unglcklich gewhlt wre, weil diese Zahl immer irgendwo im Speicher kursiert 
und wir sie dann in SoftIce doppelt und dreifach finden, falls wir nach ihr suchen sollten. 
Nun klicken wir auf "OK" und wer htte das gedacht: unsere Nummer ist falsch, sowas aber auch ;-)

Also drcken wir jetzt die Tastenkombination 'Strg+D' und befinden uns pltzlich in SoftIce.
Hier setzen wir einen Breakpoint fr die API Call's, die sich normalerweise den Inhalt einer Dialogbox hohlen.
Dies wren die Funktionen GetDlgItemTexta und GetWindowTexta (das  "a" am ende steht nur bei 32-Bit Funktionen, 
htten wir hier ein 16-Bit Programm, wrden wir das "a" weglassen mssen).
So, lat uns nun folgendes eingeben: "BPX GetDlgItemTexta"  [Enter] und "BPX GetWindowTexta" [Enter], 
das "BPX" steht brigens fr "Breakpoint on execution". Nun drcken wir die Taste F5 und befinden uns wieder 
im Registrier Bildschirm, wo wir auch gleich auf "OK" drcken und dann wieder in SoftIce sind, 
da eine der oben genannten Funktionen aufgerufen wurde. Hier steht nun im unteren Fenster 
"Break due to BPX USER!GetDlgItemTexta" also knnen wir unseren zweiten Breakpoint 
mit "BC 01" (BC=Clear Breakpoint,01= 2. Breakpoint) entfernen. 
Wenn  wir jetzt die Taste F11 drcken werden wir dorthin gebeamt, 
von wo aus der Call aufgerufen wurde (wir sehen den Namen der exe-Datei im blauen Balken unten rechts).
Wenn wir nun "D ESI" [Enter]  (D=Display memory) eingeben sehen wir unseren 
Namen im mittleren Fenster und wir wissen auerdem, da unser Name von dem Register EAX erfasst wird. 
Warum? gebe "? EAX" [Enter] ein und Du siehst die Zahl "6", die fr die Zeichenlnge des Namens steht. 
Da wir aber nur die richtige Seriennummer haben wollen und nicht den richtigen Namen zur Nummer 
drcken wir noch mal F5 und befinden uns wieder in SoftIce.
Jetzt geben wir folgendes ein, nachdem wir wieder F11 gedrckt haben:
"D ESI" [Enter] ;<-- unsere Org. ; "? EAX" [Enter] ;<-- die Zeichenlnge der Org. ;
Mist wieder keine Seriennummer, also noch mal F5 und danach F11 gedrckt und wir sind endlich da wo wir sein wollten
(es waren ja schlielich 3 Textboxen, daher die 3 Breaks). Hier geben wir nun "D ESP+10" [Enter] ein und sehen unsere 
Seriennummer und mit "? EAX" [Enter] sehen wir die Zeichenlnge der Seriennummer.
Nun tracen wir mit F10 durch den Code und stellen schon nach dem ersten Drcken fest,
da unsere Nummer nun im Register EAX gespeichert wird ("D EAX" zum Bewei).
Ich erklre nun mal ein bichen anhand des ASM-Codes den ihr im mittleren Fenster sehen knnt.
Es kann sein, da er bei euch etwas anders aussieht, aber das macht nichts.
Wollt ihr den Code whred des Lesens verfolgen, dann ladet die Datei in W32DASM ein und geht zur Code-Location "0041031E":

:0041031E 6A67                   push 00000067
:00410320 57                     push edi
:00410321 FFD5                   call ebp                      <-- Hier landen wir (GetDlgItemTexta wird aufgerufen)
:00410323 8D442410               lea eax, dword ptr [esp+10]   <-- Die Seriennummer wird nach EAX verschoben
:00410327 50                     push eax                      <-- und gespeichert.
:00410328 E8A3D10000             call 0041D4D0                 <-- Hier wird unsere Nummer in ihren Hexwert umgewandelt ("? EAX") 
:0041032D 83C404                 add esp, 00000004
:00410330 8BE8                   mov ebp, eax                  <-- Verschiebt unsere Nummer in EBP ("? EBP")
:00410332 68608F4200             push 00428F60
:00410337 56                     push esi
:00410338 FF15A0454400           Call dword ptr [004445A0]
:0041033E 85C0                   test eax, eax
:00410340 7524                   jne 00410366                  <--Springt nach -
:00410342 684C8F4200             push 00428F4C                                 |
:00410347 53                     push ebx                                      |
:00410348 FF15A0454400           Call dword ptr [004445A0]                     |
:0041034E 85C0                   test eax, eax                                 |
:00410350 7514                   jne 00410366                                  |
:00410352 81FD8D030000           cmp ebp, 0000038D                             |
:00410358 750C                   jne 00410366                                  |
:0041035A 53                     push ebx                                      |
:0041035B 56                     push esi                                      |
:0041035C E8FFA90000             call 0041AD60                                 |
:00410361 83C408                 add esp, 00000008         ____________________| 
:00410364 8BE8                   mov ebp, eax             |                      
:00410366 53                     push ebx <------hier-----|    <-- Speichert Org.  ("D EBX")
:00410367 56                     push esi                      <-- Speichert Namen ("D ESI")
:00410368 E8F3A90000             call 0041AD60                 <-- Aus dem eben gespeicherten Namen und der Org. wird die 
                                                                   richtige Seriennummer kalkuliert.
                                                                   Warum ist das die richtige Nummer?
                                                                   Das Ergebnis wird als Hexwert in EAX gespeichert 
                                                                   ("? EAX") und dann mit unserer Nummer, die weiter 
                                                                   oben in EBP gespeichert wurde, verglichen.--|
:0041036D 83C408                 add esp, 00000008                                                             |
:00410370 3BC5                   cmp eax, ebp      <--------(cmp=Compare)--------------------------------------|
:00410372 741E                   je 00410392                   <-- Stimmen diese Nummern berein (je=jump if equal) springt
                                                                   er zu der "Successful" Meldung.
                                                                   Da die Nummern aber noch nicht bereinstimmen, fhrt er 
:00410374 68CFEA0000             push 0000EACF	            	   weiter im Code fort und ruft hier die "Invalid Number" 
:00410379 6888130000             push 00001388                     Meldung auf.                  ^
:0041037E 57                     push edi                                                        |
:0041037F E89C1C0000             call 00412020     <---------------------------------------------|
:00410384 83C40C                 add esp, 0000000C                 Wir mssen also nur dafr sorgen, da eax=ebp ist oder das er trotzdem jumpt.
:00410387 5D                     pop ebp                           Wie? Dies knnen wir dadurch erreichen, indem wir den
:00410388 5F                     pop edi                           Jump bei der Adresse 00410372 in einen "jump if not equal"
:00410389 5E                     pop esi                           verwandeln, aber dann mten wir noch einiges mehr verndern
:0041038A 5B                     pop ebx                           und auerdem wollen wir ja eine gltige Seriennummer rausbekommen!
:0041038B 81C400010000           add esp, 00000100                 Also tippen wir, wenn der rote Balken in SoftIce auf der Adresse
:00410391 C3                     ret                               :0041036D steht, "? EAX" [Enter] ein und notieren uns die Zahl die
                                                                   jetzt im Eingabefeld erscheint. In diesem Fall wre es die
                                                                   Zahl "4005066675". Da wir durch den Vergleich von eax und ebp jetzt
                                                                   wissen, da diese Zahl mit der von uns eingegebenen (hier "1111111111")
                                                                   verglichen wird mssen wir nur die Zahl "4005066675" als Seriennummer
                                                                   benutzen und die Zahlen stimmen berein und wir sind registriert !

Nun noch schnell alle Breakpoints durch die Eingabe von "BC *" [Enter] (BC=Clear Breakpoint,*=alle) lschen und mit F5 aus SoftIce raus.
Jetzt die notierte Zahl als Seriennummer eingeben und wir sind REGISTRIERT !!!

*PUH*
Das wre geschafft.
Habt ihr Kritiken, Anregungen oder etwas nicht verstanden, dann schickt mir einfach eine Mail an: RAHOWA@writeme.com !
Bekomme ich gengend Resonanz, schreibe ich vielleicht noch ein Tutorial.
Und am Ende noch ein Tip:Auf die oben beschriebene Art, knnt ihr *ALLE* Produkte aus dem Hause Software by Design cracken !

CYA ALL

RAHOWA [GCG]