000
13.07.2018, 10:29 Uhr
Wurmi
|
Hallo zusammen.
Mein Name ist Sven, und ich habe ein kleines Problem mit einem bereits funktionierendem kleinen C-Programm. Es ist eine Art Patcher. Es Öffnet eine bestimmte Datei, Sucht nach einer bestimmten Hexreihe, ändert diese ab und speichert die Datei.
Nun soll es aber mehrere Hexreihen abändern, weiß aber leider nicht wie ich das mache.
Hier mal der bisherige Code:
C++: |
#include <iostream> #include <fstream> #include <algorithm> #include <functional> #include <windows.h> using namespace std;
int main() { int result; char oldname[] ="Datei.exe"; char newname[] ="Datei_OLD.exe"; result= rename( oldname , newname ); if ( result == 0 ) puts ( "File successfully renamed" ); else perror( "Error renaming file" ); ifstream::pos_type size; ifstream infile("sh3_OLD.exe", ios::in | ios::binary | ios::ate); ofstream outfile("sh3.exe", ios::out | ios::binary); if (infile.is_open()) { const char sequence[] = { 0x00, 0x35, 0x39, 0x2C, 0x36, 0x39, 0x30, 0x2C, 0x20, 0x32, 0x35, 0x30, 0x2C, 0x36, 0x39, 0x30, 0x2C, 0x20, 0x35, 0x35, 0x30, 0x2C, 0x36, 0x39, 0x30, 0x00 }, // Eindeutige Hexreihe der Original-Datei bytes[] = { 0x00, 0x35, 0x39, 0x2C, 0x39, 0x39, 0x39, 0x2C, 0x20, 0x32, 0x35, 0x30, 0x2C, 0x39, 0x39, 0x39, 0x2C, 0x20, 0x35, 0x35, 0x30, 0x2C, 0x39, 0x39, 0x39, 0x00 }; // In diese Hexreihe abändern size = infile.tellg(); char *memblock = new char[size]; infile.seekg(0, ios::beg); infile.read(memblock, size); infile.close(); const char* i = search(memblock, memblock + size, sequence, sequence + sizeof(sequence));
if(i != memblock + size) { memcpy(memblock + (i - memblock), bytes, sizeof(bytes)); for(size_t i = 0; i < size; i++) { outfile << memblock[i]; } } else { cout << "Sequence not found!" << endl; }
outfile.close(); delete [] memblock; } else { cout << "Unable to open file." << endl; }
system("PAUSE"); return 0; }
|
Wäre schön wenn mir Jemand dabei helfen könnte
Gruß, Sven Dieser Post wurde am 13.07.2018 um 10:31 Uhr von Wurmi editiert. |