|
Thema |
Forum |
Letzter Beitrag |
Beiträge |
Zugriffe |
 |
C++ Find Pattern Frage!
Erstellt am: Fr 25. Nov 2011, 17:36
Crosz
Vorschau
Go To Post
Hey, also ich würde gerne einen FindPattern schreiben, der die .exe Datei in mein Programm lädt und anschließend auf den bestimmten Adressen verweißt. Weiß ich nicht, wie ich die FindPattern Funktion auf ein Programm anwende, welches ich in mein Programm lade, aber mit einer .dll Injektion funktioniert es. Jetzt würde ich gerne fragen, wie ich das schaffe. Ich würde gerne eine Konsole benutzen und keine .dll. Wenn ich jetzt mithilfe des fstream Header die .exe im Binary Mode lade, wie kann ich dann dadrin die Adressen suchen? Hier sind die beiden Pattern Funktionen, die ich benutze. CPP Code: bool bDataCompare(const unsigned char* pData, const unsigned char* bMask, const char* szMask) { for(;*szMask;++szMask,++pData,++bMask) if(*szMask=='x' && *pData!=*bMask ) return false; return (*szMask) == 0; } unsigned long dwFindPattern( unsigned char *bMask,char * szMask, unsigned long dw_Address, unsigned long dw_Len) { for(unsigned long i=0; i < dw_Len; i++) if( bDataCompare( (unsigned char*)( dw_Address+i ),bMask,szMask) ) return (unsigned long)(dw_Address+i); return 0; }
Bis jetzt sieht mein Code so aus: CPP Code: ifstream::pos_type size; char* memblock; char test[20]; int warte; DWORD Offset; int main() { ifstream file("Spiel.exe", ios::out | ios::app | ios::binary); if(file.is_open()) { size = file.tellg(); memblock = new char [size]; file.seekg(0, ios::beg); file.read(memblock, size); //Offset = dwFindPattern((PBYTE)"\x55\x8B\xEC\x6A\xFF\x68\x00\x00\x00\x00\x64\xA1\x00\x00\x00\x00\x50\x64\x89\x25\x00\x00\x00\x00\x51\x8B\x4D\x08\x53\x56\x8B\x35\x00\x00\x00\x00", "xxxxxx????xx????xxxx????xxxxxxxx????", 0x401000, 0x29e000); } else { cout << "Datei konnte nicht geoeffnet werden!"; cin >> warte; } Offset = *(DWORD*) Offset; //sprintf(test, "Adresse: %x", Offset); cout << "Adresseee: %x" << Offset; cin >> warte; file.close(); return 0; }
Ich hoffe einer kann mir helfen. Gruß
|
VB, C/C++, Delphi, etc |
Fr 25. Nov 2011, 19:17
von SilverFire
|
8 |
1158 |
 |
C++ Find Pattern Frage!
Erstellt am: Fr 25. Nov 2011, 17:36
Crosz
Vorschau
Go To Post
Über den Prozess wäre ich auch dran gekommen, aber ich möchte ja ohne das mein Programm sich in das andere Programm injektet. In AutoIT ist z.B. hier ein Code zu, der ohne jeglicher Art von Injektion funktioniert. TEXT Code: #NoTrayIcon ;// open and read the client in binary mode $file = FileOpen('Spiel.exe', 16) $content = FileRead($file, FileGetSize('Spiel.exe')) ;// filter the wanted stuff from the code $filter = StringRegExp($content, "558BEC6AFF68.{8}64A1000000005064892500000000518B4D.{2}53568B35(.{8})0FB786.{8}89018B8E(.{8})8B11578965.{2}C745.{2}00000000FF92.{8}8B45.{2}D955.{2}D9188B8E.{8}8B11FF92.{8}D955.{2}8B45.{2}D918B0.{2}8B4D.{2}64890D000000005F5E5B8BE55DC3", 1) FileClose($file) ;// if the regex filter worked, display the results in a simple gui If IsArray($filter) Then GUICreate('Offset Finder', 175, 55, Default, Default, 0x10C80000) GUICtrlCreateLabel('MainBaseAdress:', 10, 7, 85, 20) GUICtrlCreateInput('0x'&reverseHex($filter[0]), 95, 5, 70, 20, 0x801) GUICtrlCreateLabel('CharStructOffset:', 10, 32, 85, 20) GUICtrlCreateInput('0x'&reverseHex($filter[1]), 95, 30, 70, 20, 0x801) While GUIGetMsg()<>-3 WEnd Else MsgBox(16, 'Error', 'oooops looks like something went wrong :s') EndIf Func reverseHex($string) Local $return ;// if the string got a odd length, add a zero in front of it If Mod(StringLen($string),2)<>0 Then $string = '0'&$string ;// reverse the hex patterns For $i=1 To StringLen($string) Step 2 $return = StringMid($string, $i, 2)&$return Next ;// remove the left-hand zeros While StringLeft($return, 1)='0' $return = StringTrimLeft($return, 1) WEnd Return $return EndFunc
Credits lolkop
|
VB, C/C++, Delphi, etc |
Fr 25. Nov 2011, 19:17
von SilverFire
|
8 |
1158 |
 |
C++ Find Pattern Frage!
Erstellt am: Fr 25. Nov 2011, 17:36
Crosz
Vorschau
Go To Post
Hätte ich Ahnung, dann müsste ich doch nicht fragen oder? Aber auf Hilfe kann man hier ja nicht hoffen...
|
VB, C/C++, Delphi, etc |
Fr 25. Nov 2011, 19:17
von SilverFire
|
8 |
1158 |
 |
C++ Find Pattern Frage!
Erstellt am: Fr 25. Nov 2011, 17:36
Crosz
Vorschau
Go To Post
Ich hab ja auch keine ganze .cpp Datei verlangt, sondern nur Tipps, wie ich die FindPattern Funktion auf einer .exe Datei anwenden kann, ohne dass ich ihren Prozess anrühre. Genau so möchte ich es machen, dass macht mein Code ja auch CPP Code: ifstream file("Spiel.exe", ios::out | ios::app | ios::binary);
durch dieses ios::binary wird ja meine Datei als Binäre Datei gelesen, nun muss ich irgendwie die Adresse für meine Funktion suchen, aber ich weiß halt nicht wie. Vielleich erkläre ich es nochmal mithilfe des ASM Codes. Also ich habe für folgende Adresse eine Signatur erstellt. TEXT Code: 004E7E7E |. 8B35 68D97000 MOV ESI,DWORD PTR DS:[70D968]
Nun möchte ich gerne die "70D968" auslesen. Ich habe mir eine Signatur erstellt und würde gerne diese Adresse auslesen. Dazu versuche ich halt das Programm ("Spiel.exe") in dem Binär Modus zu laden, damit ich über die FindPattern Funktion diese Adresse kriegen kann. Hoffentlich hast du es besser verstanden und kannst mir helfen. :/ Gruß
|
VB, C/C++, Delphi, etc |
Fr 25. Nov 2011, 19:17
von SilverFire
|
8 |
1158 |