|
You last visited: Today at 05:27
Advertisement
Function with FindPattern is crashing
Discussion on Function with FindPattern is crashing within the C/C++ forum part of the Coders Den category.
05/02/2015, 21:35
|
#1
|
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
|
Function with FindPattern is crashing
Hi.
Ich habe eine simple ASM Funktion. Die Adressen suche ich mit FindPattern.
Das ganze gibt mir auch die richtigen Pointer aus:
109428c & 467b30.
Nun habe ich ein Problem. Hier ist die Funktion:
Code:
DWORD PickUpMove;
DWORD PickUpCall;
void PickUp(){
__asm{
MOV ECX, DWORD PTR DS : [PickUpMove]
CALL PickUpCall
}
}
void InitiateHooks()
{
DWORD PickupFunc = FindPattern("client.exe", "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\x8B\x0D\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xE9\x00\x00\x00\x00\x51\x8B\x4C\x24\x0C\x8D\x04\x24\x50\x6A\x00\x51\xE8\x00\x00\x00\x00\x83\xC4\x0C\x84\xC0",
"xxxxxxxxxxxxxxx????x????x????xxxxxxxxxxxxx????xxxxx");
PickupFunc += 19;
DWORD PickUpCall2 = RelativeToAbsolute(PickupFunc + 1);
PickUpCall = PickUpCall2;
PickupFunc -= 19;
PickupFunc += 14;
DWORD Address1 = *(DWORD*)(PickupFunc + 1);
PickUpMove = Address1;
PickupFunc -= 14;
}
Wenn ich nun die Funktion PickUp aufrufe crasht das Spiel.
Wenn ich "PickUpMove" & "PickUpCall" aber direkt im Code bestimme geht alles perfekt:
Code:
DWORD PickUpCall = 0x467b30
void PickUp(){
__asm{
MOV ECX, DWORD PTR DS : [0x109428c]
CALL PickUpCall
}
}
Also ist das Problem das "0x". Wie kann ich mein DWORD zu "0x109428C" anstatt "109428C" machen?
Hinweis?
Danke
|
|
|
05/02/2015, 21:44
|
#2
|
elite*gold: 0
Join Date: Dec 2014
Posts: 442
Received Thanks: 211
|
Du musst den Klasseninstanz-Pointer in das EAX Register schieben und anschließend ins ECX Register.
Code:
enum StaticAddresses
{
PickUpMove,
PickUpCall
};
void PickUp()
{
__asm
{
MOV EAX, PickUpMove
MOV ECX, DWORD PTR DS : [EAX]
CALL PickUpCall
}
}
Edit: Funktionspointer wären hier auch deutlich eine schönere Lösung:
Code:
void PickUp()
{
typedef void (__thiscall *PickUpPtr)(unsigned long arg);
PickUpPtr fPickUp = reinterpret_cast<PickUpPtr>(FuncAddr);
fPickUp(*reinterpret_cast<unsigned long*>(ClassPtr));
}
Ich tippe mal auf ein __thiscall
|
|
|
05/02/2015, 22:11
|
#3
|
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
|
Das war ja einfacher als gedacht, danke dir 
Kann geclosed werden.
|
|
|
06/30/2015, 15:23
|
#4
|
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
|
Ich bins nochmal. Habe wieder ein Problem mit Findpatter.
Diesmal will ich kein ASM benutzen, sondern einfach einen Pointer ändern.
Wenn ich mit Findpattern den Pointer suche finde ich auch den richtigen.
Gebe den in einer Messagebox aus.
Aber wenn ich dann vom Pointer die Value ändern will kommt ein Zugriffserror.
Gebe ich im Code direkt die Adresse ein klappts, also liegts wieder am 0x.
In ASM klappte das ja mit
MOV EAX, Pointer.
Wie krieg ich das hin ohne ASM zu nutzen?
Danke nochmal
|
|
|
07/06/2015, 12:53
|
#5
|
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
|
Quote:
Originally Posted by Friendplays1
Ich bins nochmal. Habe wieder ein Problem mit Findpatter.
Diesmal will ich kein ASM benutzen, sondern einfach einen Pointer ändern.
Wenn ich mit Findpattern den Pointer suche finde ich auch den richtigen.
Gebe den in einer Messagebox aus.
Aber wenn ich dann vom Pointer die Value ändern will kommt ein Zugriffserror.
Gebe ich im Code direkt die Adresse ein klappts, also liegts wieder am 0x.
In ASM klappte das ja mit
MOV EAX, Pointer.
Wie krieg ich das hin ohne ASM zu nutzen?
Danke nochmal 
|
Code:
int* randomPtr = reinterpret_cast<int*>(109428C);
*randomPtr = 0xFF;
um der Variabel auf die der Pointer zeigt 255 zuzuweisen.
|
|
|
07/15/2015, 16:55
|
#6
|
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
|
Danke, brauchte ich dann nicht mehr, habs anders gelöst  Ein letztes Problem nun. Möchte nun diese 2 Funktionen mit FindPatter finden. Wieder: Die messageboxen geben bei beiden das richtige Call & Move an. Nun habe ich es wie __asm gemacht und es erst in das eax register, dann ins ecx register geschoben. Folgender Fehler:
Das selbe auch wenn ich es nicht erst in das eax register schiebe.
Hier der Gesamte Code:
Quote:
DWORD Move1;
DWORD Call1;
DWORD Move2;
DWORD Call2;
int push1;
void Funktion2(){
__asm{
MOV EAX, Move1
MOV ECX, DWORD PTR DS : [EAX]
call Call1
mov [push1],eax
}
}
void Funktion1(int Wert){
__asm{
MOV EAX, Move2
MOV ECX, DWORD PTR DS : [EAX]
push Wert
push 0
call Call2
}
}
void SearchForPointer()
{
char curprc[MAX_PATH];
GetModuleFileName(NULL,curprc,sizeof(curprc));
__try{
DWORD Func1Search = FindPatternPointer(curprc, "\x8B\x0D\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x89\ x44\x24\x08\xC7\x44\x24\x04\x00\x00\x00\x00\xFF\x2 5\x00\x00\x00\x00\xCC\xCC\xCC\x83\xEC\x40",
"xx????x????xxxxxxxx????xx????xxxxxx");
DWORD Move2Found = *(DWORD*)(Func1Search + 1);
Move2 = Move2Found;
Func1Search += 5;
DWORD Call2Found = RelativeToAbsolute(Func1Search + 1);
Call2 = Call2Found;
Func1Search -= 5;
DWORD Func2Search = FindPatternPointer(curprc, "\x8B\x0D\x00\x00\x00\x00\x53\x50\xE8\x00\x00\x00\ x00\x8B\xCE\xE8\x00\x00\x00\x00\x84\xC0\x74\x64\x8 B\xCE\xE8\x00\x00\x00\x00\x50\xE8\x00\x00\x00\x00\ x83\xC4\x04\x84\xC0 ",
"xx????xxx????xxx????xxxxxxx????xx????xxxxx");
DWORD Move1Found = *(DWORD*)(Func2Search + 1);
Move1 = Move1Found;
Func2Search += 7;
DWORD Call1Found = RelativeToAbsolute(Func2Search + 1);
Call1 = Call1Found;
Func2Search -= 7;
}
__except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION) {
}
}
|
Wenn ich manuell die Adressen eingebe und das aufrufe:
Quote:
klappt alles... Wo ist denn jetzt wieder der fehler? =(
Danke
|
|
|
07/16/2015, 06:17
|
#7
|
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
|
Quote:
Originally Posted by Friendplays1
Danke, brauchte ich dann nicht mehr, habs anders gelöst  Ein letztes Problem nun. Möchte nun diese 2 Funktionen mit FindPatter finden. Wieder: Die messageboxen geben bei beiden das richtige Call & Move an. Nun habe ich es wie __asm gemacht und es erst in das eax register, dann ins ecx register geschoben. Folgender Fehler:
Das selbe auch wenn ich es nicht erst in das eax register schiebe.
Hier der Gesamte Code:
Wenn ich manuell die Adressen eingebe und das aufrufe:
klappt alles... Wo ist denn jetzt wieder der fehler? =(
Danke 
|
Wie viele Parameter hat die Funktion die du nun aufrufen möchtest?
|
|
|
07/16/2015, 12:59
|
#8
|
elite*gold: 0
Join Date: Oct 2012
Posts: 21
Received Thanks: 0
|
Funktion2 rufe ich zu erst auf, die schreibt einen Wert in integer push1.
Dann rufe ich Funktion1 auf die dann push1 pusht als parameter. Klappt auch ohne weiteres mit manuell eingetragenen adressen..
Beide Funktionen geben diesen Error aus wenn ich sie aufrufem
|
|
|
07/16/2015, 15:15
|
#9
|
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
|
Quote:
Originally Posted by Friendplays1
Funktion2 rufe ich zu erst auf, die schreibt einen Wert in integer push1.
Dann rufe ich Funktion1 auf die dann push1 pusht als parameter. Klappt auch ohne weiteres mit manuell eingetragenen adressen..
Beide Funktionen geben diesen Error aus wenn ich sie aufrufem
|
Wie genau greiffst du auf den Zielprozess zu? Ist dein programm eine dll oder eine exe? Wenn ich du schnell hilfe willst, adde mich in skype.
|
|
|
 |
Similar Threads
|
FindPattern crash
06/17/2014 - C/C++ - 9 Replies
Hey coders,
I was always using FindPattern by defining the module where i want to search the pattern using GetModuleHandle. But now i wanna scan for an address without module so i tried to scan the whole memory ( Bad idea i know but the dynamic address isn't always stored in a certain part of the memory )
Here's my code
bool Match(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask )
|
External FindPattern liefert -1
09/16/2012 - C/C++ - 3 Replies
Hallo E*PVP
Das Programm liefert immer -1 zurück. Die Sig stimmt (per DLL geht es),
aber extern will es nicht ganz. Kann mir einer erklären warum er fehlschlägt?
Habe es auch mit SetDebugPrivileges() probiert.
Danke im vorraus. Gruß, Tom
// INCLUDES //
#include <iostream>
|
About Gateway Crashing and Shard manger crashing :|
07/31/2012 - Silkroad Online - 0 Replies
hello pepole .. recently i edited something's in database .. when i tryed to open gateway server it crash's ... at 1 second it crash's .. the gateway opened once but then Shard Manger load's 100% then it crash o_o
somebody help me .. i checked it and i saw it was about cerftiction files .. but i didn't play with any file :|
|
Problem [ADDYLOGGER-FindPattern(Signatur)]
01/17/2011 - WarRock - 6 Replies
Hallo liebe Community
ich verzweifel langsam an meinem Problem,
Ich habe durch ein TUT gelernt wie ich die Signaturen finde,
doch ich weiß nicht woran mein fehler liegt.
Denn wenn ich mit DarkOlly die Signatur per SigMaker by P47R!CK erstelle,
bekomme ich 2x die gleichen Signaturen beim herausfinden des Z & Y Offsets.
|
All times are GMT +1. The time now is 05:27.
|
|