Guten Abend,
zuerst möchte ich mich dafür entschuldigen einen solch alten thread wieder ins Leben zu rufen.
Ich habe mir den Code von Biohazard angesehen und ihn auf meine Bedürfnisse umgeändert.
hier einmal meine Opfer exe:
und hier mein programm, mit welchem ich versuchen möchte die Funktion Burn aufzurufen:
doch leider bringt das mein Opferprogramm nur zum crashen.
Die Adresse habe ich mir mit ollydbg rausgesucht, und habe natürlich die genommen wo der Call steht.
hier die paar zeilen aus ollydbg:
MfG
zuerst möchte ich mich dafür entschuldigen einen solch alten thread wieder ins Leben zu rufen.
Ich habe mir den Code von Biohazard angesehen und ihn auf meine Bedürfnisse umgeändert.
hier einmal meine Opfer exe:
Code:
#include <stdio.h>
#include <windows.h>
void Burn(int a,int b){
printf("%i %i\n",a,b);
return;
}
int main(){
Burn(1,2);
SetConsoleTitle( TEXT("Opferprogramm") );
getchar();
return 0;
}
und hier mein programm, mit welchem ich versuchen möchte die Funktion Burn aufzurufen:
Code:
#include <iostream>
#include <conio.h>
#include <windows.h>
#define NOP 0x90
#define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ)
using namespace std;
typedef void (*burn)(int,int);
struct Parameter{
burn pFunc;
int a;
int b;
};
static void burnFunc(Parameter *p)
{
p->pFunc(p->a,p->b);
}
void endFunc(void) { }
void main (void)
{
Parameter p;
p.a = 10;
p.b = 20;
//Adresse der Funktion void burn(int,int) in burn.exe
p.pFunc = (burn)0x00F81009;
LPVOID param,func;
HANDLE hThread;
HWND hWindow;
hWindow = FindWindow (NULL, TEXT ("Opferprogramm"));
if (hWindow)
{
printf ("Opferprogramm wurde gefunden.\n");
DWORD hProcessId;
HANDLE hProcess;
GetWindowThreadProcessId (hWindow, &hProcessId);
hProcess = OpenProcess (CREATE_THREAD_ACCESS, NULL, hProcessId);
cout << "hProcessId:\t" << hProcessId << "\n";
//Speicher für Parameter Struktur reservieren
param=VirtualAllocEx(hProcess, NULL, sizeof(Parameter), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
cout << "param:\t" << param << "sizeof (Parameter)" << sizeof (Parameter) << "\n";
//Speicher für Funktion reservieren
func=VirtualAllocEx(hProcess, NULL, (DWORD)((DWORD)endFunc-(DWORD)burnFunc), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
cout << "func:\t" << func << "\n";
//Parameter schreiben
WriteProcessMemory(hProcess, param, (LPVOID)&p, sizeof(Parameter), NULL);
cout << "param:\t" << param << "\n";
//Funktion reinschreiben
WriteProcessMemory(hProcess, func, (LPVOID)burnFunc, (DWORD)((DWORD)endFunc-(DWORD)burnFunc), NULL);
cout << "func:\t" << func << "\n";
//Funktion aufrufen
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)func, param, 0, NULL);
cout << "hThread:\t" << hThread << "\n";
//Warten bis Thread fertig
WaitForSingleObject(hThread,INFINITE);
//Funktion aus dem Speicher entfernen
VirtualFreeEx(hProcess,(LPVOID)func,0,MEM_RELEASE);
//Parameter entfernen
VirtualFreeEx(hProcess,(LPVOID)param,0,MEM_RELEASE);
//Handle schließen
CloseHandle(hProcess);
}
else
{
printf ("Opferprogramm konnte nicht gefunden werden.\n");
}
getch ();
}
doch leider bringt das mein Opferprogramm nur zum crashen.
Die Adresse habe ich mir mit ollydbg rausgesucht, und habe natürlich die genommen wo der Call steht.
hier die paar zeilen aus ollydbg:
Code:
00F81000 >/$ 6A 02 PUSH 2 ; /<%i> = 2
00F81002 |. 6A 01 PUSH 1 ; |<%i> = 1
00F81004 |. 68 F420F800 PUSH OFFSET Opferpro.??_C@_06DLCJAAAF@?$>; |format = "%i %i
"
00F81009 |. FF15 A420F800 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
MfG
Zuletzt bearbeitet von einem Moderator: