Techster Skrevet 19. april 2009 Del Skrevet 19. april 2009 Et program lytter på en nettverksport og får en instruks som er skrevet i f.eks C/C++. Hvordan kan dette programmet gjøre om denne koden til kjørbar kode i runtime? Man sender altså et script, eller kodesnutter, til programmet. Noen som har noen tips? Lenke til kommentar
___ Skrevet 19. april 2009 Del Skrevet 19. april 2009 Et program lytter på en nettverksport og får en instruks som er skrevet i f.eks C/C++.Hvordan kan dette programmet gjøre om denne koden til kjørbar kode i runtime? Man sender altså et script, eller kodesnutter, til programmet. Noen som har noen tips? Enkelte scriptspråk, som f.eks. Perl, har en egen eval-funksjon. Med denne kan man altså eksekvere / interprete kode man sender til funksjonen. Funksjonen er potensielt skummel, da folk med skumle hensikter kunne tenkes å sende "ondsinnet" kode, som f.eks. formaterer filsystemet eller andre uhørte ting. Jeg har ikke vært borti noe til C/C++, men man burde jo kunne kompilere "instruksen" ved å spawne kompilatoren, og så la OS'et kjøre den kompilerte koden etterpå. Igjen blir det "risikosport" å ha en slik tjeneste kjørende, med tanke på misbruk. Hva er det egentlig du prøver å oppnå? Werner Lenke til kommentar
GeirGrusom Skrevet 19. april 2009 Del Skrevet 19. april 2009 Jeg har noen forslag, men etter min mening virker dette som en trojaner, og jeg er ikke interessert i å hjelpe folk med slikt. Lenke til kommentar
Techster Skrevet 20. april 2009 Forfatter Del Skrevet 20. april 2009 Jeg har noen forslag, men etter min mening virker dette som en trojaner, og jeg er ikke interessert i å hjelpe folk med slikt. Kan se at det ser slik ut, men det er ikke det jeg forsøker å lage. Det jeg forsøker å finne ut at er hvordan kode i tekst blir omgjort til noen som prossesoren kan gjøre noe med. Jeg kan jo selvsagt lage et lite "script språk" som bare mitt program forstår og har forhåndsprogrammerte funksjoner, men det blir ikke det samme. Poenget her er å lære hvordan teskt oversettes til kjørbar kode. Hvis jeg skulle lagd en trojaner, kunne det blitt gjort enklere ved å sende en ferdigkompilert exe fil som den kjører. Har ingen interesse av å lage virus/trojaner etc. Lenke til kommentar
zotbar1234 Skrevet 20. april 2009 Del Skrevet 20. april 2009 (endret) Et program lytter på en nettverksport og får en instruks som er skrevet i f.eks C/C++.Hvordan kan dette programmet gjøre om denne koden til kjørbar kode i runtime? Man sender altså et script, eller kodesnutter, til programmet. Noen som har noen tips? Må det være C++? Det aller enkleste ville ha vært å bruke et språk med støtte for evaluering av kode runtime. Common Lisp, Python, Perl, Ruby -- det finnes flere. Imidlertid bør du være klar over at evaluering av en datastrøm som kommer utenfra er en veldig farlig affære. De eksemplene jeg har hørt om hvor dette er blitt brukt begrenset klientsiden til å være localhost. Hvis det absolutt må være C++ eller C, så er fremgangsmåten å lage en dårligere variant av eval. Du definerer ditt eget kommando(mini)språk, lager en parser til det, tolker den innkommende datastrømmen ihht. dette kommandospråket og utfører de nødvendige handlingene selv. En nok mer "hackish" løsning er å tolke den innkommende datastrømmen som rå maskinkode og utføre det direkte. For et utsnitt av "rå maskinkode" vil dette fungere, om enn være omtrent umulig å debugge. Endret 20. april 2009 av zotbar1234 Lenke til kommentar
___ Skrevet 20. april 2009 Del Skrevet 20. april 2009 Poenget her er å lære hvordan teskt oversettes til kjørbar kode. Hvis det er dette du prøver å lære deg, så hører dette inn under kompilatordesign, et ganske omfattende emne som ikke er gjort over natta å sette seg inn i. Slik du i utgangspunktet framla "problemstillingen" din så skjønner jeg godt at folk reagerte og mistenkte deg for å pønske på noe skummelt. Jeg tenkte samme tanke selv, men bestemte meg likevel for å gi deg et konstruktivt svar. Werner Lenke til kommentar
GeirGrusom Skrevet 20. april 2009 Del Skrevet 20. april 2009 Å sende over maskinkode lar seg ikke gjøre uten at programmet linkes på andre siden uansett, så det er egentlig mer fornuftig å bruke et scriptspråk allikevel. Men hvis hensikten er å lære kompilatorteknikk, så er vel deet best å holde seg på én side av nettverket. Det er utrolig omfattende å gjøre om noe som helst til maskinkode (spesielt x86) men en mellomting kan jo være noe. .NET bruker noe som kalles Common Intermediate Language, som er et slags objektorientert assembly språk. Du kan jo prøve å lage noe som kompilerer til CIL for deretter å bli kompilert til .exe, eventuelt bare rett til vanlig z86 assembly og kompilere det med nasm eller lignende. Som du fort vil se, så ligger det mye jobb bak en slik compiler. Lenke til kommentar
zotbar1234 Skrevet 20. april 2009 Del Skrevet 20. april 2009 Å sende over maskinkode lar seg ikke gjøre uten at programmet linkes på andre siden uansett, Dette er jo beviselig feil -- la oss si vi lager en funksjon som legger 10 til argumentet og returnerer resultatet. Koden for denne funksjonen kan plasseres i en char array, som typecastes til en funksjonspeker (ja, jeg vet at casting i dette tilfellet er ulovlig, men det virker på en rekke implementasjoner, og siden man sender instruksjoner spesifikke for en bestemt platform, hvem bryr seg om portabilitet) og deretter eksekveres. Hvorfor skulle denne funksjonen måtte linkes med noe som helst? Dette fungerte brillefint på MIPS R4400 for noen år tilbake. (...) så det er egentlig mer fornuftig å bruke et scriptspråk allikevel. Iallfall noe som har eval, slik at man slipper å lage sin egen (dårlig) kopi. Lenke til kommentar
GeirGrusom Skrevet 20. april 2009 Del Skrevet 20. april 2009 (endret) Dette er jo beviselig feil -- la oss si vi lager en funksjon som legger 10 til argumentet og returnerer resultatet. Koden for denne funksjonen kan plasseres i en char array, som typecastes til en funksjonspeker (ja, jeg vet at casting i dette tilfellet er ulovlig, men det virker på en rekke implementasjoner, og siden man sender instruksjoner spesifikke for en bestemt platform, hvem bryr seg om portabilitet) og deretter eksekveres. Hvorfor skulle denne funksjonen måtte linkes med noe som helst? Dette fungerte brillefint på MIPS R4400 for noen år tilbake. Du har rett. Men hva hvis du skal gjøre OS operasjoner, eller kommunisere med andre programmer? Må ikke da jump tabellen endres? eller lage en jump tabell da. Btw, kan en bare gjøre om et minneområdet til en funksjonspeker og starte den? Vil ikke operativsystemet reagere på det? Aldri prøvd det selv Endret 20. april 2009 av GeirGrusom Lenke til kommentar
zotbar1234 Skrevet 20. april 2009 Del Skrevet 20. april 2009 (endret) Men hva hvis du skal gjøre OS operasjoner, eller kommunisere med andre programmer?Må ikke da jump tabellen endres? eller lage en jump tabell da. Hvis man har en binær statisk linket blobb fra et likt OS, hvorfor skulle det egentlig det ikke gå, såfremt denne blobben ikke gjør noen eksterne referanser? Men uansett, dette er IKKE slik OP burde gå fram Btw, kan en bare gjøre om et minneområdet til en funksjonspeker og starte den? Vil ikke operativsystemet reagere på det? Dette er C -- alt er lov Dette ble prøvd av en kollega av meg i undervisningsøyemed (poenget var å illustrere at en peker til et minneområde i C (void*) kunne egentlig peke på hva som helst, selv om språkdefinisjonen ikke åpnet for den type kreativ bruk). Endret 20. april 2009 av zotbar1234 Lenke til kommentar
Dead_Rabbit Skrevet 20. april 2009 Del Skrevet 20. april 2009 Btw, kan en bare gjøre om et minneområdet til en funksjonspeker og starte den? Vil ikke operativsystemet reagere på det? Dette er C -- alt er lov Dette ble prøvd av en kollega av meg i undervisningsøyemed (poenget var å illustrere at en peker til et minneområde i C (void*) kunne egentlig peke på hva som helst, selv om språkdefinisjonen ikke åpnet for den type kreativ bruk). Det vil vel ikke fungere om OSet implementerer stack execution protection? Hvis man implementerer "remote execution" ved å gjøre dette, må man vel også huske på at server-programvaren slenge på en returpeker på bufferet iom. at det vil være umulig for klienten å vite. Lenke til kommentar
zotbar1234 Skrevet 20. april 2009 Del Skrevet 20. april 2009 Det vil vel ikke fungere om OSet implementerer stack execution protection? Antageligvis ikke, det var heller ikke poenget Hvis man implementerer "remote execution" ved å gjøre dette, må man vel også huske på at server-programvaren slenge på en returpeker på bufferet iom. at det vil være umulig for klienten å vite. Altså, bare så det er sagt -- jeg foreslår ikke dette som en praktisk løsning, kun en teoretisk mulighet. Lenke til kommentar
GeirGrusom Skrevet 21. april 2009 Del Skrevet 21. april 2009 (endret) Tar jeg ikke helt feil, blir alle long jumps i et program slått ned på av operativsystemet. En fiks rundt dette ville vært å allokere et stort stack område, og lagre slikt der, for da kan du jo fint lage relative jumps. Endret 21. april 2009 av GeirGrusom Lenke til kommentar
Dead_Rabbit Skrevet 21. april 2009 Del Skrevet 21. april 2009 Det vil vel ikke fungere om OSet implementerer stack execution protection? Antageligvis ikke, det var heller ikke poenget Hvis man implementerer "remote execution" ved å gjøre dette, må man vel også huske på at server-programvaren slenge på en returpeker på bufferet iom. at det vil være umulig for klienten å vite. Altså, bare så det er sagt -- jeg foreslår ikke dette som en praktisk løsning, kun en teoretisk mulighet. Det er klart, det vil ikke være praktisk, men nevertheless er det litt interessant å tenke på, heh. Lenke til kommentar
Techster Skrevet 21. april 2009 Forfatter Del Skrevet 21. april 2009 Ok. Ante ikke at det var en så omfattende og krevende oppgave. Går det ann å si kort hvorfor det er så omfattende? Lenke til kommentar
symbolicweb2 Skrevet 26. april 2009 Del Skrevet 26. april 2009 (endret) Ok. Ante ikke at det var en så omfattende og krevende oppgave.Går det ann å si kort hvorfor det er så omfattende? Det du spør om i første post er ikke omfattende å få til, og det de andre snakker om her behøver ikke være noe en må ta hensyn til. GCC er bare et program som et hvilket som helst annet program. En server kan eksekvere GCC og angi "script-snutten" som argument for så å eksekvere resultatet og sende det som ble skrevet ut tilbake til klient. Endret 26. april 2009 av symbolicweb2 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå