31. oktober 2002 - 13:40Der er
16 kommentarer og 3 løsninger
Belysning af programmerings-rutiner
Jeg sidder på universitetet hvor vi arbejder på et projekt omhandlende software beskyttelse. Jeg skal skrive om crackere og om hvordan man laver selve serialkey-funktionen i et program. Jeg skal derfor også belyse hvordan en cracker gennemser algoritmen og laver en keymaker...
Er der nogen der kan forklare mig hvordan dette udføres rent generelt?? Måske er der noget stof om det på nettet et eller andet sted. En bog måske?? Kodeeksempler??
har en cracker først adgang til at læse selve algoritmen og rutinen, er reverse engineering jo ufattelig nem. Hvis algoritmen fx. er en modulus check (for at tage et seriøst dårligt eksempel) kan det jo ikke tage to sek for en script kiddie af lave en liste af keys baseret på det check.
Jeg tror ikke der er en helt gylden løsning på dit spørgsmål - der er utallige variationer på hvordan og hvorledes det kan gøres. Nogle programmer binder serialen til den enkelte download/version, andre som fx Win2000 (jeg har to cd'er og to keys, begge keys virker på begge) altså er det en forholdsvis simpel algoritme der enten siger "go" eller "no go". I sidste eksempel er din chance stor for at ramme plet, i første er chancen som en nål i en ufattelig stor høstak.
Hvordan du kommer ind i et program, konverterer bytekode til noget læseligt osv kan jeg ikke hjælpe dig meget med. I Java er det ret simpelt med Mocha (var det i gamle dage da jeg studerede *g*), men i andre sprog som C++ bliver det jo straks sværere.
Hmm, jeg har nok ikke sagt meget du ikke allerede ved - men ;)
Jeg har hørt om at der skulle være en keymaker til windows xp. Dette resulterer i at man komme udfor at en legalt købt windows xp(med en virginkey) er blevet logget som ygyldig...
Hvilke metoder bruger microsoft mon til deres lange cd-keys? Jeg aner intet om disse programmeringsmetoderne og har aldrig hørt modulus check.
Kan man lave et simpelt eksempel i noget c++ kode??
Jeg har ingen anelse om hvordan MS laver deres keys (jeg har betalt mig for at få en der er gyldig *g*) og det er helt sikker en information de beskytter med næb og kløer.
Et modulus check er at validere resten fra en division - vores cpr numre valideres op mod en modulus 11 (mener jeg, har ikke lige selve algoritmen som paratviden) ligeså at tallet skal være ulige for mænd og lige for kvinder.
Et eksempel kan også være, at tage ascii værdien af alle tegnene og disse skal give et bestemt tal (igen en dårlig løsning), at hashværdien af koden skal være én bestemt (få muligheder, ikke god ved store løsninger).
Men én ting du kan være sikker på er, at specielt MS nok har mange valideringer kørende inde i hinanden på forskellige leder og kanter for netop at gøre det så kompliceret som muligt. Med 25 felter å 62 mulige tegn giver det et ufatteligt stort antal kombinationsmuligheder. En god algoritme på dén og du er ret sikker på at dem der laver keycracks får sved på panden (eller betaler én på indersiden hos MS)
Denne process med at cracke er lang og ret så besværlig, i hvert fald i mange sager. Jeg har selv siddet og leget med det engang, men har dog aldrig skrevet nogen keymaker, da det mildt sagt ville gå imod min egen overbevisning som programmør. :)
For at cracke et key system skal du have et ret godt kendskab til Assembler sprog, da en reverse engineering foregår i rå assembler kode. Det man oftest gør, er at sætte breakpoints ved bestemte områder i koden, og så "backtrace" til det punkt hvor koden sammenlignes. Herefter forsøger man sig så frem med forskellige værdier, til man har regnet ud hvordan det hele foregår.. Medmindre selvfølgelig man finder det punkt i koden hvor selve koden udregnes, så tager man det blot der fra. :)
Alt i alt er det en langsommelig process, og det bliver hurtigt kedeligt.. Specielt når man som jeg sad og "crackede" software man allerede ejer. :P
Ok... Men findes der nogle bøger om dette? Ikke nødvendigvis danske(altså kun dansk og engelsk)...
Vores P1-rapport må max fylder 80 sider, og der sidder 6 andre og skriver om andre emner indenfor beskyttelse af software. Så vidt jeg forstår er det næsten en hel videnskab det med serialkey beskyttelse.
Men findes der bøger om hvilke metoder en cracker benytter?? Det er crackeren og dennes metoder jeg bør belyse. Ergo er jeg nødt til at sætte mig ind i denne modulus check etc. Jeg bør vel også sætte mig ind i hvordan en cracker får adgang til assembler-sproget i et program. Vedkommende må benytte disassembling. Hvordan er det med disassembling, det er faktisk her det allerede bliver ulovligt ik'??
ljweb> Kender du til materiale på nettet eller bøger der forklarer denne metode(modulus check)? Findes der en anden metode som muligvis bør belyses istedet for modulus check??
Du løber lynhurtigt ind i det grå grænseområde for hvad der er lovligt og ulovligt - og sætte dig ind i crackerens tankegang og virkemåde tror jeg tager længere tid. Kender desværre ikke til dokumentation/materiale på området, jeg er på den rigtige side af linien.
Der findes vist nok ingen bøger om emnet, men noget kan jeg da sige.. Crackere føler sig som helte, en slags Robin Hood.. De stjæler de store, grumme firmaers registreringsnøgle-algoritmer, og giver dem til offentligheden, uden at tænke over at der er en grund til at softwaren koster penge.
Angående disassembling, så er det ikke nødvendigt.. Faktisk er det direkte dumt, i hvert fald hvis du disassembler hele filen. Nej en cracker benytter værktøjer som SoftIce, da det kan give en person indsigt i enhver del af hukommelsen, og da hele programmet ligger i hukommelsen, så er det en slags "on-the-fly" disassembling. :o)
Jeg håber det belyser det nogenlunde, ellers skal jeg da nok se om jeg kan grave noget frem til dig.
Nå, lige meget... En anden metode som er meget kendt er at finde ud af hvor den nøgle man har bliver sammenlignet med noget andet... Ved så at vende "lig med" om så det bliver "forskellig fra", kan du bare skrive en hvilket som helt key (undtagen den rigtige ;)), og så kører dit program...
Lige omkring Microsoft, så skal du nok ikke regne med at de bare sammenligner to streng-værdier... Det er, som ljweb siger, lange algoritmer der gåes i gennem!!!
Mindre programmer benytter oftest en halvdårlig beskyttelse, så som et tal i registeringsdatabasen, eller "=" (== i C++) laves om til "<>" (!= i C++)...
Jeg har en gang selv leget med det, og der var det eneste jeg gjorde sådan set at finde den rigtige fil i registeringsdatabasen, slette den, sætte uret 5 år frem, starte programmet og lukke det igen, sætte tiden tilbage og nu sagde programmet ellers at jeg havde brugt -1826 dage ud af 31!!! :D
Jeg har en kammerat som også legede lidt med det, og prøvede at cracke nogle Delphi-programmer han selv havde lavet... Jeg skal lige se om jeg kan hive fat i ham og høre om han har det endnu, for så skal jeg da gerne fortælle lidt mere! ;)
Jeg siger tak for den forløbige hjælp. Men inden jeg kan gå igang med at skrive lidt tror jeg at jeg behøver lidt mere viden om emnet. Men jeg kunne vel godt skrible lidt generelt ned om dette her...
Spørgsmålet er om det bliver for voldsomt at lave et lille eksempel med noget c++ kode(da jeg har programmeret mere i PHP end Delphi). Jeg valgte at oprette spørgsmålet i delphi-kategorien fordi de på universitet vistnok senere vil undervise i dette sprog...
Jeg har altså ikke før lavet noget i c++ alá programmer - kun i PHP som rent syntaks mæssigt er lig C++ (har jeg læst).
Men det må gerne være i c++...
Jeg vil meget gerne kunne kontakte jer yderligere over ICQ eller MSN Messenger hvis i interesserede i at hjælpe en seriøs universitets-studerende :)...
ICQ#19119861, MSN på ob@mailme.dk
Mvh Intel4004
PS. Det der med reg-databasen har jeg også selv rodet med.
Det største problem her er jo at man ikke kan skrive noget kode der bryder en algoritme, eller finder det sted hvor man bypasser det seriel kode check.
Alt det foregår via forskellige værktøjer, inklusive run-time disassembling. Derefter kan en keycode generator skrives.
Den største udfordring for programmører har altid været at skrive de mest effektive rutiner til at beskytte softwaren med, men det har hidtil ikke været muligt at beskytte det fuldt.. Desværre.
OK... Jeg har efterhånden fået afgrænset mit emne til at omhandle generelt om crackere og hvordan de går til værks på maskinkoden.
Men hvad med beskyttelse mod reverse engineering eller disassembling, er der ingen måder hvorpå man kan beskytte sin maskinkode så crackeren slet ikke kan få noget ud af den???
Der er en hær af programmører som til stadighed arbejder på dette problem.. Så snart de tror de har fundet en løsning, så viser det sig at den ikke gør andet end at sinke processen en smule.. Der går nemlig sport i det blandt crackere.. Hvem kan få den første "patch" ud? Osv..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.