Hacking og sikkerhed
|
I denne artikel skal vi lære hvordan man kan hacke et program skrevet i C, dog vil der også kommer et eller to programmer i C++. Denne artikel er ikke lavet for at du nu skal gå ud og hacke til højre og venstre, men for at lære om sikkerhed. Programmerne jeg har brugt er programmet Dev-C++ til al C og C++ kode, og OllyDbg til debugging og disassembling. Dev-C++: http://www.bloodshed.net/devcpp.html OllyDbg: http://www.ollydbg.de/ Begge programmer kan bruges og hentes kvit og frit. Sammen med Dev-C++ følger der foruden IDE"et også kompileren, GCC og debuggeren, GDB, med. Der er også brugt programmet Notesblok, der er fast inventar på Windows-platformen. Artiklen vil indeholde en masse C-eksempler, alle skrevet af mig, så intet i artiklen er ulovligt. Alle programmerne har en indbygget passwordchecker, med password – og vores mission er derfor at finde passwordsne. For at du får det maksimale ud af artiklen anbefales det at du har kendskab til disse tre sprog, Assembly, C og C++. Kravet om at kunne Assembly, er dog ikke så stort, så du behøves ikke. Men hvis du alligevel lige vil vide lidt, så er den eneste kommando vi får brug for, CMP. Al kode er som sagt skrevet i C/C++, så hvis du vil forstå det fuldt ud skal du kende sprogene. Hvis du ingen af sprogene kan, så frygt ej. Du vil ikke kun lære at kode, men også at man ikke altid skal hoppe over hvor gærdet er lavest. Artiklen handler ikke kun om kode og sikkerhed, men også hvordan man bruger de to omtalte programmer. Derfor vil der komme lidt forklaringer både hvordan man gør sig klar – og bruger programmerne. Installation af programmerne kommer jeg ikke ind på, da det kan variere imellem hvordan hver enkelte installerer, samt version af programmerne. Personligt gør jeg brug af Dev-C++ 4.9.9.2 og OllyDbg 1.10. Artiklen er forbeholdt Windows-brugerer, og 32-bit maskiner. Alle andre vil dog stadig have en chance, ligesom med programmeringen, da det ikke kun er lutter kode det hele, men også en del teori. Hele artiklen er skrevet så du nemt kan følge med, og samtidig prøve det hele af der hjemme på din egen computer. Jeg har så godt jeg kunne prøvet at lave billeder til artiklen, hvor jeg fandt det relevant at sætte nogle ind. 1.0. Gør dig klar! - 1.1. Dev-C++ - 1.2. OllyDbg 2.0. Hvordan virker det? - 2.1. Dev-C++ - 2.2. OllyDbg - 2.3. Jeg vil vide mere... 3.0. Vores første hack - 3.1. Programmet - 3.2. Research - 3.3. Hacket 4.0. Lad os prøve med C++ - 4.1. Programmet - 4.2. Hacket 5.0. Lidt mere avanceret - 5.1. Ingen strcmp? - 5.2. CMP - 5.3. Programmet - 5.4. Research - 5.5. Hacket - 5.6. LIFO og Bytes? 6.0. Til slut... - 6.1. Hvad har jeg lært? - 6.2. Note 1.0. Gør dig klar! 1.1. Dev-C++ Vi skal ikke i gang med større projekter – eller programmer, så vi kan nøjes med én enkelt sourcefil. Vi skal heller ikke linke til nogen biblioteker. Til hvert eksempel, kan du starte ud med at trykke på CTRL+N, der så kommer op med et nyt faneblad. Hvad du gemmer filerne som, igennem hele artiklen, er ligegyldigt. Men ha" lige i baghovedet, at hvis jeg gemmer med et navn – og du et andet, skal du ikke blive forvirret over at jeg bruger et andet navn end dig. Du kompilerer ved at trykke på CTRL+F9, eller du kan også vælge at kompilere og lade programmet starte lige efter. Dette er min foretrukne måde, og det gøres ved at trykke på F9. Debugging med Dev-C++ kommer vi ikke ind på, så det vil ikke blive forklaret. Der er ikke rigtigt mere at sige om Dev-C++ lige nu. Alt sourcekode kan hentes til sidst i artiklen, hvis du er for doven til selv at kompilere. Billede: http://www.v0id.dk/rowl_article__hacking/dev-cpp_01.gif 1.2. OllyDbg Når man åbner OllyDbg, kan det hele godt virke lidt forvirrende, hvis man ikke har prøvet sådan noget før. Det eneste vindue du skal have oppe er vinduet CPU, som formodenligt allerede er oppe fra start. Hvis ikke det er tilfældet, skal du trykke på ALT+C, eller trykke på knappen, C, øverst oppe, imellem H, og /. I OllyDbg skal du ikke åbne noget yderligere, så vi skal heller ikke oprette noget. Vi kommer tilbage til OllyDbg, når vi går i gang med det første hack, i 3.3. Billede: http://www.v0id.dk/rowl_article__hacking/ollydbg_01.gif 2.0. Hvordan virker det? 2.1. Dev-C++ Dev-C++ er i sig selv, kun alt det visuelle. Selve kompileren og debuggeren hører i princippet ikke til Dev-C++, men er bare tredjepartsprogrammer. Det Dev-C++ bidrager med er selve vinduerne, syntaxhighlighting, projektmanager, lidt intellisense, mm. Dev-C++ holder derudover styr på forskellige ting. Den tilføjer f.eks. en ekstra linje i hver fil – da det står i standarden, og andre ting. Den hjælper også med at gøre din kode mere struktureret, bl.a. ved at automatisk lave et tab efter en start-tuborgklamme ({) og hoppe et tab tilbage ved slut-tuborgklamme (}). Dev-C++ fungerer sådan at du skriver kode hvorefter du får Dev-C++ til at gemme dokumentet. Ved at kompilere får du Dev-C++ til at give GCC forskellige parametre, så det kompilerer. Du trykker på en knap i Dev-C++, men hvis du selv skulle kompilere f.eks. igennem kommandoprompten, skal der en masse parametre til. To typiske eksempler på hvordan man kompilere henholdsvis et C-program og et C++-program, kunne se således ud:
2.2. OllyDbg OllyDbg er en 32-bit debugger for Windows, så hvis der sidder nogen derude, uden Windows eller med 64-bit (eller enda 16-bit?) så kan denne artikel ikke helt bruges. Kan dog sige at de fleste systemer er bygget på 32-bit. OllyDbg er for at debugge ikke kun EXE-filer, men også DLL-filer. Det kan bruges både til at rette allerede kompileret kode – med den indbyggede HEX-editor, analyse, lables, se funktioner, sætte kommentarer, og meget mere. OllyDbg fungerer på den måde at den følger et program igennem hukommelsen, fra start til slut. Den registrerer derfor alt hvad der kommer ind, og ud. Det er derfor vi kan bruge den til vores formål. Jeg vil ikke fortælle så meget mere om hukommelsen, adresser, osv. da det ville blive en ekstrem lang artikel. Jeg vil derimod henvise dig til projektet, Wikipedia, der har alt hvad der er og bør være at vide. Du kan finde Wikipedia, her: http://wikipedia.org/. 2.3. Jeg vil vide mere... Hvis du vil vide mere må du enten besøge Dev-C++"s eller OllyDbg"s side, hvor du kan finde mere teknisk information, mm. Derudover vil jeg som jeg gjorde i 2.2, henvise dig til projektet, Wikipedia. Hvis det ikke er noget af dette du er interesseret i, men Assembly, C eller C++, kan du jo tage forbi Google, der kan blive fundet her: http://www.google.com/. 3.0. Vores første hack 3.1. Programmet Så skal vi til at igang! Vi starter her i, 3.1, med et program – som de fleste vil lave det, men det er desværre også mest usikkert. Efter dette program, vil vi langsomt skrive bedre og bedre kode, imens jeg fortæller lidt om hvordan det fungerer og hvad der kan gøres bedre. Alt kode er skrevet på engelsk, både ASCII-strengene og alle variabler. Der vil ikke være kommentarer i koden, både fordi at koden er så åbenlys – og fordi jeg forklarer koden bagefter. I får nu det første kode, som I kan kompilere – eller bare kigge på. Forklaring følger efter...
3.2. Research Før vi starter skal vi have lavet lidt research. Hvis du skal have hacket et program nytter det ikke noget – hvis vi ikke har noget at gå efter. Vi skal forestille os, at vi ikke kender vores program. Vi kender hverken hvilken tekst der bliver udskrevet, hvilke funktioner der bliver brugt – eller hvad passwordet er. Dette ville være det mest naturlige, da du formodenligt ikke kender det program du vil hacke"s sourcekode. Det første vi gør, er logisk nok at åbne programmet. Når vi har åbnet programmet for vi beskeden, ”Enter password:”, da vi sådan set er ligeglade med at gætte passwordet pt. Skriver vi bare ”abc”. Efter det får vi beskeden, ”You entered an invalid password”. Det er den sidste besked her vi skal huske. Imellem vores input og programmets output, bliver der jo tjekket for om vores input er korrekt. Det vil sige at passwordet bliver loadet i hukommelsen – og det er det vi skal bruge OllyDbg til. Her kan du se hvordan vores program ser ud på min maskine Billede: http://www.v0id.dk/rowl_article__hacking/cmdprompt_01.gif Når vi trykker på en vilkårlig tast vil programmet lukke ned, og der er ikke mere at undersøge. Vi har nu en besked, ”You entered an invalid password”, som vi ved kommer lige efter tjekket af passwordet. 3.3. Hacket Nu er det så at vi skal åbne OllyDbg. Du skulle gerne have dit CPU-vindue oppe, hvis det er, så tryk F3. Nu skulle der komme et vindue op, hvor du kan vælge dit program. Find dit program og tryk på ”åbn”. Der skulle derefter komme en masse i vores CPU-vindue, og en kommandoprompt vil poppe op. Kommandoprompten skal vi lade være i første omgang. Adresserne (som er tallene ude i de venstre sider) kan varierer fra computer til computer, fra program til program. Så det kan være svært at sammenligne en gang imellem. I det øverste venstre vindue, skal du trykke højreklik, ligemeget hvor. I højreklikmenuen vælger du ”Search for”, og derefter ”All referenced text strings”. Nu skulle der gerne komme et nyt vindue op, ”Text string referenced in dit_program:.text”. Nu skal du huske fra vores research, at vi skulle finde ”You entered an invalid password!”. Der ser således ud på min maskine Billede: http://www.v0id.dk/rowl_article__hacking/ollydbg_02.gif Tryk derefter dobbeltklik på teksten (eller hvor du vil – bare på linjen). Du bliver nu ført tilbage til CPU-vinduet, hvor du er ved teksten. Scroll nu lidt op, da vi ved at den tjekker lidt længere oppe. Ganske rigtigt, vi finder en funktion, strcmp. Billede: http://www.v0id.dk/rowl_article__hacking/ollydbg_03.gif Tryk én gang på linjen, så den bliver fremhævet. Tryk nu på F2, for at sætte et breakpoint. Vi skal sætte et breakpoint, for at tjekke om det var det rigtige sted. Nu skulle adressen gerne få en rød baggrund. Nu skal vi bare starte programmet, det gør du ved at trykke på F9. Gå nu til kommandoprompten skriv igen, ”abc”, og programmet vil stoppe, og sende dig til OllyDbg igen. Det var altså det rigtige sted, som vi havde forudset, da vi jo lavede research. Og nu har vi faktisk klaret det! Nede i højre vindue, kan du nu se et sted hvor der står Billede: http://www.v0id.dk/rowl_article__hacking/ollydbg_04.gif Den første linje er simpelhen passwordet, og næste linje vores input. Det er pga. at systemet skal loade værdierne for at kunne sammenligne, og det er dette OllyDbg holder øje med. For at tjekke om det er rigtigt, trykker vi CTRL+F2 (der vil muligvis poppe en besked op, hvor du bare skal trykke ”Ja”). Vi har nu ”spolet” programmet tilbage, og det eneste vi skal gøre nu er at slette breakpointet igen og starte programmet. Find adressen igen og tryk F2, for at slette breakpointet. Tryk nu F9, for at starte programmet igen. Du får igen den samme besked, ”Enter password:”, og vi kan nu skrive det rigtige password, ” xhjX89asd”. På min maskine ser det således ud: Billede: http://www.v0id.dk/rowl_article__hacking/cmdprompt_02.gif Vi har nu hacket vores fil, nemt, ikk"? 4.0. Lad os prøve med C++ 4.1. Programmet Denne del, 4.0, er faktisk bare lavet for at demonstrere at det ikke er helt ens med C og C++. Jeg har skrevet den samme version fra før, om til C++, så funktionaliteten er den samme. I får programmet med det samme, og så kan vi snakke om det bagefter.
4.2. Hacket Som du nok har lagt mærke til er der ingen research-afdeling, denne gang. Det er simpelthen fordi at du burde have fået indtrykket af det før. Jeg vil heller ikke fortælle helt så meget om OllyDbg denne gang, da der ikke er helt så stor forskel på programmet nu og det før. Vi åbner OllyDbg igen, hvis det ikke allerede er åbent. Find nu alle strengene igen. Vi kan nu se i vinduet at der er en del flere ASCII-strenge end sidst, og det er pga. at C++ er et større programmeringssprog, og har en masse som standard. Nu bliver den vågne læser nok overrasket! På første linje står passwordet nemlig. Det er fordi at C++ har erklæret den som ASCII-streng lige fra starten, ved brug af std::string. Jeg vil ikke rigtigt fortælle mere om C++ i denne her artikel. Jeg lavede bare deette her, for at vise at det nyeste ikke altid er det sikreste, og at du skal tænke dig ekstra godt om, hvis du vil lave et program der helst skal være sikret. 5.0. Lidt mere avanceret 5.1. Ingen strcmp? Ja, hvad nu hvis der ingen ”strcmp” var at finde i OllyDbg? Vi har indtil videre gået ud fra at den var der – men det er også kun fordi at vi bruger den. Der er forskellige andre muligheder for at finde ud af hvor der bliver tjekket for værdierne. En kommando, du ofte vil komme ud for, er CMP. Kommandoen i sig selv siger lidt sig selv, compare. Den bliver brugt til at sammenligne to værdier. CMP er kun én af de mange hunrede Assembly-kommandoer der findes. For at forstå hvad der foregår i OllyDbg skal du helst kende lidt til Assembly, men ikke nødvendigvis meget. Nogle få af de mest brugte kommandoer, vil kunne hjælpe dig meget. Hvis du vil læse mere om den forskellige kommandoer, skal du prøve at tage et kig på; PUSH, CALL, MOV, CMP, JE, JMP, bare for at kende det grundlæggende. 5.2. CMP For at se hvordan CMP fungerer kan i her se en ”prototype” af kommandoen
5.3. Programmet Dette program vil blive kode anerledes end de andre, mest for at vise at alle programmer er så lige til. Som de andre gange vil jeg først vise jer koden, og derefter snakke om den.
5.4. Research Da det jo er et helt andet type program skal vi have lavet lidt research, som vi selvfølgelig enten skal huske eller notere. Jeg anbefaler at man skriver det ned, evt. i Notesblok, alt efter hvor stort hacket er. I disse små eksempler er det ikke nødvendigt, da vi kun skal huske en eller to ting. Det første vi skal lægge mærke til efter vi har åbnet programmet er, ”Enter password (. for stop):”. I skal huske at vi lader som om vi ikke kender programmet, så vi skal være så ”dumme” som vi kan. Med denne information ved vi altså at man ikke skal trykke enter for at verificere indholdet, men et punktum. Dette fortæller os at programmet enten læser programmet bogstav for bogstav, eller også er enter bare ”byttet” ud med et punktum. Nå men vi fortsætter, og trykker, kan du gætte det, ”abc”. Vi får nu en meddelse, ”You entered an invalid password”, som vi skal bide mærke i, da vi nu ved at eller andet andet for nyligt er blevet tjekket. På min maskine ser det sådan her ud Billede: http://www.v0id.dk/rowl_article__hacking/cmdprompt_03.gif Mere er der ikke i det her, nu skal vi bare igang. Så du hopper videre til 5.5, hacket! 5.5. Hacket Jeg vil ikke længere gå i detaljer med OllyDbg mere, da I har fået den viden i har brug for. Skulle der dog komme noget nyt, skal jeg selvfølgelig nok gå langsomt til værks, og det kan jeg sige jer at der gør. åbn programmet, og åbn derefter programmet. Vi finder igen alle ASCII-strengene i vores program, og vi ved jo hvilken streng vi skal lede efter, så det er ligetil. Efter du har trykket dobbeltklik, og er kommet tilbage til CPU vinduet, vil du nu opdage at der er noget der er helt anerledes, hvis du har prøvet at scrolle lidt op og ned. Der er ingen strcmp! Men så er det jo godt vi gennemgik det kort forinden, så vi er klar og parate. Hvis du bare havde læst 5.2 og 5.1 nogenlunde, vil du også kunne huske at vi skulle lede efter kommandoen, CMP. Og det gør vi så. I mit tilfælde findes den på adressen, 00401313, og det ser således ud Billede: http://www.v0id.dk/rowl_article__hacking/ollydbg_05.gif Vi sætter nu et breakpoint, og starter programmet. Vi starter med at skrive et bogstav, "a", men til vores overraskelse fryser programmet, og vi bliver smidt tilbage til OllyDbg. Vi ved derfor nu at vi har med et loop at gøre, og at bogstaverne bliver læst en for en. Der vi i princippet har sat breakpointet i vores program er her
Billede: http://www.v0id.dk/rowl_article__hacking/ollydbg_06.gif Men det er lidt langsomligt, specielt hvis det er en lang, lang kode. Vi bliver derfor nød til at finde en anden vej. Vi går op i det øverste venstre vindue igen, og trykker højreklik på vores linje med CMP-kommandoen. Gå derpå ned til ”Follow in dump”, og vælg, i dens undermenu, ”Memory address”. Vi vil altså følge denne adresse, så vi kan se hvor, hvornår og hvilke værdier der bliver loadet og tjekket. Der sker noget nede i det venstre hjørne, og er det ikke vores password, der på første linje? Jo, det er det. Vi kopierer linjen ved først at markere teksten, samt noget af det omkringliggende, og derefter trykke CTRL+C. åbn Noteblok og tryk CTRL+V i et tomt dokument. I mit tilfælde ser teksten inde i programmet således ud Billede: http://www.v0id.dk/rowl_article__hacking/ollydbg_07.gif Tilbage til Notesblok, vi sletter alt det vi ved – og tror vi ikke skal have tilbage, så det ser således ud:
Billede: http://www.v0id.dk/rowl_article__hacking/cmdprompt_04.gif I nogle tilfælde – faktisk mange, vil du kommer ud for at teksten står på en bestemt måde, og da der skal en del tekst til, har jeg valgt at lave en lille ekstra kategori, ”LIFO og Bytes?”. 5.6. LIFO og Bytes? LIFO [Last In – First Out] fungerer på den måde, ligesom det betyder, at det man putter sidst ind kommer også først ud. Det er simpelthen en stak, der tager imod værdier. Du ligger værdier ind, og når det tags ud, komm de nærmest ”baglæns”, ud.
Vores tekst vil derefter se ud som dette
6.0. Til slut... 6.1. Hvad har jeg lært? Du vil efter denne artikel, hvis du har læst det hele, være i stand til mange ting. Du vil være i stand til at lavee sikre programmer, bruge en debugger, kende til Assembly, C, C++ og meget mere. Du vil kunne hacke enkle programmer (.EXE), men dog kun til en vis grad. Dette er kun lige ”toppen af isbjerget”. Du vil formodenligt ikke kunne gå ud og hacke alle programmer, da de fleste er langt sikrere en mine eksempler her. At jeg ikke har lært jeg ”hyperhacking”, eller hvad man nu kalder det (;-)) er både fordi at det er langt sværere, men også fordi at formålet i artiklen ikke var at i skulle kunne gå ud og hacke – og andre ulovlige ting, men for at i kan lære om sikkerhed. For at forsvare sig mod hackere, bliver man nødt til at tænke som en. Og det er dét jeg har prøvet at få frem i artiklen. Som sagt kan det være du har lært noget nyt med programmering, eller nye artikler. Hvad ved jeg. 6.2. Note Det her var så min anden artikel her på Rowl, dog i et helt andet emne – og alligevel ikke. Jeg håber I har nydt artiklen og fået noget ud af det. Det kan godt være der har været meget tekst, men det er for at I skal forstå det fuldt ud. Jeg siger tak for denne gang, det har været sjovt at skrive denne artikel. Download af alle programmer, billeder, sourcekode, links, osv.: http://www.v0id.dk/rowl_article__hacking.rar |
|
Kommentarer
Giv din mening tilkende om denne artikel, eller læs andres.Har du spørgsmål eller brug for hjælp til denne artikel henvises du til forummet.
|
i stedet for og bruge url som billeder så lav så man kan se dem. 1# Det er meget bedre sådan. 2# Ikke alle gider til og gå ind og loade dem ;S Men fin artikel 4/5 |
Oprettet af:
|
| V0id har sq gjort det igen 5/5 der lærte man jo lige noget, gad vide om jeg kan hacke min fars filer :susp: |
Oprettet af:
|
| nica det er jo nemt, hvis i er koplet på samme netværk kan du bare gå ind i netværks forbindelser og gå ind på hans pc der fra ;) "mener jeg" |
Oprettet af:
|
|
Ang. det med billeder, så var jeg i tvivl om hvorvidt billederne ville blive skaleret ned eller ej. Mange af dem er jo over 1400 pixels i bredden, og det ville se dumt ud i artiklen. Jeg valgte derfor ikke at sætte billederne ind, men sætte links ind i stedet. Men jeg må lige finde ud af noget, så det er jo godt at der er en "Redigerer"-knap. :-) |
Oprettet af:
|
|
Hehe oki, du kan vel bare sige link[img] bilelde [/img] eller hvad?? eller hvordan man laver link i billeder her inde på rowl, og så gøre billedet noget mindre, og så når man trykker på billedet bliver det vist stor Sidst redigeret 15:15 - 05/12/2006 |
Oprettet af:
|
|
Flot artikel V0id, synes du forklarer det hele rigtig godt :) 5/5 Din artikel er simpel hen perfekt. |
Oprettet af:
|
|
Rigtig fed artikel og god opstilling. 5/5 |
Oprettet af:
|
| Altid rart at kunne hacke :s |
Oprettet af:
|
|
Zinux: det er ikke formålet med denne artikle, formålet med denne artikle er jo at du lære at sikre dine programmer, og andre ting, altså om sikkerhed.. Void: Rigtig god artikle Sidst redigeret 10:08 - 06/12/2006 |
Oprettet af:
|
|
Tusind tak allesammen, altid rart med lidt feedback! :-) Zinux, hvis bare du læste lidt af artiklen, kunne du se hvad formålet virkeligt var. |
Oprettet af:
|
Side af 3
