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.
  20 5124
Hei alle freaks, denne guiden er dedikert til alle dere som er interessert i cracking, men som ikke kan det.

Først og fremst bør du ha kunnskap til x86 assembly, men det er ikke helt nødvendig, da jeg skal prøve så godt jeg kan å forklare det som trengs å vite. Det er til stor hjelp om du vet hvordan prosessorer fungerer. (Det vil si, et stort pluss om du har kunnskap til registre, opcodes, og så videre.)
Programmeringskunnskaper er heller ikke å forakte, da det er også et stort pluss.

Først og fremst skal jeg si litt om hva cracking er og hvordan det blir utført: (Software) cracking er kunsten i å forbigå valideringssystemer lagt inn i for eksempel spill, programmer, og så videre. Det brukes også til å modifisere programmer for egen vinnings skyld. Til dere pirater som har lastet ned keygens for eksempel: En cracker (gjerne en gruppe) har «reversert koden» (kalt reverse (code) engineering) fra maskinkode til assembly. Deretter har crackerne funnet algoritmen til valideringsprosessen for deretter å skrive en nøkkengenerator selv.

Det er ikke keygenning vi skal ta for oss i denne guiden, men noe kalt patching. Grunnen til dette er at patching er uten tvil det letteste for nybegynnere, og keygenning er forbeholdt de med mer kunnskap om cracking.

Nå lurer du kanskje, er dette i det hele tatt lov? Både ja og nei. Det vi skal gjøre i denne guiden, er 100 % lovlig, grunnet at programmet vi skal cracke er laget av meg, akkurat for denne guiden. Dog, cracker du for eksempel et spill eller et program som ikke er laget for å bli cracket, da er det ulovlig. Husk dette!

Programmet vi skal cracke heter rett og slett Patchme. Du kan laste det ned her:
http://www14.zippyshare.com/v/57438833/file.html
MD5: 8f3b9668dc8d80651a6a3a49ca2d6ee7
Virustotal: http://www.virustotal.com/analisis/2...ceb-1276176039

Grunnen til at jeg har kalt programmet Patchme, er for at vi skal patche programmet. Vanligvis blir slike programmer som dette kalt en Crackme. Som du kanskje har forstått, er crackmes programmet laget for å bli cracket av hobby-crackere.

Last ned programmet og ta en titt på det. Når du trykker på «Validér!» vil du få opp en meldingsboks med innholdet «Beklager, du kan ikke validere.». Ja vel, her har vi jobb foran oss.

Hvordan skal vi så cracke programmet? Med Notepad? Nei, her skal vi bruke en debugger kalt OllyDbg. Les mer på hva programmet er brukt til på linken. (Jeg bruker versjon 1.10.)
Last ned OllyDbg og åpne vår Patchme i Olly:

http://i48.tinypic.com/2n81kd0.jpg

Fortvil ikke! For dere som ikke har brukt en debugger før, vil dette se ut som grøt. Jeg har lagt inn noen piler som beskriver hva hvert vindu tar seg for. Assembly-kode-vinduet er det vi skal jobbe med for det meste. Her har maskinkoden blitt omgjort til assembly-kode, som er lesbart for mennesker. Til venstre ser du opcodes, som er skrevet i det heksadesimale tallsystemet. Opcodes er instruksjonene som for eksempel «mov, jmp, call» og så videre, men i heksadesimal form. Dere som har kunnskap i assembly bør forstå dette lett. Dere med programmeringsbakgrunn bør også klare å forstå dette relativt lett. Dette er grunnen til at det er lurt å ha assembly-kunnskap når man holder på med cracking! Hele prosessen av cracking foregår i assembly.

Til høyre for Assembly-koden har vi registervinduet. Vi bruker så å si kun disse registrene (som er nedskrevet som EAX, EBX, ECX, EDX og så videre). Det finnes mange fler, men de er ikke nødvendige for oss å kunne i startfasen. Et register er en «holdeplass» for programmet der det blir lagt inn informasjon som blir brukt av programmet. Registrene blir vanligvis brukt når informasjonen som blir lagret kun trengs for en kort tid, mens stacken blir gjerne brukt for å lagre informasjon i lengre tid. Dette kommer helt an på programmet, så det er ingen «regler» på bruken av registre og stacken.

Som du ser, har stacken en adresse (i dette tilfellet finner du 0012FF8C markert øverst i stacken). Denne adressen inneholder informasjon som blir brukt av programmet senere. Siden dette er en nybegynnerguide så forstår jeg at dette kan virke surrete, men øvelse gjør mester! Det blir garantert mye lettere etterhvert. Igjen, det hjelper stort om du har assembly- og programmeringskunnskaper.
En siste ting: til venstre for opcodes finner du igjen adresser, men jeg regner med at du forstår at dette er informasjon i minnet gitt ved adresser (som du vet, minnet består av mange adresser).

Greit! La oss starte.
Som vi allerede vet, fikk vi en feilmelding når vi trykket på «Validér!». Med OllyDbg kan vi søke gjennom tekster som programmet bruker. La oss derfor søke gjennom tekstene for å finne feilmeldingen, deretter for å se hva som foregikk, og hvorfor det ikke fungerte å validere programmet. OK?

http://i47.tinypic.com/14ty2y0.jpg

Dere med programmeringsbakgrunn bør godt vite hva text strings er.

http://i45.tinypic.com/670b44.jpg

Her hadde vi flaks! Når vi åpnet text strings-vinduet fikk vi med en gang øye på feilmeldingen vår. Dobbelklikk på «Beklager, […]».

http://i45.tinypic.com/oz6tz.jpg

Nå landet vi på instruksjonen «MOV EAX, 0046C798». Her blir altså meldingsboksen med feilmeldingen laget. Litt over ser du «PUSH 0». Dette er starten på prosedyren som viser feilmeldingen. Hvordan vet jeg dette? Som du ser, har jeg lagt en pil som henviser til en «>». Dette symbolet indikerer en start på en prosedyre. OK, da vet vi at vi må gjøre om programmet til å henvise oss til prosedyren som viser meldingen rett over («Gratulerer, du har […]»). Som du forstår er dette meldingen som forteller oss at vi har validert programmet. Men hvordan skal vi cracke dette, altså lure programmet til å tro vi er validert?

For å gjøre dette må vi gå oppover i koden. Scroll oppover:

http://i47.tinypic.com/2wq4aa8.jpg

Interessant! Her ser vi en «JNZ»-instruksjon. For dere som kan assembly bør dette være enkelt å forstå. For dere som ikke vet hva en JNZ-instruksjon gjør:
JNZ-instruksjonen sjekker flag-registrene (som befinner seg i Register-vinduet, med navnene C, P, A, Z osv.) for informasjon om hvorvidt den skal hoppe over en viss kode (som er i dette tilfellet beskrevet som en pil fra JNZ-instruksjonen til «PUSH 0» lengre ned (som er startprosedyren til feilmeldingen)).

Informasjon om hvorvidt JNZ-instruksjonen skal hoppe eller ikke, blir, som jeg beskrev, bestemt av flag-registrene. Men hvem legger inn true/false-informasjon til flag-registrene? I dette tilfellet: «TEST DL,DL», rett over JNZ. (Forresten, JNZ står for Jump Not Zero, altså den vil hoppe om Z(ERO)-flagget ikke er satt. Det vil si at hvis Z-flagget IKKE er satt, vil JNZ hoppe.)

Hva er så DL? Det er et «underregister» av EDX. Hvorfor ikke bare bruke EDX isteden for dens underregister, DL, lurer du på kanskje? Godt spørsmål. Vanlige informasjonsregistre som EAX, EBX, ECX osv. er 32-bit stort. Hvert av disse registrene har, som beskrevet, underregistre som er på et visst antall bit. Les mer her: http://no.wikipedia.org/wiki/IA-32
DL er derfor under DX (som er 16-bit stort) som igjen er under EDX. Til små instruksjoner (som i dette tilfellet av TEST-instruksjonen) trenger man bare DL for oppgaven. Det hadde vært fullt mulig å bruke EDX også (eller andre registre for den saks skyld), men det er rett og slett ikke nødvendig!

OK! Da regner jeg med at det er påpasselig forståelig. Da har du kanskje resonnert ut i fra det jeg nettopp beskrev at TEST-instruksjonen satt et av flag-registrene til 0? Siden JNZ betyr Jump Not Zero, samt at JNZ-instruksjonen blir utført (da den hopper over gladmeldingen), betyr dette at et av flag-registrene ble satt til 0. I dette tilfellet er det Z-registret (Z = ZERO) som blir anvendt:

http://i50.tinypic.com/315yhcz.jpg

Hva om vi gjør om Z-registret til å vise 1 istedenfor 0? Da vil jo ikke JNZ-instruksjonen bli utført? Riktig! Så enkelt er det. OK, for å gjøre dette vil jeg at du skal sette en breakpoint på JNZ-instruksjonen. Gjør dette ved å markere JNZ-instruksjonen og trykk F2. Adresselinja vil skifte farge, som indikerer en breakpoint.

http://i48.tinypic.com/nnsjna.jpg

Nå lurer du kanskje på hva en breakpoint er? En breakpoint setter rett og slett en stopp i programmet når den spesifikke instruksjonen som har en breakpoint skal utføres. Det vil si at programmet vårt vil stoppes når den skal til å utføre JNZ-instruksjonen. Når dette skjer, kan vi bare modifisere Z-registret! Dermed vil gladmeldingen bli utført isteden.

Greit, kjør programmet når du har satt breakpointen. Deretter trykker du på «Validér!»-knappen og du vil stoppes:

http://i48.tinypic.com/2mcyl52.jpg
Sist endret av Glowiej; 10. juni 2010 kl. 17:22.
Trådstarter
Aha! Nå kan du dobbeltklikke på Z-registret så det modifiseres. Nå vil du se under Assembly-vinduet at det vil stå «Jump is NOT taken», der det stod før «Jump is taken». Når du har modifisert Z-registret kan du kjøre programmet igjen ved å trykke F9.

http://i49.tinypic.com/i6jsx4.jpg

Flott! Vi har cracket programmet! Statusen ble satt til «Validert!» også. Men hva nå? Dette var bare en midlertidig crack. Starter man programmet igjen vil man få feilmeldingen igjen. Dette betyr en ting: at vi må modifisere selve koden, ikke bare registret.

Gå tilbake til JNZ-instruksjonen. Tenk litt nå. Hva om vi gjør om selve JNZ-instruksjonen til en helt annen instruksjon, så den ikke hopper til feilmeldingen? Kan dette virke? Jepp! Marker JNZ-instruksjonen og trykk på mellomtasten. Nå vil du få opp et vindu der du kan omgjøre selve instruksjonen:

http://i45.tinypic.com/9lk8w9.jpg

Vi har flere muligheter. Vi kan skrive inn «NOP» og så er vi ferdige. («NOP» betyr No Operation, den gjør absolutt ingenting, derfor vil den heller ikke hoppe til feilmeldingen, uansett hva slags informasjon TEST-instruksjonen gir til flag-registrene.) Det er mange muligheter her, men la oss bruke denne muligheten. Skriv inn NOP og trykk Assemble, deretter Cancel.

http://i49.tinypic.com/dgni9l.jpg

Nå ser du at JNZ-instruksjonen har omgjort til to NOP-er. Hvorfor to? Fordi JNZ-instruksjonen brukte to opcodes (75 26). For å fjerne JNZ-instruksjonen, måtte disse bli omgjort til 90 90 (90 er opcoden for NOP). Enkelt og greit!

Vi er straks ferdige! Det eneste vi trenger å gjøre nå, er å lagre cracken. Slik gjør du det:

http://i46.tinypic.com/34oxc1j.jpg

Marker begge NOP-ene, høyreklikk og velg «Selection» i «Copy to executable».

http://i50.tinypic.com/dfxh4w.jpg

Det samme gjør du her, marker begge NOP-ene (de er vanligvis allerede markert) og høyreklikk, deretter «Save file».
Lagre som for eksempel Patchme[Glowiej]-CRACKED eller noe lignende.

Og det var det! Håper du lærte noe av denne guiden (eller skal jeg si; enkle introduksjonen). Forhåpentligvis klarte jeg å forklare det meste relativt enkelt for dere som ikke kan x86 assembly.

– Glowiej
Sist endret av Glowiej; 10. juni 2010 kl. 17:27.
Morsomt, alltid lurt på hvordan spill og programmer blir cracket
Har du noen utdanning innen programmering eller er dette noe du bare har dillet med på fritiden?
Sist endret av eclipze; 10. juni 2010 kl. 17:36.
Trådstarter
Sitat av eclipze Vis innlegg
Har du noen utdanning innen programmering eller er dette noe du bare har dillet med på fritiden?
Vis hele sitatet...
Siden jeg fortsatt går på skole, er dette kun noe jeg driver med på i fritiden. En hobby, med andre ord.
Oh Lordy Lord
Taake's Avatar
Hærlig guide! Tommel opp til deg.
veldig bra dette skal jeg gå inn i ^^
creds!
Veldig bra skrevet, fult forståelig for en som er helt grønn på dette. Leste nettopp igjennom hele. Nå skal jeg prøve å laste ned programmene og se hvor mye jeg husker uten å se etter hjelp
Superlurker
merulz's Avatar
Husker jeg drev med slike ting for lenge siden.
Men obs til alle folk som kanskje ikke får det til, Ollydbg fungerer ikke (optimalt) på 64bit OS.
Veldig bra guide.
Har flere ganger opplevd problemer med OllyDBG, spesielt når man skal lagre filen man har patchet/cracket.

Hvis dere får slike problemer anbefaler jeg heller å bruke Immunity Debugger.
ID er så og si en forbedret versjon av OllyDBG som også har noen funksjoner som OllyDBG ikke har.


Link: http://www.immunityinc.com/products-immdbg.shtml
Sist endret av s1gh; 10. juni 2010 kl. 20:52.
Trådstarter
Immunity Debugger er bra, ja. Anbefales. Kan også anbefale IDA Pro.

Angående OllyDbg og 64-bit: OllyDbg 2 skal visst støtte 64-bit. Versjon 2 ble utgitt for noen dager siden, men etter det jeg erfarer støtter den ikke 64-bit ennå. Det kommer vel i senere versjoner, og det kan nok ta en stund før en med kompatibel støtte vil bli utgitt.
Sist endret av Glowiej; 10. juni 2010 kl. 21:03.
▼ ... mange måneder senere ... ▼
A madman with a box
mabala's Avatar
Vet det er gammel tråd, men gidder du og laste opp Patchme på nytt? Linken har gått ut.
Trådstarter
Beklager, har den dessverre ikke! Men er har du noe lignende i C (bare uten det grafiske), men jeg har ikke Windows, så du får kompilere den:

Kode

// patchme?

#include <stdio.h>
#include <stdlib.h>

int check = 1;

int main()
{
	if(check)
	{
		printf("Nei, beklager, feil eller noe :(\n");
		exit(0);
	}
	else
	{
		printf("Gratulerer, you did it!\n");
		exit(0);
	}
	
	return 0;
}
Guiden skal ha gitt nok informasjon til å patche denne.

Evt. sjekk ut crackmes.de for litt mer spennende oppgaver.
Sist endret av Glowiej; 17. april 2011 kl. 02:16.
▼ ... noen måneder senere ... ▼
Bra guide!
Dog er crackmes.de nede pga virus, finnes noen andre sider hvor lettere
oppgaver kan finnes?
▼ ... mange måneder senere ... ▼
Prøver og åpne en crackme.exe i med Olly i linux. Får feilmelding Ollydbg will terminate due to exception 8000100 at adress 7B837202, hva kan være feil?

(Gikk bra å åpne en til Olly medfølgende .exe-fil uten å gå via Wine)
I failed unit tests
Freddy_fred5's Avatar
Meget bra guide! Dette skal prøves ut ordentlig en gang.
Får ikke lastet ned filene.
Sitat av villniss Vis innlegg
Prøver og åpne en crackme.exe i med Olly i linux. Får feilmelding Ollydbg will terminate due to exception 8000100 at adress 7B837202, hva kan være feil?
Vis hele sitatet...
Anbefaler sterkt å lage en virtuell maskin med Windows for å sikre at slikt ikke skjer. Når man driver med debugging er det greit at iallefall operativsystemet er stabilt ;-)
Sitat av centric Vis innlegg
Anbefaler sterkt å lage en virtuell maskin med Windows for å sikre at slikt ikke skjer. Når man driver med debugging er det greit at iallefall operativsystemet er stabilt ;-)
Vis hele sitatet...
Men om man kjører via wine i linux så er vel det en form for virtuell maskin,eller?

Sitat av jegermeg Vis innlegg
Får ikke lastet ned filene.
Vis hele sitatet...
crackmes.de siden er oppe igjen, sidene til trådster har vært borte lenge.
Parkettetterligning
Vilniss: Det er en form for en virtuell maskin men ikke særlig stabilt. Da er det bedre at du enten lager en egen windows partisjon eller en fullstendig windows i virtuell maskin.
Sitat av trappetryne Vis innlegg
Vilniss: Det er en form for en virtuell maskin men ikke særlig stabilt. Da er det bedre at du enten lager en egen windows partisjon eller en fullstendig windows i virtuell maskin.
Vis hele sitatet...
Jeg får kjørt crackme.exe filen i wine,men det er å åpne den i Olly som ikke virker.
Da jeg kjører den i wine kommer en popup med oppgaven som lyder remove nag screen
-remove debugging protection
-pass cd check and write solution