SoftIce Tutorial
Wie bekomme ich meine eigene Serial fr AS-Util98 (v1.5+-)  in 20 Schritten           v2.0
------------------------------------------------------------------------------------------
by Smakkker [GWA] Comments & Questions -> Smakkker@gmx.net
join #gwa on efnet

Vorraussetzungen:
Crackergrundkenntnisse in ASM
AS-Util98 (http://www.fantastic-art.com/team/asware/download.htm)

Bentigte Tools:
SoftIce (v3.xx+)
Blatt Papier + Stift (oder Gedchtnis)

Grundstzliche Problemstellung:
As-Util98 kann im Menpunkt 'Xtras !!! + Zusatzprogramme' - 'Registrierung'
auf einen beliebigen Name registriert werden. Das Problem ist, die dazugehrige
Serial herauszufinden.

Also mal berlegen wie man das mit SoftIce (SI) bewerkstelligen knnte...
Am besten wre es, das Programm dort anzhalten, wo der richtige Code mit dem 
falschen verglichen wird, um sich an dieser Stelle den richtigen Code anzeigen
zu lassen. Damit der richtige Code mit dem falschen Code verglichen werden kann, 
muss natrlich zuerst einmal der falsche (unser) Code eingelesen werden.
Und an dieser Einlesestelle kann man ein Programm fast immer anhalten.

Programme knnen in SI mit sog. BreakPoints (BP) angehalten werden.
BPs werden auf Funktionen gelegt, die das Programm benutzen kann oder muss.
Es gibt einen Satz Standard BPs fr Windows Programme, die eine Serial aus
einem Eingabefeld auslesen:

GetWindowText
GetDlgItemText

GetWindowTextA
GetDlgItemTextA

GetDlgItemInt

GetWindowTextA bzw. GetDlgItemTextA sind die 32bit Pendants der entsprechenden BPs
ohne 'A' hintendran.

Also an die Praxis:

0.  Rechner mit SI starten.

1.  AS-Util98 starten, und den Registrierdialog aufrufen.
    Name: >beliebiger Name<
    Serial: 98765433
    noch NICHT besttigen

2.  CTRL-D um SoftIce zu aktivieren

3.  Jetzt die oben genannten BPs setzen, am besten alle auf einmal.
    Das geht durch Eingabe von BPX 'BreakPointname'. Also: 

    :BPX GetWindowText
    :BPX GetWindowTextA
    :BPX GetDlgItemText
    :BPX GetDlgItemTextA
    :BPX GetDlgItemInt
    {BreakPoint on eXecution ...} 

4.  Jetzt wieder mit CTRL-D zurck zu Windows wechslen.

5.  Die Eingabe jetzt mit 'bernehmen' besttigen.

6.  Oh Schreck.... Die BreakPoints haben das Programm gar nicht angehalten,
    statt dessen erscheint die 'Falsche Serial...' MsgBox. Was nun tun ? 

7.  Erstmal die oben eingebenen BPs alle wieder entfernen, da sie ja vom Programm, wie eben fest
    gestellt, an dieser Position nicht gebraucht werden, und im weiteren Verlauf nur stren wrden.
    CTRL-D
    :BC *
    {BreakpointClear All}
   
Manche Programme benutzen keine der Standard-Funktionen, um Eingaben zu lesen. Dazu gehren
zb. VisualBasic Programme und auch, wie oben festgestellt, unser AS-Util98. Diese Progs mssen 
aber auch irgendwie die eingebenen Daten im Speicher ablegen. Dazu benutzen sie die Funktion 
'HMEMCPY' (HighMEMCoPY), auf die man auch einen BP setzen kann.

8.  :BPX HMEMCPY
    CTRL-D

9.  Mit 'bernehmen' den Registrierdialog besttigen.

10. Und siehe da, das Programm wurde angehalten, wir befinden uns in SoftIce.
    Da As-Util98 aber zwei Eingabefelder (Name + Code) hat, die zur Registrierung
    bentigt werden, drcken wir noch 1x 
    CTRL-D
    SI hlt jetzt beim einlesen des 2ten Eingabefeldes an. 

AS-Util hat 2 Eingabefelder und benutzt auch 2x HMEMCPY, es gibt aber auch Programme, die
mehr HMEMCPYs als Eingabefelder benutzen. Deshalb am besten beim ersten Start immer sooft 
CTRL-D drcken bis das Programm wieder erscheint, um so die Anzahl der HMEMCPYs festzustellen.

11. Weiter gehts. Momentan befinden wir uns noch im Kernel oder sonstwo 
    (siehe Softice in der ersten Linie von unten zb. 
     '...---------Kernel(01)'------------..'). 
    Wir wollen aber in den AS-Util Task, weil ja nur da der richtige mit dem
    falsche Code verglichen werden kann. 

12. Also drcken wir sooft (ca. 8mal) F12 (um die Tasks zu wechslen), bis in der ersten 
    Linie von unten in SI steht '..---UTIL98!CODE+XXXXXXX---..', wir uns also im AS-Util 
    Task befinden.

13. Jetzt stehen wir genau nach dem eingelesenen Code im AS-Util98 Task, wir wollen aber 
    zum Vergleich. Also mssen wir noch die richtige Stelle ermitteln. F10 (aktuelle 
    Codezeile ausfhren) sooft drcken, bis wir uns auf oder
    vor diesem Call befinden:
    ...
    CALL 004038E0
    JZ   00468AA7
    ...

14. Warum vor diesem Call ??? Ganz einfach, wenn man hiernach noch ein paar mal F10 drckt,
    verschwindet SI, und die bse MsgBox ('Falsche Serial...')erscheint. Also gehen wir
    davon aus, das in diesem CALL gut und bse verglichen werden. Wir mssen in den Call
    rein, das geht mit F8, wenn man ber dem Call ist. 

15. Jetzt die Coderegister hinzu schalten, falls dies noch nicht geschehen ist:
    :WR
    Diese bentigen wir, damit wir die Register im Auge haben, falls sich etwas augenflliges
    ndern sollte.

16. Mit F10 weiter durch den Code fahren, bei den ersten Compares passiert noch nicht allzu 
    viel in den Registern, bis auf einmal 
    
    CMP ECX, EBX 
 
    kommt. EBX und ECX werden oben in den Registern auf einmal 'grsser' sie bentigen 
    statt '00XXXXXX' jetzt 'XXXXXXXX' 

17. Also lassen wir uns EBX und ECX mal umrechnen:
   
    :? ECX
    36373839 0909588537 "6789"
    :? EBX
    XXXXXXXX XXXXXXXXXX "XXX$"  (bei mir "316$")

    Oho, wem fllt da was auf...  wie war nochmal unser Code ?  
    98765433 -> 9876 -> "6789"
    ECX ist also umgedreht ein Teil unseres Codes.
    Also muss EBX ein Teil des richtigen Codes, auch umgedreht sein.

18. Hmmm, irgendwoher muss ja das Programm ja diesen Teil des Codes haben, also kucken wir
    mal ein paar Zeilen hher und sehen da folgendes:

    MOV ECX, [ESI]
    MOV EBX, [EDI]

    Die Teile des Codes kommen also aus ESI und EDI. Da wir schon wissen, das EBX der richtige
    Teil des Codes war, schauen wir uns EDI an.

    :D EDI
    {Display memory EDI}

    Und siehe da, EDI ist = $61354530  (zumindestens fr den Namen 'Smakkker')
    Zur Kontrolle: D ESI  ergibt natrlich ESI = 98765433

19. Jetzt alle BPs entfernen, mit STRG-D aus SI raus, dann den eben ermittelten 
    richtigen Code im AS-Util Registrierungsdialog eingeben. 

20. AS-Util zeigt die schne Msg-Box 'Richtige Serial'

Fertig!
