NOPs rückgängig machen?

10/17/2009 14:03 arnibold#1
Code:
#include <iostream>
#include <windows.h>

using namespace std;

BYTE test [3] = {0x90, 0x90, 0x90,};

int main()
{
        HWND window = NULL;
	while(window == NULL)
	{
			window = FindWindow(NULL, "Fenster");
			Sleep(500);
	}
	
	WriteProcessMemory(handle,(void*)(0x004687b1),&test,3,&puffer);
	
	return 0;
}
Wie kann ich die Adresse "004687b1", nach dem Ersetzen mit NOPs, wieder in ihren ursprünglichen Zustand bringen?

Das zu Ersetzende war übrigens "8b 91 cc"
10/17/2009 14:05 MrSm!th#2
Indem du die Bytes die vorher da standen zurück schreibst.
D.h. du liest den Speicher aus, speicherst den Wert überschreibst ihn mit 0x90 wie du das ja schon da oben hast, und danach überschreibst du ihn wieder mit dem gesicherten wert
10/17/2009 14:06 wurstbrot123#3
indem du vorher an der Adresse 3 bytes ausliest ? :>
ReadProcessMemory....
aber nebenbei, wirst noch bemerken das dein Programm eh nicht funzt :>
Zumindest so wie dus gepostet hast, aber kann ja sein das du WPM nur als Beispiel hingepackt hast :p
10/17/2009 14:07 arnibold#4
Ist der ursprüngliche Wert einfach "8b 91 cc", oder müsste daran noch etwas verändert werden?

Quote:
Originally Posted by wurstbrot123 View Post
indem du vorher an der Adresse 3 bytes ausliest ? :>
ReadProcessMemory....
aber nebenbei, wirst noch bemerken das dein Programm eh nicht funzt :>
Zumindest so wie dus gepostet hast, aber kann ja sein das du WPM nur als Beispiel hingepackt hast :p
Ja das hab ich mir schon gedacht, wie wäre es denn richtig?
BYTE test [6] ...
oder ist die 3 da schon richtig? o.O
10/17/2009 14:12 MrSm!th#5
woher sollen wir das denn wissen? es kommt doch darauf an, was im programm steht
wir können auch nicht wisssen was der ursprüngliche wert ist, dazu müsstest du uns sagen, was an der adresse steht^^
edit: hups da stehts ja^^ ja klar ist der wert richtig; einfach mit dem dann wieder zurückersetzen
du könntest auch, falls der wert dynamisch ist, ihn mit ReadProcessMemory auslesen, aber wenn er immer so ist, dann reicht ein fester wert; also einfach nochmal WriteProcessMemory und diesesmal eben mit dem ursprünglichen wert ;)
10/17/2009 14:14 arnibold#6
Ok, ich werde es mal ausprobieren ;)

Achso nur mal so nebenbei:
Ist es möglich mit einer einfachen Console Tasten zu binden, d.h. drücke ich F8 wird WPM ausgeführt? ^_^
10/17/2009 14:34 schlurmann#7
Quote:
Originally Posted by arnibold View Post
Ok, ich werde es mal ausprobieren ;)

Achso nur mal so nebenbei:
Ist es möglich mit einer einfachen Console Tasten zu binden, d.h. drücke ich F8 wird WPM ausgeführt? ^_^
CreateThread
GetAsyncKeyState
10/20/2009 11:58 Bot_interesierter#8
WindowHandle!=ProcessHandle
nur so ein Tipp am Rande
10/20/2009 14:38 MrSm!th#9
warum kommst du denn damit? er hat doch nirgendwo hWnd mit handle gleichgesetzt im code^^
er hat den HANDLE handle nicht mal definiert :p
10/21/2009 13:34 Bot_interesierter#10
Quote:
Originally Posted by MrSm!th View Post
warum kommst du denn damit? er hat doch nirgendwo hWnd mit handle gleichgesetzt im code^^
er hat den HANDLE handle nicht mal definiert :p
my bad, ich dachte er hätte das Ergebnis von FindWindow dort gespeichert, habe den Code nur überflogen und ein FindWindow call + WriteProcessMemory sieht immer verdächtig aus, vor allem wen nirgends ein Process Handle geholt wird ;)
10/21/2009 13:47 Adroxxx#11
PHP Code:
void CGodsWarMultihackDlg::m_ZoomOn(void)
{        

        
hWnd FindWindowExW(NULL,NULL,NULL,_T("Game.exe"))
        
    
unsigned long lzBase 0x0043BA02;

    
BYTE bZoomOn[2]={ 0xEB0x34};
    
    
DWORD numBytesRead;
    
HANDLE hProc;
    
DWORD procID;

    
    
GetWindowThreadProcessId(hWnd,&procID);
    
hProc OpenProcess(PROCESS_ALL_ACCESSFALSEprocID);
    
WriteProcessMemory(hProc,(LPVOID)lzBase,&bZoomOn,2,NULL);
    
    
CloseHandle(hProc);

Wenn du es wieder Rückgängig machen willst, machst du einfach eine zweite Variable
PHP Code:
BYTE bZoomOff[2]={ 0x750x34}; 
Und schreibst diese an die Adresse.