|
You last visited: Today at 16:31
Advertisement
[C++]Problem bei anzeigen von Calls
Discussion on [C++]Problem bei anzeigen von Calls within the C/C++ forum part of the Coders Den category.
08/22/2011, 15:57
|
#1
|
elite*gold: 0
Join Date: Jun 2008
Posts: 451
Received Thanks: 410
|
[C++]Problem bei anzeigen von Calls
Hey,
ich versuche gerade alle calls eines programmes aufzulisten. Ich lese halt die komplette ".text" section ein und überprüfe dann byte für byte ob es ein 0xE8 ist, aber da ist auch mein Problem. Es werden mir halt alle Calls ausgegeben(vermute ich), aber auch die Adressen wo es keine Calls gibt sonder einfach nur 0xE8 steht. Kann ich irgendwie überprüfen ob das nun wirklich ein Call ist, weil die selben Probleme werden ja auch bei anderen Befehlen auftreten wenn ich z.b alle mov auslesen möchte.
Code:
ofile.open("C:/BLAA.txt");
GetPeInfo(myProcessInfos.szExeName,&myPeInfo);
unsigned char *lpCode = (unsigned char*)malloc(myPeInfo.dwImageSize);
ReadProcessMemory(hProcess,(LPVOID)(myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode),lpCode,myPeInfo.dwEndOfCode,0);
for(int i = 0; i <myPeInfo.dwEndOfCode;i++)
{
if(lpCode[i] == 0xE8)
{
DWORD dwCallAdress;
ReadProcessMemory(hProcess,(LPVOID)(myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode + i + 1),&dwCallAdress,4,0);
ofile << "Position: " << hex << myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode + i << " " << "Call zu: " <<myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode+i+5+dwCallAdress << endl;
}
}
|
|
|
08/22/2011, 18:07
|
#2
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Ist klar, wenn du jedes Byte auf E8 überprüfst, wird auch jedes E8 Byte ausgegeben.
Brauchst eine Disassembling Library dafür, damit du die einzelnen Opcodes voneinander trennen und dann auf Calls überprüfen kannst.
E8 ist btw nicht der einzige Call.
Und welchen Sinn hat das bitte? Oo
|
|
|
08/22/2011, 18:37
|
#3
|
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
|
Ich hoffe du weißt das E8 auch ein teil einer Adresse etc sein kann.
Wie Smith schon sagt du brauchst die Library.
|
|
|
08/22/2011, 19:47
|
#4
|
elite*gold: 0
Join Date: Jun 2008
Posts: 451
Received Thanks: 410
|
1. ja ist mir schon kla die Frage ging eher in die Richtung wie ich das unterscheiden kann und mit 0xFF kann auch noch gecallt werden...
2. im endeffekt möchte ich den nen pointer scaner bauen wie cheat engine es macht und um ein bisschen an dese art des scanen mich ran zu tasten dachte ich ich versuche mal was einfaches. Wenn ihr mir tipps für den pointer scaner geben könnt wäre das cool xD ich werde mich mal nach einer diassembling libary umsehen. Danke schonmal
Könnt ihr mir ne Libary empfehlen `?
|
|
|
08/22/2011, 20:37
|
#5
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
distorm
|
|
|
08/22/2011, 20:59
|
#6
|
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
|
Hier haste z.b. eine Disassembler library .
|
|
|
08/22/2011, 21:10
|
#7
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Der Pointer Scanner muss aber keine Calls disassemblen o.ô
Wie gesagt, du brauchst eine Library zum Disassemblieren, wenn du Calls von gewöhnlich E8 Bytes unterscheiden willst.
Zb. BeeEngine (oder war es Bea? :O) oder die Library von OllyDbg, die steht auch open-source zur Verfügung.
Dann gehst du eben jeden Opcode durch; aber eben nur jeden Opcode, nicht jedes Byte.
|
|
|
08/22/2011, 22:40
|
#8
|
elite*gold: 0
Join Date: Jun 2008
Posts: 451
Received Thanks: 410
|
vielen dank schonmal nen schöner anhaltspunkt
EDIT:
Ich kann das machen wie ich will ob ich ich das aus dem file lese oder den memory einlese es kackt immer an der gleiche stelle ab, weil ein paar bytes vorher fehler gemacht werden und dann das ganze UNKOWN_OPCODES ergibt.....
Code:
int _tmain(int argc, _TCHAR* argv[])
{
MYPROCESSINFORMATION myProcessInfos;
MYPEINFOS myPeInfo;
HANDLE hProcess = GetProcHandle("cheatengine-i386.exe",&myProcessInfos);
GetPeInfo(myProcessInfos.szExeName,&myPeInfo);
unsigned char *lpCode = (unsigned char*)malloc(myPeInfo.dwEndOfCode);
ReadProcessMemory(hProcess,(LPVOID)(myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode),lpCode,myPeInfo.dwEndOfCode,0);
DISASM MyDisasm;
int iLen = 0;
memset(&MyDisasm,0,sizeof(DISASM));
MyDisasm.EIP = (int)lpCode;
MyDisasm.VirtualAddr = myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode;
MyDisasm.Archi = 0;
int Error = 0;
DWORD dwEndOfCode = (DWORD)(lpCode + myPeInfo.dwEndOfCode);
cout << hex << dwEndOfCode << endl;
cin.get();
while(!Error)
{
MyDisasm.SecurityBlock = dwEndOfCode - MyDisasm.EIP;
iLen = Disasm(&MyDisasm);
if(iLen == OUT_OF_BLOCK || iLen == UNKNOWN_OPCODE)
{
(void) printf("Fehler! \n");
Error = 1;
}
else
{
cout << hex << MyDisasm.VirtualAddr << " " << MyDisasm.CompleteInstr << endl;
MyDisasm.EIP += iLen;
MyDisasm.VirtualAddr+= iLen;
if (MyDisasm.EIP >= (int)dwEndOfCode)
{
(void) printf("End of buffer reached ! \n");
Error = 1;
}
}
}
cin.get();
return 0;
}
|
|
|
Similar Threads
|
Chat-Anzeigen Problem
09/18/2010 - Metin2 Private Server - 3 Replies
habe ein Problem mit der Chat-Anzeige...
wenn ich z.B. etwas schreibe müsste eig 6-8sek dass geschriebene über dem Kopf sein. In meinem Fall aber nicht bei mir bleibt es höchstens 2sek und da wollt ich jetzt fragen ob ihr mir sagen könnt wie ich dass ändern kann(bekommt ein thx):D
|
Problem Mit Inventar anzeigen Bei V15
06/28/2010 - Flyff Private Server - 4 Replies
Hallo Liebe Leute
Ein Kumpel Von Mir Sieht Weder Das Inventar Fenster Weder Noch Den Actions Slot weis einer wie ich das beheben kann weil alle anderen sehen action slot und inventar aber nur der 1 net why ??? ich freue mich auch eure antworten
lg Capitain Winters
|
How to find calls
12/16/2009 - Dekaron - 8 Replies
I know how to find things using CE that have a number value, like skills and hp and shield, etc. But how do you find things that don't have number values, like animations or agro and vac values?
|
All times are GMT +2. The time now is 16:31.
|
|