Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  12 1918
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:

Kode

:00401095 E900000000              jmp 0040109A
 ^ adresse  ^ hex                  ^ instruksjon
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:
  • 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)
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
Ministry of Love
sptz's Avatar
wow dette skal jeg virkelig teste ut, jeg har lenge hatt en formening om hvordan det gjøres men jeg trengte en slik guide for og virkelig skjønne hvordan det gjøres. skal testes så fort som mulig Du er dagens helt tipeX
Jeg lastet ned W32Dasm, og prøvde det på HWORKS32.exe, men da fikk jeg en ansamling med koder iform av skrift som så ut som wingdings, er dette meniningen? (Noe som er galt konfigurert kanskje?)
Og når det gjelder søkefunksjonen på W32Dasm så fungerer den i mitt tilfelle kun på Hex og gjør det vanskelig for meg og søke etter "You have entered an invalid".
Hjelp værsåsnill.

edit: Glem det hele, jeg tenkte meg litt om og så meg litt mer rundt på programmet og fikk kjapt rettet opp ting, fant også den søkefunksjonen jeg skulle ha.
Så nå burde jeg greie å cracke det.
Sist endret av Camper; 5. november 2005 kl. 17:02.
Nub!
TipeX's Avatar
Trådstarter
Mjo, jeg husker dette problemet med de rare fontene i W32Dasm. Jeg hadde det selv, men klarer ikke å komme på hva som gjorde det. Du får lete litt rundt på nettet og se om du finner en løsning på det.

Angående søkefunksjonen, er du sikker på du bruker "Search->Find Text"?

La meg videre presisere at Hex Workshop er usedvanlig enkelt å cracke da dialoginformasjonen finnes der og beskyttelsen er mer som søppel. Det er mye verre å knekke litt mer seriøse programmer
Ang. fontene.
Du trykker bare Disassembler -> Font... -> og endrer de innstillingene som trengs og endres.
Var bare som å endre fonten på ett tekst dokument.
Men det er ett lite problem, det er vist en viss max lengde med skrift som gjør at endinger på koder lett kan forsvinne.
Dette kan så langt som jeg hittil har funnet ut fikses ved og endre størrelse på fonten slik at den kommer fram fra dødsonen, men det gjør jo fonten liten og ett helvette og lese, så jeg leter etter muligheter for og utvide denne maxlengden.

Edit: HoHa, nok engang har jeg kommet fram til en løsning på problemet like etter at jeg postet det, jeg brukte Times New Roman fonten men endret font istedet for font-størrelse og voiala, da så jeg hele kommandoen skikkelig.

Men jeg har funnet nok ett problem med dette eksemplet, og dette har med WinHex og gjøre, den demo-versjonen av WinHex som er gitt her har en sperre på 200kb størrelse på filen som skal lagres og HWORKS32 har en størrelse på 663kb noe som gjør at demoen nekter å lagre endringene på filen.
Sist endret av Camper; 5. november 2005 kl. 17:25.
Nub!
TipeX's Avatar
Trådstarter
Du får begynne med å cracke WinHex først da Alternativt kan du bruke en annen Hex-editor. Anything goes(iallefall av programmer som kan lagre)
Har hatt det i tankene alt, men siden dette er første gang jeg prøver dette så tror jeg ikke jeg prøver meg på noe sånt alene.

Sitat av TipeX
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.
Vis hele sitatet...
Herregud nå er jeg irritert, her isted fikset jeg position osv. og kom til noe som ivertfall lignet på det du skriver her, men stemte ikke helt, havnet en linje over det du forklarte.
Og nå som jeg prøver igjen.... finner jeg ikke det samme som sist og der er det ivertfall ingenting som ligner, huff, stygge programmet...
Ingen av gangene var markøren plassert over 0F, og jeg skrev eksakt samme Offset position, og har eksakt de filene som jeg skulle laste ned....

Og en liten ting til slutt, hvordan viste du at 84 var je instruksen og at 85 ble jne?
Nub!
TipeX's Avatar
Trådstarter
Godt poeng! Fordi 0F84 tilsvarer je og 0F85 tilsvarer jne. Instruksjonene je og jne kan også være henholdsvis 74 eller 75, avhengig av hvor man vil hoppe til. 75/74 blir brukt når det kan spesifserer hvor mange bytes det skal hoppes framover(når man hopper over en linje eller to) og 0F84/0F85 brukes når man spesifiserer en hel adresse.

F.eks.
7523 - Hopper 23 bytes framover om forrige cmp var lik.
0F8400409CC0 - Hopper til adressen 00409CC0 om forrige cmp var lik.

Kode

JUMPS
Hex:            Asm:             Description:

75 or   0F85    jne              jump if not equal
74 or   0F84    je               jump if equal
77 or   0F87    ja               jump if above
0F86            jna              jump if not above
0F83            jae              jump if above or equal
0F82            jnae             jump if not above or equal
0F82            jb               jump if below
0F83            jnb              jump if not below
0F86            jbe              jump if below or equal
0F87            jnbe             jump if not below or equal
0F8F            jg               jump if greater
0F8E            jng              jump if not greater
0F8D            jge              jump if greater or equal
0F8C            jnge             jump if not greater or equal
0F8C            jl               jump if less
0F8D            jnl              jump if not less
0F8E            jle              jump if less or equal
0F8F            jnle             jump if not less or equal
EB             jmp or   jmps    jump directly to
84              test             test
90              nop              no operation
Sist endret av TipeX; 5. november 2005 kl. 18:37.
Sitat av TipeX
* 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.
Vis hele sitatet...
Dette er jo en helt ekstrem kortversjon av hvordan det egentlig fungerer. Du har jo ikke nevnt flag-registrene.
feks. JZ hopper ikke hvis verdiene er like, men når zero-flagget er sant, altså 1. Det er ikke alle instruksjoner som setter zero-flagget så man må faktisk vite hvilke instruksjoner som setter zero-flagget til 1.
Og du glemte bla. noen av jump-instruksjonene som er relativt mye brukt, 'J(N)C': den hopper når carry-flagget er satt og ikke satt, altså 1 eller 0.
Det er også noen andre form for jumps, bla. JO, den hopper når overflow flagget er satt osv.
Sist endret av dword; 11. november 2005 kl. 18:47.
Heh, jeg klarer ikke engang installere Hex Workshop
Nub!
TipeX's Avatar
Trådstarter
dword: Korrekt! Jeg prøvde på ingen måte å gi en komplett forklaring på hvordan mikroprosessorer fungerer, men heller gi en ørliten og så enkel som mulig guide på hvordan man kan cracke Hex Workshop. Slik at folk som er kan være litt nyskjerrig på cracking kan få se hvordan det kan gjøres. Om de finner det videre interessant får det være opp til de og finne seg en god bok om assembly og lære seg mer

Men selvsagt, om vil komme med dypere forklaringer så er det kjempebra!
Sitat av TipeX
dword: Korrekt! Jeg prøvde på ingen måte å gi en komplett forklaring på hvordan mikroprosessorer fungerer, men heller gi en ørliten og så enkel som mulig guide på hvordan man kan cracke Hex Workshop. Slik at folk som er kan være litt nyskjerrig på cracking kan få se hvordan det kan gjøres. Om de finner det videre interessant får det være opp til de og finne seg en god bok om assembly og lære seg mer

Men selvsagt, om vil komme med dypere forklaringer så er det kjempebra!
Vis hele sitatet...
Joda, det er jo riktig det. :P Min post var kanskje ikke helt på nybegynner stadiet. Når jeg tenker meg om er det ikke sikkert jeg hadde skjønt hva som hadde stått i den selv, hvis jeg ikke hadde kunnet assembly.
▼ ... over et år senere ... ▼
det fungerer jo ikke, har byttet ut 84 med 85 men får den samme feil meldingen når jeg skal registere