Hacking Kurs Volume 03

Hallchen Jungs,

auf ein neues ... Diesmal ist es ein TP-Proggi, welches wir uns 
anschauen wollen... 
Bei Hochsprachen Proggis ist es immer 'n bissel scheie, weil dort
Calls drin sind, die eigentlich keine direkte Bedeutung fr das
Laufzeitverhalten haben, es wird gepusht, gepopped und alles mgliche,
jedoch ist dies alles vllig uninteressant.

Okay, doch nun ran an den Code ...
allen, die sich gro genung fhlen, das Proggi zu knacken, empfehle ich
hier nicht mehr weiterzulesen, und auch den PAS-Quellcode nicht anzuschauen ...
Das Problem bei einer Codeabfrage ist meist nicht, diese zu umgehen, sondern
diese zu _finden_ und das ist hier 'n bissel bld, da andauernd irgendwelche
Abfragen gemacht werden ...

Prinzipiell ist das Programm jedoch einfach ...

als erstes traced man es einfach mal durch ...
und siehe da, an Offset 03E1 findet man die Passworteingaberoutine.
also restarted man das Proggi und traced mal die Routine durch ...
'n paar Zeilen vorher wird die Speicherstelle bergeben, in der nacher mein
Text steht ... Schaut mal an Offset 03D9, dort wird nach DI 0144(hex) geMOVt.
Schaut man sich diese Speicherstelle mit D DS:144(hex) an, dann findet man
dort zuerst ein Byte welches die Lnge des Strings angibt und auch den String
selbst wieder ...
In der Routine selbst sieht's net besonders interessant aus ..., 
also raus aus der Routine, und weiter geschaut ...
Ntzlich ist es ab jetzt immer die Watch Funktion seines Debuggers auf das
Offset DS:0144 anzusetzen, denn hier steht ja immer mein PWText, und so kann
ich jede Vernderung erkennen...
Weitersteppen ...
UND schon sieht man auch eine Vernderung, denn der Call an Offset 03F1
bewirkt komischerweise ein verdrehen der Buchstaben ... also BRKPT setzen
und bis dahin wieder ausfhren lassen, mal die Routine tracen und was finden
wir ??
Eine XOR Routine .... 
und zwar mit XOR 1 (Offset 0214)
Hmmm entweder knnte man diese Routine nun rausmachen und den PWText des
Proggis suchen und dort immer ein Leerzeichen anstatt des PW-Bytes eintragen,
dann mu man halt immer eine bestimmte Anzahl von Leerzeichen und Enter 
drcken oder man umgeht den Schutz ganz ...

Da ich natrlich nicht alles vorbeten will, werde ich nur noch kurz diese 
Routine zu Ende tracen und Euch dann das Feld voll berlassen ...
Okay ... weitergetraced fllt pltzlich ein Vergleich einer Speicherstelle
mit der Zahl 4 auf ... (Offset 022B), Hmmm und in der Speicherzelle steht
ja auch noch die Lnge meines Passwortes .... Hmmm und wenn das nicht 4 ist,
dann MOVt er nach 0247 eine 1 .... 
d.h. im Klartext ...            1. Mein Passwort mu immer 4 Buchstaben haben
                                2. An Offset 0247 zeigt ein Flag (eine 1)
                                   ob irgendwas falsch ist ....
Und daraus ergibt sich eine weitere Mglichkeit, die PW-Abfrage zu umgehen,
einfach immer wenn er Offset 0247 auf eine 1 berprft, eine 0 drinstehen
haben, bzw. den anschlieenden bedingten Sprung in einen unbedingten ndern...

YEP, und nun ran an die Debugger und macht mal was produktives ...
Achja und nochwas ...
eine total lame traceabfangroutine ist drin ... checkt einfach die Zeit
zwischen 2 Calls, und wenn die grer ist als 1 ms, dann setzt er das
PW-Wrong-Flag [0247] ..... 
jo ...

so isses ...
xya


