Jaffe Skrevet 14. august 2007 Del Skrevet 14. august 2007 En liten "ting", når jeg skriver en kodestruktur som skal injectes. Så trenger den strukturen å kalle en allerede eksisterene funksjon i "The targetProcess" som jeg har offsetten til. Men hvordan kaller jeg en funksjon via en offsett i C++ ? 9280641[/snapback] Funksjonspeker? Lenke til kommentar
Frysning Skrevet 14. august 2007 Forfatter Del Skrevet 14. august 2007 link. Joda, jeg vet det. Så jeg kan angi en offset fremfor navn på en funksjon slik som det er gjort her? Lenke til kommentar
Jaffe Skrevet 14. august 2007 Del Skrevet 14. august 2007 (endret) link.Joda, jeg vet det. Så jeg kan angi en offset fremfor navn på en funksjon slik som det er gjort her? 9280977[/snapback] Det må vel bli noe slikt: int (*blah)(int) = adresse til funksjonen; Lenge siden jeg brukte funksjonspekere på denne måten, men tror det skal gå. Kanskje kompilatoren klager. Endret 14. august 2007 av Jaffe Lenke til kommentar
Frysning Skrevet 14. august 2007 Forfatter Del Skrevet 14. august 2007 Ja, kompileren bitcher. error C2440: 'initializing' : cannot convert from 'int' to 'int (__cdecl *)(int)' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast Lenke til kommentar
Jaffe Skrevet 15. august 2007 Del Skrevet 15. august 2007 Du får caste adressen til rett pekertype da, så kompilatoren vet litt ting når den skal kalle den: int (*blah)(int) = (int (*)(int))(0xCAFEBABE); Du bytter såklart ut int'ene med retur- og argument-typene til funksjonen du vil kalle. F.eks. om du vil kalle en funksjon som returnerer en char-peker og tar to char-er og en int: char* (*blah)(char, char, int) = (char* (*)(char, char, int))(0xCAFEBABE); Dette tror jeg bør funke. Lenke til kommentar
GeirGrusom Skrevet 15. august 2007 Del Skrevet 15. august 2007 typedef char* (*blah)(char, char, int); blah foo = (blah)0xCAFEBABE; foo(1, 2, 3); Lenke til kommentar
Jaffe Skrevet 15. august 2007 Del Skrevet 15. august 2007 (endret) typedef char* (*blah)(char, char, int); blah foo = (blah)0xCAFEBABE; foo(1, 2, 3); 9282818[/snapback] Haha, en typedefinisjon av hele dritten er vel penere ja Endret 15. august 2007 av Jaffe Lenke til kommentar
Frysning Skrevet 15. august 2007 Forfatter Del Skrevet 15. august 2007 (endret) Takk for hjelpen her Skal vi se, følgende kode fungerte: #include <iostream>using std::cout; int test(int hi); typedef int* (*blah)(int); int main(int argc, char* argv[]) { blah foo = (blah)0x4110F5; cout << "FunksjonsAdresse: " << *test << "\n"; cout << foo(4) << "\n"; system("pause"); return 0; } int test(int hi) { return hi*2; } Jeg har bare et spørsmål angående output fra callet til foo, og en linje med kode. Spørsmål1: Kan noen gidde å forklare denne linjen: blah foo = (blah)0x4110F5; Hvorfor slik, hvorfor må blah stå i parentes før adresssen? Spørsmål2: Output som blir printa ser slik ut: 00000008 Hvorfor ikke bare 8 ? Edit: Har forsovidt bestillt meg "How to program C++ Sixth edition", gleder meg til den kommer. Har litt sånn hullete C++ kunnskap. Endret 15. august 2007 av Frysning Lenke til kommentar
Jaffe Skrevet 15. august 2007 Del Skrevet 15. august 2007 (endret) Takk for hjelpen her Skal vi se, følgende kode fungerte: #include <iostream>using std::cout; int test(int hi); typedef int* (*blah)(int); int main(int argc, char* argv[]) { blah foo = (blah)0x4110F5; cout << "FunksjonsAdresse: " << *test << "\n"; cout << foo(4) << "\n"; system("pause"); return 0; } int test(int hi) { return hi*2; } Jeg har bare et spørsmål angående output fra callet til foo, og en linje med kode. Spørsmål1: Kan noen gidde å forklare denne linjen: blah foo = (blah)0x4110F5; Hvorfor slik, hvorfor må blah stå i parentes før adresssen? Spørsmål2: Output som blir printa ser slik ut: 00000008 Hvorfor ikke bare 8 ? Edit: Har forsovidt bestillt meg "How to program C++ Sixth edition", gleder meg til den kommer. Har litt sånn hullete C++ kunnskap. 9283967[/snapback] (blah) foran adressen caster den til en peker til en funksjon som returnerer en int og tar en int. Det er vel for å sikre at kompilatoren kaller funksjonen på rett måte (at den vet hvor mange argumenter som skal legges på stack osv.) EDIT: Det er jo av samme grunn man f.eks. caster pekertypen når man allokerer minne med malloc i C: char* streng = (char*)malloc(32); Jeg ser også at du har definert blah som en typedef på en peker som returnerer en peker til int, og ikke en int. Det kan kanskje forklare hvorfor du får 00000008. Forresten, i eksempelkoden du viste trenger du ikke vite adressen til test-funksjonen, du kan bruke address-of-operatøren (&): blah foo = &test; Endret 15. august 2007 av Jaffe Lenke til kommentar
Frysning Skrevet 15. august 2007 Forfatter Del Skrevet 15. august 2007 (endret) Jeg skrev dette istedet: typedef int (*blah)(int); Og da returnerer den bare tallet uten alle nullene. Hehe jeg måtte teste med adressen, koden skal brukes til injection. Update: Nå over til WriteProcessMemory Headeren ser slik ut: BOOL WINAPI WriteProcessMemory( HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesWritten ); Hva er de datatypene som er definert her, LPVOID, LPCVOID og SIZE_T? Det er vel ingen som har et eksempel? I det jeg klarer å grave frem på nettet brukes dette: unsigned long pid; HANDLE process; GetWindowThreadProcessId(listview, &pid); process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ| PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid); Problemet mitt blir jo å få tak i pid uten å bruke GetWindowsThreadProcessId. Hvorfor er det ikke bare en funksjon som sier "GetProcessHandle". Grrrr. Edit: Når jeg har fått oppsummert alt sammen, skrevet noe kode selv og økt forståelsen skal jeg skrive en introduksjon til reversing i bruker-guider. Samt samle artikler og linker der. Edit: Greit, jeg må ha PID, når jeg har den bruker jeg bare OpenProcess for å få handle. Nå gjenstår bare resten av parameterne. Update! Jeg testet TatniumInjectoren og den er genial. Etter den er compilet legger jeg bare min egen kode i en .dll fil med samme navn som loaderen og den festes til angitt program. Sjekket med Ollydbg, så den fester dll. Den bruker vel CreateRemoteThread. Damn så mye kode jeg har fått gratis, det er ikke få folk som har laget den injectoren heller. Hvis koden skulle være av interresse, for injectoren så bare spør. Endret 15. august 2007 av Frysning Lenke til kommentar
GeirGrusom Skrevet 15. august 2007 Del Skrevet 15. august 2007 LPVOID og LPCVOID er det samme som void* SIZE_T er det samme som size_t, eller unsigned int tror jeg. Lenke til kommentar
Frysning Skrevet 15. august 2007 Forfatter Del Skrevet 15. august 2007 Vil det i praksis si peker til ukjent datatype? Lenke til kommentar
GeirGrusom Skrevet 15. august 2007 Del Skrevet 15. august 2007 ja, peker av ukjent størrelse. Jeg vet ikke hva som egentlig er poenget med size_t datatypen, utenom å gjøre livet litt surere. Dessuten er all den typedef-inga i platform sdk fryktelig irriterende når man jobber med windows funksjoner i andre språk, og skal finne ut hva de forskjellige datatypene an byttes ut med. Lenke til kommentar
Vindstille Skrevet 16. august 2007 Del Skrevet 16. august 2007 *Post for å få denne inn i mine innlegg* Lenke til kommentar
Frysning Skrevet 17. august 2007 Forfatter Del Skrevet 17. august 2007 Tja, endelig helg! Jeg hater PB, pb kan dø. Forresten, er det noen som vet om det godt/gøy online spill uten et altfor sikkert anti-cheat system? Anyways... (Ja, jeg kjeder meg) Lenke til kommentar
Frysning Skrevet 17. august 2007 Forfatter Del Skrevet 17. august 2007 (endret) Når det kommer til cheating så kom jeg på en liten idé. Tenk å ha en server, hvor alle spillerne er programmerere som alle bruker sin egen cheat. Det hadde vært genialt, de som har mest programming skills vinner. Samme hvilket spill egentlig. Hadde det vært gøy? (Finnes det så bare.. Grr) Endret 17. august 2007 av Frysning Lenke til kommentar
Dead_Rabbit Skrevet 18. august 2007 Del Skrevet 18. august 2007 Haha. Finnes ihvertfall liknende spill der man skal programmere virtuelle "roboter" som sloss mot hverandre, hehe. Lenke til kommentar
Frysning Skrevet 18. august 2007 Forfatter Del Skrevet 18. august 2007 Kan jo lage en programming-challenge, velge et spill og sette en dato. Hadde vært gøy, se hvor mange som melder seg på. Kanskje sette en deltaker avgift, og vinneren får potten. Gode ideer her sant. Noen ide til hvilket spill? Lenke til kommentar
LordEirik Skrevet 18. august 2007 Del Skrevet 18. august 2007 Kan jo lage en programming-challenge, velge et spill og sette en dato. Hadde vært gøy, se hvor mange som melder seg på. Kanskje sette en deltaker avgift, og vinneren får potten. Gode ideer her sant. Noen ide til hvilket spill? 9307444[/snapback] FFVO såklart! FFVO.jar FFVO sin side akkurat nå FFVo sin side under prosjekt på skolen Lenke til kommentar
sindreij Skrevet 18. august 2007 Del Skrevet 18. august 2007 (endret) Når det kommer til cheating så kom jeg på en liten idé. Tenk å ha en server, hvor alle spillerne er programmerere som alle bruker sin egen cheat. Det hadde vært genialt, de som har mest programming skills vinner. Samme hvilket spill egentlig. Hadde det vært gøy? (Finnes det så bare.. Grr) 9303787[/snapback] Jeg har hørt om at det finnes cs servere der det er lov å cheate. Endret 18. august 2007 av sindreij 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å