|
You last visited: Today at 16:07
Advertisement
[C++] Eintrittspunkt/Basis-Addresse eines Programms finden.
Discussion on [C++] Eintrittspunkt/Basis-Addresse eines Programms finden. within the C/C++ forum part of the Coders Den category.
12/16/2011, 04:21
|
#1
|
elite*gold: 0
Join Date: Sep 2008
Posts: 18
Received Thanks: 4
|
[C++] Eintrittspunkt/Basis-Addresse eines Programms finden.
# Edit:
Hallo!
Hab mal angefangen mit memory read/write rum zu experimentieren, funktioniert soweit auch ganz gut.
Bei Solitär bereitet mir jedoch etwas probleme, sieht im CheatEngine folgendermaßen aus:
Mit 'normalen' statischen addressen komm ich klar, aber hier weiß ich nich wie ich 'solitaire.exe+97074' in C++ handhaben soll.
Bräuchte also etwa sowas:
Code:
DWORD entryPoint = blablabla;
//Wie bekomm ich den Einstiegspunkt von solitaire.exe hier rein,
//so wie's im CE angezeigt wird? (0x0150ACE8)
DWORD offset = 0x2C;
DWORD address = entryPoint+offset;
Danke schon mal im Voraus.
|
|
|
12/16/2011, 18:32
|
#2
|
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
|
 <-- Link
|
|
|
12/16/2011, 21:36
|
#3
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,407
|
kannst auch einfach direkt 0x400000 addieren und die absolute adresse nehmen.
|
|
|
12/16/2011, 22:32
|
#4
|
elite*gold: 1
Join Date: Feb 2009
Posts: 6,379
Received Thanks: 7,996
|
Quote:
Originally Posted by MrSm!th
kannst auch einfach direkt 0x400000 addieren und die absolute adresse nehmen.
|
Nur dann, wenn das Programm, welches er manipulieren will, kein ASLR verwendet und auch tatsächlich 0x400000 als ImageBase verwendet. Und ja: es gibt Spiele, die dort nicht die Standardwerte benutzen. WoW z.B..
|
|
|
12/17/2011, 01:12
|
#5
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,407
|
Ist aber nicht die Regel und dann nimmt man halt die andere Base, ist ja nicht schwer herauszufinden.
Und eine dynamische Base haben die wenigsten Games.
|
|
|
12/17/2011, 01:57
|
#6
|
elite*gold: 0
Join Date: Sep 2008
Posts: 18
Received Thanks: 4
|
Danke and HardCore.1337 und link, genau danach hab ich gesucht.
Hier der code, den ich jetzt hab - vielleicht hilfts später jemandem:
Code:
#include "stdafx.h"
#include <windows.h>
#include <TlHelp32.h>
#include <iostream>
using namespace std;
DWORD dwGetModuleBaseAddress(DWORD dwProcessIdentifier, TCHAR *lpszModuleName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessIdentifier);
DWORD dwModuleBaseAddress = 0;
if(hSnapshot != INVALID_HANDLE_VALUE)
{
MODULEENTRY32 ModuleEntry32 = {0};
ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
if(Module32First(hSnapshot, &ModuleEntry32))
{
do
{
if(_tcscmp(ModuleEntry32.szModule, lpszModuleName) == 0)
{
dwModuleBaseAddress = (DWORD)ModuleEntry32.modBaseAddr;
break;
}
}
while(Module32Next(hSnapshot, &ModuleEntry32));
}
CloseHandle(hSnapshot);
}
return dwModuleBaseAddress;
}
int main()
{
HWND window = FindWindow(0, _T("Solitaire"));
if( window == 0 ){
printf("Window not found!\n");
char f;
cin >> f;
return 0;
}
DWORD pID = 0;
GetWindowThreadProcessId(window, &pID);
DWORD baseAddr = dwGetModuleBaseAddress(pID, _T("solitaire.exe"));
DWORD staticOffset = 0x97074;
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
DWORD value;
DWORD numBytesRead;
ReadProcessMemory(handle, (LPCVOID)(baseAddr+staticOffset), &value, sizeof(DWORD), &numBytesRead);
value+=0x2C;
ReadProcessMemory(handle, (LPCVOID)value, &value, sizeof(DWORD), &numBytesRead);
value+=0x10; //Points offset
ReadProcessMemory(handle, (LPCVOID)value, &value, sizeof(DWORD), &numBytesRead);
CloseHandle(handle);
printf("Found value: %d", value);
char f;
cin >> f;
return 0;
}
|
|
|
12/17/2011, 12:03
|
#7
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
würde nicht auch RtlImageNtHeader ne gute lösung bieten?
PoC code:
Code:
; DWORD __stdcall GetImageBaseThread(LPVOID pModuleName)
call GetModuleHandleA
push eax
call RtlImageNtHeader
mov eax, [eax+24] ; eax=((PIMAGE_NT_HEADERS)eax)->OptionalHeader;
mov eax, [eax+28] ; eax=((IMAGE_OPTIONAL_HEADER)eax)->ImageBase;
ret
|
|
|
12/17/2011, 13:52
|
#8
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by link
Wie jetzt?
GetModuleHandle liefert dir doch schon die ImageBase zurueck.
Ausserdem wuerde es halt nur im eigenen Adressraum funktionieren und man muesste den Code injizieren, um die korrekten Werte zu bekommen.
Daher geht es mit den TlHelp-Funktionen am sichersten und schoensten.
|
gut das war jetzt vielleicht nicht ein tolles beispiel ImageBase aus dem header zu lesen, aber man könnte so z.b. den entrypoint finden usw. das war der gedanke dahinter
und ja wenn man keinen code injizieren will is das ne unschöne methode.. beschäftige mich momentan einfach ein wenig mehr mit den NtXX funktionen
|
|
|
12/17/2011, 17:57
|
#9
|
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
|
Quote:
Originally Posted by Pasukaru
Hallo!
Hab mal angefangen mit memory read/write rum zu experimentieren, funktioniert soweit auch ganz gut.
Bei Solitär bereitet mir jedoch etwas probleme, sieht im CheatEngine folgendermaßen aus:
Mit 'normalen' statischen addressen komm ich klar, aber hier weiß ich nich wie ich 'solitaire.exe+97074' in C++ handhaben soll.
|
Bei der .exe musst du statt der GetModuleHandle( 0) den process schreiben, weil es so bei einer .dll aussieht.
Basepointer definierst als:
Code:
DWORD BasePointer = 0;
Code:
DWORD ImageBase = (DWORD)GetModuleHandle(0);
BasePointer = ImageBase + 0x00097074;
|
|
|
12/17/2011, 20:34
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,407
|
Quote:
Originally Posted by HeavyHacker
gut das war jetzt vielleicht nicht ein tolles beispiel ImageBase aus dem header zu lesen, aber man könnte so z.b. den entrypoint finden usw. das war der gedanke dahinter
und ja wenn man keinen code injizieren will is das ne unschöne methode.. beschäftige mich momentan einfach ein wenig mehr mit den NtXX funktionen 
|
Nur ist das hier völlig irrelevant.
|
|
|
 |
Similar Threads
|
Frage: Arena-Eintrittspunkt ändern?
05/15/2011 - Flyff Private Server - 1 Replies
Hey Leutz,
ich hab da ma ne kurze Frage.
Wie kann ich den Arena-Eintrittspunkt verändern?
Ich hab ne Custommap, wo der arena Verwalter wo anders steht.
Jedoch wird man bei Eintreten in die PVP an der alten Stelle gespawnt.
Ich hoffe auch schnelle Hilfe :)
|
[Suche] Hilfe beim finden eines DL für '10er
03/12/2011 - Metin2 Private Server - 3 Replies
Hallo, da es ja verboten ist nach einem DL von den Serverfiels zu fragen, frag ich einfach nach jemand der ihn hat und mir netterweise weiterhilft.
Danke
MfG
|
[VB.NET] Automatisch Addresse finden
11/16/2010 - .NET Languages - 23 Replies
Hallo,
ich habe ein Wallhack-Tool in VB.Net gecodet
Writememory(Prozess, &H1672F868, "2", "4")
Funktioniert auch, jedoch ändert sich die Adresse immer. Also mal ist sie 1672F868 und mal XXXXF868. Das F868 bleibt immer gleich, der Rest ändet sich wieder.
Wie kann ich in VB.Net das Lösen? Ich hab mir das so gedacht:
|
Addresse Finden!
04/29/2010 - General Coding - 8 Replies
Hey :)
Ich such momentan für so ein Adventure alle SMAs zusammen :D
Nur eine finde ich die ganze Zeit nicht. Das ist die Zeit die man in jedem Levelabschnitt hat. Ich habs schon mit allen Scan Typen versucht aber ich finde die SMa einfach nicht :(
Kann mir jemand helfen?
MFG, TheEcoMaster
|
Brauche hilfe bei der Programmierung eines raid such programms
11/02/2009 - General Coding - 0 Replies
Hey Leute
Ich spiele das spiel lineage2.
Dar sich in den letzten monaten, einiges an dem privi server verändert hat (bessere waffen (Raid stats runtergestufft) wurden, möchte ich mir ein programm coden, was mir zeigt ob der genannte raid noch da ist oder nicht.
Weiss bloss leider nicht wie ich genau damit anfangen soll
|
All times are GMT +1. The time now is 16:08.
|
|