[ MAIN | RE LAB | CODING LAB | GUIDE | RESOURCES | SEARCH ]

[ RE Lab | Essays | Projects ]

Kraken op z'n Nederlands - deel 2 (Dutch only!)

by Knotty Dread

Target: WinAmp 2.0x
Difficulty: Makkelijk
Tools used: SoftIce, 's werelds beste debugger
Date: 01-02-'99
 

Essay

Voorpret:


WinAmp is de bekendste MP3 speler, en tot voor kort ook nog eens gratis. Die pret kan natuurlijk nooit erg lang duren, en ook de makers van dit programmeersel besloten dat er geld verdiend moest worden. Met bakken tegelijk, en de manier om dat te bereiken moest het ShareWare principe zijn.

ShareWare is een mooi principe, zolang het goed gebruikt wordt. Jammer genoeg zien de meeste programeurs hierin een makkelijk manier van geld verdienen, en vragen bergen geld voor hun eerste, vaak slechte programmeersel. WinAmp is wel een mooi stukje Coding, en de makers hebben het nog 'leuk' gemaakt voor de niet-betaler ook: Je krijgt geen vervelende irritatie-schermpjes (-> vanaf nu Nag-Screens) te zien, en in feite wordt je als gratis user niet geirriteerd. Mocht je toch de behoefte voelen om de makers te belonen, dan kan je geld opsturen, en na wat heen-en-weer gerommel een code voor jouw naam opgestuurd krijgen. Registratie dus. In ShareWare programma's zit vaak een registratie optie, waarin je na het invullen van je naam, een code in kan vullen die de software 'opent'. De software berekent vaak meteen wat de code moet zijn bij jouw naam. Na het klikken op de OK knop haalt ie de data op, en vergelijkt het.

Als kraker is dat een mooi aangrijpingspunt want: Het programma moet op een bepaalde plek de ingevoerde code vergelijken met een goede, berekende code. Nu moeten we alleen nog maar die plek zien te vinden, en te kijken wat het programma vergelijkt. Dat kan bepaalde delen van een code zijn, of een complete code of eigenlijk allerlei dingen.


Kraken maar:


SoftIce moeten we zo instellen dat je ermee aan de slag kunt. SI heeft duizende prachtige opties, maar die zijn voor ons doel niet erg nuttig op dit moment.

SoftIce is dus een debugger, zoals je ziet begin ik bij t begin, en daarmee kun je dus met een programma meelopen. Oorspronkelijk bedoeld om fouten op te sporen en te voorkomen, maar ook voor andere doeleinden leuk. Omdat we er geen nut bij hebben om de hele broncode van het programma mee te lopen, moeten we SoftIce vertellen vanaf welk moment we mee willen kijken. Je moet SI dus vertellen welke API calls (standaard window calls) hij in de gaten moet houden, zodat jij SI kan vertellen op een van die Calls te 'breaken'. Dat doe je door de winice.dat aan te passen, die in je SoftIce directory staat. Vooralsnog is het nu even voldoende om in die file de ';' weg te halen bij een aantal DLL's, nl de kernel32.dll, de user32.dll, de gdi32.dll, de comdlg32.dll en de shell32.dll. Later kan je zelf hier dingen aan toevoegen, maar nu nog niet. Het is zeer nuttig om meer over SI te lezen, ik verwijs je hiervoor op dit moment graag door naar het hele goede essay van Mammon hierover. Dat essay kan je vinden op: www.eccentrica.com/Mammon/

Ok, nu kan ik er vanuit gaan dat je SI goed ingesteld hebt, nu moeten we nog even een slachtoffer vinden. Winamp 2.0 lijkt mij een hele mooie. Ik hoor je al schreeuwen dat je die al lang dmv een keygen geregd hebt, maar dat maakt niet uit, aangezien WinAmp de leuke optie heeft om je keer op keer opnieuw te registreren. Niet erg nuttig in het echt, maar voor ons een makkelijke optie.

Je gaat dus naar de About box, en klikt op register. Je krijgt een leuk boxje waar je de info in kan typen. Typ een leuke naam in, misschien die van jezelf, misschien die van je hond, leef je maar uit. Als code typ je '1' in. Zoals je ziet gaat de grijze OK button niet aan, dus oftewel, we kunnen WinAmp niet de opdracht geven de code te checken. Raar? nee. Blijkbaar checkt WinAmp op het moment dat jij je code intypt of deze OK is, en als dat zo is, dan gaat de OK knop aan. Als dat gebeurd is, wordt alles weggeschreven. Druk op ctrl-d. SI popt up. heel handig, en een beetje onoverzichtelijk voor de beginner, maar daar leer je steeds meer mee te werken. Typ WR. Je ziet dat er een leuk extra boxje met leuke cijfertjes oppopt.

*** Leuke en doch noodzakelijke diepte info. WR betekent Window Registers. Registers *** zijn stukjes geheugen in de processor. EAX, EDX, ECX, EBX, ESI allemaal registers. *** De meesten hebben specifieke doeleinden, maar dat is nu niet zo nuttig. Met WR *** kunnen we zien wat er zich in die registers bevindt.

Ook zie je daaronder een stuk met code, dat is t programma. Rechtsonder zie je het programma wat op did moment actief is in de processor. Nu gaan we SI vertellen dat hij op deze calls moet gaan letten, en als er zo'n call wordt aangeroepen, op moet poppen, om ons mee te laten lopen. Dit heat breaken, en zo'n voorwaarde een breakpoint. dus:

'bpx getdlgitemtexta'
'bpx getwindowtexta'

Dat zijn twee standaard windows API calls waarmee een programma ingetypte rommel op kan halen. Nu hebben we SI dus ingesteld dat hij op het moment dat als er een van die twee Calls wordt aangeroepen, wij dit te weten moeten komen. Druk weer op Ctrl-D, en je zit weer bij die regbox.

Typ een nummertje extra bij je code, en hee! SI is er weer, wat handig... Zoals je kan zien, zit je dan in de USER32.dll, een windows dll, waar dus blijkbaar getdlgitemtexta mee wordt uitgevoerd. We moeten terug naar winamp, dus kunnen we door op F12 te drukken (Ga naar het einde van deze call) stap voor stap terug naar WinAmp. F11 is nog handiger, soms, en zeker in dit geval. F11 brengt ons naar waar deze call werd aangeroepen. Druk op F11, en je ziet dat we in WinAmp zitten. Probeer het voor de grap ook eens met F12. Ga dus weer uit SI met Ctrl-D (of F5)

We zitten dus nu in de code van WinAmp, waar de check waarschijnlijk uitgevoerd wordt. Je ziet dat we net na de getfunctie zijn aanbeland, en door een paar keer op f10 te drukken (een programma regel vooruit, zonder in calls te gaan. F8 is hetzelfde, maar daarmee ga je wel in calls) hebben we het programma enkele registers laten POPen. POP is het data inladen op een plek, vanuit de stack (tijdelijk ruimte). 'stack' dat is te vergelijken met een stapel borden, waarvan de eerste aan het plafond is gekleeft, en je er steeds eentje onder hangt. Hoe je dat kunt begrijpen of voor je zien, zonder exception error moet je met je fantasie regelen. Het is dus een opslagmogelijkheid. Met pop haal je het onderste bord weg, en plaatst de data daarvan in het aangegeven stuk geheugen. In dit geval geloof ik eax en ecx. Als je die instructies dus hebt uit laten voeren, dan kun je kijken wat er zich in deze registers bevind. Dat doen we met het commande display 'd'. Door 'd ecx', of 'd eax'. SI laat dan het stuk geheugen zien wat zich op dat addres bevindt. We hebben nog geen beet. We F10'en verder. We zien dat er wat calls worden uitgevoerd. Meestal zeer interessant, maar voor de beginner nog niet. Dus F10 en we verder. He! Wat is dat? een CMP, EAX,ECX. Compare Eax met Ecx.... dat is interessant! Eens kijken wat er in eax zit, dus d eax. Hm, we zien een berg vraagtekens. Eens kijken wat we in het registerwindow zien, bij eax. Een vaag getal, niet echt herkenbaar. Met wat ervaring kan je wat zekerder vertellen of iets een geheugenblok is of.... wat daar eigenlijk staat. Hm, eens kijken wat dat getal in decimalen zou zijn. '? eax' Hee, dat lijkt er meer op! Nu '? ecx'. He! dat is mijn nummer! Hij vergelijkt mijn ingevoerde nummer met een ander nummer, en ziet dus dat die twee niet kloppen, dus zegt ie dat t fout is...

Zozo, dat is leuk, dat kraken... dat gaan we dus ff aanpassen. Bekijk nog eens je goede code, en schrijf die op. Omdat we nu beet denken te hebben, sluiten we de Breakpoints maar af 'bd *'. Ga uit SI door Ctrl-D, en voer het goede nummer in. Hee, de OK knop is een stuk minder grijs dan een paar tellen geleden...hij lust t, is dat ff mooi! druk op OK, en je bent geregistreerd!


*** Nu nog ff wat info achteraf.


Normaal gesproken is de knop 'register' niet uitgeschakeld zoals nu. Wat we hier zagen is dat als je je naam intypt hij een code berekend, die ecx, als ik t goed heb onthouden. nu ga je een cod eintypen. hij check elke keer of de code overeenkomt met de berekende, en als ie klopt gaat de knop aan. Normaal is het zo dat je wat info invoert, op OK klikt en dan een melding krijgt. Dan maak je gebruik van dezelfde soort breakpoints, die worden geactiveerd door de OK knop. Een voor een laad het programma de lines in, dus moet je ook eerst elke line op laten halen. Meestal moet je dus iets van 3x laten breaken, dus elke keer weer ff uit SI gaan, door Ctrl-D.


*** Wat stichtelijke woorden achteraf


Met je nieuw verworven kennis kan je waarschijnlijk heel wat programma's aan, en met de geplande essays van DREAD nog veel meer. Je moet je echter wel even realiseren wat je met die kennis wilt. Kennis is macht, al eeuwen. En macht kan misbruikt worden. Ik zie het verspreiden van Cracks puur om je naam bekend te krijgen als misbruik. Er zijn bergen crackingroups, en die zullen er altijd blijven. Ze zijn zelfs noodzakelijk. Crackers realiseren zich meestal na verloop van tijd dat het breken van protecties niet echt nuttig werk is. DREAD staat voor Dutch Reverse Engineering Artistic Decypherians.

RE'ers dus. Wij kraken ook beveiligingen, maar dan wel om er van te leren. Het gaat er ons niet om, om een codetje, keygen, of crack te produceren. Het gaat ons erom dat we de beveiliging snappen, en dat we die kennis kunnen verspreiden. Zoals gezegd, denk er alstublieft even over na. Ik zou het zeer op prijs stellen als ik op deze manier RE'ers op kan leiden. Crackers mogen er net zo veel van leren, maar daar gaat het mij dus niet zo om....

Knotty Dread

 

Disclaimer notice

DREAD is NOT responsible for any abuse of the information we provide. Members of DREAD don't crack to get programs registered. As a matter of fact, we don't crack at all, since we are reverse engineers. Our only objective is to further our knowledge. If you want to use a program you reversed, you have to buy it!

 
© Copyright 1999 by DREAD Inc.. DREAD and all other names related to DREAD are registeed trademarks of DREAD Inc. and may not be used by others without written permission of Knotty Dread.


[ MAIN | RE LAB | CODING LAB | GUIDE | RESOURCES | SEARCH ]