Jeg har bestemt meg for å oversette og oppdatere den første delen av en eldre "cracking-tutorial". Målet er å lage en veldig enkel guide på hvordan man skal snike seg forbi registreringen på Hex
Workshop. Selve crackingen blir ganske fort gjennomgått uten så veldig dype forklaringen, da jeg mener guiden bør bare være et sted å starte før dere går videre på egenhånd og prøver dere fram. Programvaren jeg lister opp nå et ikke nødvendig, men jeg anbefaler den.
Nødvendig/anbefalt programvare:
W32Dasm
WinHex
Hex Workshop 2.54
Vær sikker på at du har samme versjon av Hex Workshop som meg(2.54) da en annen versjon antagligvis ikke vil oppføre seg likt som 2.54 som jeg bruker i guiden. Fungerer ikke linken her, bruk Google eller et P2P-nett og søk etter "hw32v25.exe".
Assembly
Først vil jeg begynne med å fortelle litt om Assembly eller ASM som det forkortes. Kort fortalt er ASM er instruksene som sendes til CPU og er byggestenene i enhver plattform. All programvare kan reduseres til ASM. Jeg anbefaler at dere leser, iallefall skumleser hele artikkelen på Wikipedia for å få en grei kontroll over hva ASM er. Om engelsk utgjør et stort problem så er det en liten oversetning på Norsk.
For å knekke registreringen på Hex Workshop og veldig mange andre små shareware applikasjoner trenger man i utgangspunktet kun å vite om assembly instruksen "Jump" eller "hopp" om du vil. Det finnes mange typer jumps, men de fungerer alle på samme prinsipp. Et jump forflytter seg rundt i koden til programvaren. Jeg tror det lar seg best forklare med et eksempel:
Adresse: Hvor i assemblykoden vi befinner oss.
Hex: Instruksjonen, bare i hexadesimaler.
Instruksjon: Selve instruksjonen som utfører en handling.
Jmp er et ubetinget hopp og fører til at man hopper til adressen "0040109A" i koden, uansett. Du kan prøve det selv i W32Dasm; først åpner du "HWORKS32.EXE" (Hex Workshop), trykker f12 og hopper til 00401095. Da burde du se samme linje som står over. Linjen i W32Dasm er da grønn(noe som signaliserer at du er på en linje med jump). På verktøylinjen har nå knappen "Jump to" blitt trykkbar. Når du trykker på den så hopper W32Dasm til adressen 0040109A. Det samme skjer når programvaren kjører.
Som nevnt, det finnes mange typer jumps. Jmp er ubetinget og hopper uansett. Men det finnes mange jump med betingelser og finnes i sammenheng med instruksjonen cmp(compare) som sammenligner to verdier. Dette er de mest vanlige og relativt logiske ut fra forkortningen:
Å kunne assembly er et absolutt must for å klare å cracke programvare(fjerne registering, omgå kopibeskyttelser, etc) og jeg anbefaler at dere kjøper en bok om emnet eller bare jobber hardt med å prøve å cracke programvare og gjøre oppslag på Google.
W32Dasm
Programmet ser vanskelig ut til å begynne med, men det er et ganske enkelt program, iallefall så lenge man kun bruker det til disassambly og ikke debugging. Når du først starter W32Dasm og åpner en .exe-fil(executable) så ser du all assemblykoden til programmet. Du kan begynne med disassmble(åpne) Hex Workshop.
Du burde gjøre deg kjent med W32Dasm og det's funksjoner som "Goto Code Location", forkortet til "Goto cd loc" og har en lommelykt i bakgrunnen på verktøylinjen. "Jump to" følger det hoppet som befinner seg på den aktive linjen(når linjen er grønn). Dette er i utgangspunktet alt du trenger å kunne, iallefall for å cracke Hex Workshop. En annen ting du sikkert fort merker at det ikke er mulig å bruke musen til å velge linje. Du navigerer utelukkende med scrollbaren, page up/down og piltastene(opp og ned).
Crackingen
Nå bør du ha W32Dasm oppe og disassemblet "HWORKS32.exe". Vi trenger jo et sted å starte i vår jakt på en måte å komme forbi registreringen så først må vi finne ut hvordan Hex Workshop oppfører seg. Start Hex Workshop og prøv registreringen med noe tilfeldig tall og bokstaver. Du får først opp et vindu som spør etter en registrasjonskode før du får opp et vindu som opplyser deg om at registrasjonskoden var ugyldig. Ok! Da skriver du ned noe av teksten på vinduet som sier at registrasjonskoden er ugyldig, f.eks. "You have entered an invalid".
I W32Dasm søker du etter "You have entered an invalid" og havner på linje 154(se nederst på W32Dasm). Linjen over gir deg navnet på dialogboksen "DialogID_0075" som er vinduet som sier at registrasjonskoden er ugyldig. Siden det er dette vinduet som spretter opp når du har tastet feil registrasjonskode så vet vi at det må gjøres en test(cmp) på hva du har skrevet inn. Søk etter "DialogID_0075" i W32Dasm og finn det treffet som er på linje 17430: "Possible Reference to Dialog: DialogID_0075". Scroll så oppover til du finner dette(skal være linje 17357):
På adressen "00409C89" finner vi instruksjonen "jmp 00409C95" og på adressen "00409C95" finner vi "je 00409D18" og på linjen over "cmp dword ptr [ebp-14], 0000000". Dette er hoppet "jump equal" og betyr at at om sammenligningen over er lik så skal vi hoppe til adressen "00409D18". Nederst på statuslinjen til W32Dasm vil det nå stå: "Line: 17350 Pg 204 and 205 of 2536 Code Data @:00409C89 @Offset 00009089h in File. HWORKS32.exe". Legg merke til @Offsett 00009089 og notert deg dette. Vi kunne trykket på "Jump to"-knappen som er på verktøylinjen i W32Dasm og havner på adressen "00409D18"(linje 17397). For de som da kan en del ASM vil de lese en rutine for å sammenligne registrasjonskoden din med en gyldig registrasjonskode. Men dette trenger vi ikke å blande oss inn i.
Alt vi trenger å gjøre nå er å endre hoppet på adressen "00409C89" til et jne(jump not equal) så registrasjonskoden vi skriver inn aldri blir sammenlignet, men bare tatt for god fisk. Dette kan vi gjøre i mange programmer, jeg foretrekker WinHex.
Så vi tar en sikkerhetskopi av "HWORKS32.EXE" og åpner "HWORKS32.EXE" i WinHex. I WinHex så velger du "Position->Go to Offset"(alt+g) og skriver inn 00009089 i "New position" og trykker OK. Markøren er befinner seg nå på en plass hvor det står "0F". Det du ser er hexadecimaler og utifra adressen vi tastet inn er du på "rad 9090" og kolonne 8(9090 + 8 = 9098). 0F i seg selv er ganske uinteressant, men 84 som følger er derimot ganske spennende. Det er selve je instruksjonen. Om du endrer 84 til 85 endrer du je til jne, altså Jump Equal til Jump Not Equal. Så med andre ord vil alle registrasjonskoder bortsett fra den riktige fungere i Hex Workshop. Lagre filen i WinHex og test registreringen i Hex Workshop.
Gratulerer. Om jeg ikke har skrevet noe fryktelig galt, du har misforstått noe eller brukt feil versjon av Hex Workshop burde du nå ha cracket Hex Workshop. Da er det bare å begynne på det virkelige arbeidet med å lære deg noe ut av dette
PS! Jeg er ganske sikker på det er noe fryktelig galt i adressene jeg har skrevet, si ifra om dere finner et avvik
Workshop. Selve crackingen blir ganske fort gjennomgått uten så veldig dype forklaringen, da jeg mener guiden bør bare være et sted å starte før dere går videre på egenhånd og prøver dere fram. Programvaren jeg lister opp nå et ikke nødvendig, men jeg anbefaler den.
Nødvendig/anbefalt programvare:
W32Dasm
WinHex
Hex Workshop 2.54
Vær sikker på at du har samme versjon av Hex Workshop som meg(2.54) da en annen versjon antagligvis ikke vil oppføre seg likt som 2.54 som jeg bruker i guiden. Fungerer ikke linken her, bruk Google eller et P2P-nett og søk etter "hw32v25.exe".
Assembly
Først vil jeg begynne med å fortelle litt om Assembly eller ASM som det forkortes. Kort fortalt er ASM er instruksene som sendes til CPU og er byggestenene i enhver plattform. All programvare kan reduseres til ASM. Jeg anbefaler at dere leser, iallefall skumleser hele artikkelen på Wikipedia for å få en grei kontroll over hva ASM er. Om engelsk utgjør et stort problem så er det en liten oversetning på Norsk.
For å knekke registreringen på Hex Workshop og veldig mange andre små shareware applikasjoner trenger man i utgangspunktet kun å vite om assembly instruksen "Jump" eller "hopp" om du vil. Det finnes mange typer jumps, men de fungerer alle på samme prinsipp. Et jump forflytter seg rundt i koden til programvaren. Jeg tror det lar seg best forklare med et eksempel:
Kode
:00401095 E900000000 jmp 0040109A ^ adresse ^ hex ^ instruksjon
Hex: Instruksjonen, bare i hexadesimaler.
Instruksjon: Selve instruksjonen som utfører en handling.
Jmp er et ubetinget hopp og fører til at man hopper til adressen "0040109A" i koden, uansett. Du kan prøve det selv i W32Dasm; først åpner du "HWORKS32.EXE" (Hex Workshop), trykker f12 og hopper til 00401095. Da burde du se samme linje som står over. Linjen i W32Dasm er da grønn(noe som signaliserer at du er på en linje med jump). På verktøylinjen har nå knappen "Jump to" blitt trykkbar. Når du trykker på den så hopper W32Dasm til adressen 0040109A. Det samme skjer når programvaren kjører.
Som nevnt, det finnes mange typer jumps. Jmp er ubetinget og hopper uansett. Men det finnes mange jump med betingelser og finnes i sammenheng med instruksjonen cmp(compare) som sammenligner to verdier. Dette er de mest vanlige og relativt logiske ut fra forkortningen:
- JA(Jump Above), JNBE(Jump Not Below Equal) - Hopper kun vist den første verdien er høyere enn den andre.
- JAE(Jump Above Equal), JNB(Jump Not Below) - Samme som JA, men også om verdiene er like.
- JB(Jump Below), JNAE(Jump Not Above Equal) - Hopper kun vist den første verdien er lavere enn den andre.
- JBE(Jump Below Equal), JNA(Jump Not Above) - Samme som JB, men også om verdiene er like.
- JZ(Jump Zero), JE(Jump Equal) - Hopper kun vist verdiene er like.
- JNZ(Jump Not Zero), JNE(Jump Not Equal) - Hopper kun vist verdiene ikke er like.
Å kunne assembly er et absolutt must for å klare å cracke programvare(fjerne registering, omgå kopibeskyttelser, etc) og jeg anbefaler at dere kjøper en bok om emnet eller bare jobber hardt med å prøve å cracke programvare og gjøre oppslag på Google.
W32Dasm
Programmet ser vanskelig ut til å begynne med, men det er et ganske enkelt program, iallefall så lenge man kun bruker det til disassambly og ikke debugging. Når du først starter W32Dasm og åpner en .exe-fil(executable) så ser du all assemblykoden til programmet. Du kan begynne med disassmble(åpne) Hex Workshop.
Du burde gjøre deg kjent med W32Dasm og det's funksjoner som "Goto Code Location", forkortet til "Goto cd loc" og har en lommelykt i bakgrunnen på verktøylinjen. "Jump to" følger det hoppet som befinner seg på den aktive linjen(når linjen er grønn). Dette er i utgangspunktet alt du trenger å kunne, iallefall for å cracke Hex Workshop. En annen ting du sikkert fort merker at det ikke er mulig å bruke musen til å velge linje. Du navigerer utelukkende med scrollbaren, page up/down og piltastene(opp og ned).
Crackingen
Nå bør du ha W32Dasm oppe og disassemblet "HWORKS32.exe". Vi trenger jo et sted å starte i vår jakt på en måte å komme forbi registreringen så først må vi finne ut hvordan Hex Workshop oppfører seg. Start Hex Workshop og prøv registreringen med noe tilfeldig tall og bokstaver. Du får først opp et vindu som spør etter en registrasjonskode før du får opp et vindu som opplyser deg om at registrasjonskoden var ugyldig. Ok! Da skriver du ned noe av teksten på vinduet som sier at registrasjonskoden er ugyldig, f.eks. "You have entered an invalid".
I W32Dasm søker du etter "You have entered an invalid" og havner på linje 154(se nederst på W32Dasm). Linjen over gir deg navnet på dialogboksen "DialogID_0075" som er vinduet som sier at registrasjonskoden er ugyldig. Siden det er dette vinduet som spretter opp når du har tastet feil registrasjonskode så vet vi at det må gjøres en test(cmp) på hva du har skrevet inn. Søk etter "DialogID_0075" i W32Dasm og finn det treffet som er på linje 17430: "Possible Reference to Dialog: DialogID_0075". Scroll så oppover til du finner dette(skal være linje 17357):
Kode
Referenced by a (U)nconditinoal or (C)onditional Jump At Address: |:00409C89(U)
Alt vi trenger å gjøre nå er å endre hoppet på adressen "00409C89" til et jne(jump not equal) så registrasjonskoden vi skriver inn aldri blir sammenlignet, men bare tatt for god fisk. Dette kan vi gjøre i mange programmer, jeg foretrekker WinHex.
Så vi tar en sikkerhetskopi av "HWORKS32.EXE" og åpner "HWORKS32.EXE" i WinHex. I WinHex så velger du "Position->Go to Offset"(alt+g) og skriver inn 00009089 i "New position" og trykker OK. Markøren er befinner seg nå på en plass hvor det står "0F". Det du ser er hexadecimaler og utifra adressen vi tastet inn er du på "rad 9090" og kolonne 8(9090 + 8 = 9098). 0F i seg selv er ganske uinteressant, men 84 som følger er derimot ganske spennende. Det er selve je instruksjonen. Om du endrer 84 til 85 endrer du je til jne, altså Jump Equal til Jump Not Equal. Så med andre ord vil alle registrasjonskoder bortsett fra den riktige fungere i Hex Workshop. Lagre filen i WinHex og test registreringen i Hex Workshop.
Gratulerer. Om jeg ikke har skrevet noe fryktelig galt, du har misforstått noe eller brukt feil versjon av Hex Workshop burde du nå ha cracket Hex Workshop. Da er det bare å begynne på det virkelige arbeidet med å lære deg noe ut av dette
PS! Jeg er ganske sikker på det er noe fryktelig galt i adressene jeg har skrevet, si ifra om dere finner et avvik