C++ Pages

12/15/2013 17:42 Moritz99#1
Hallo,
ich habe aus dem Internet einen Code für ein Patternscan:
Functions.h
Code:
#include <iostream>
#include <Windows.h>
#include <tlhelp32.h>
#include <Psapi.h>


//Print our pattern scan results if necessary
void MsgBoxAddy(DWORD addy)
{
	char szBuffer[1024];
	sprintf(szBuffer, "Addy: %02x", addy);
	MessageBox(NULL, szBuffer, "Title", MB_OK);

}


//Get all module related info, this will include the base DLL. 
//and the size of the module
MODULEINFO GetModuleInfo( char *szModule )
{
	MODULEINFO modinfo = {0};
	HMODULE hModule = GetModuleHandle(szModule);
	if(hModule == 0) 
		return modinfo;
	GetModuleInformation(GetCurrentProcess(), hModule, &modinfo, sizeof(MODULEINFO));
	return modinfo;
}


void WriteToMemory(uintptr_t addressToWrite, char* valueToWrite, int byteNum)
{
	//used to change our file access type, stores the old
	//access type and restores it after memory is written
	unsigned long OldProtection;
	//give that address read and write permissions and store the old permissions at oldProtection
	VirtualProtect((LPVOID)(addressToWrite), byteNum, PAGE_EXECUTE_READWRITE, &OldProtection);

	//write the memory into the program and overwrite previous value
	memcpy( (LPVOID)addressToWrite, valueToWrite, byteNum);

	//reset the permissions of the address back to oldProtection after writting memory
	VirtualProtect((LPVOID)(addressToWrite), byteNum, OldProtection, NULL);
}


DWORD FindPattern(char *module, char *pattern, char *mask)
{
	//Get all module related information
	MODULEINFO mInfo = GetModuleInfo(module);

	//Assign our base and module size
	//Having the values right is ESSENTIAL, this makes sure
	//that we don't scan unwanted memory and leading our game to crash
	DWORD base = (DWORD)mInfo.lpBaseOfDll;
	DWORD size =  (DWORD)mInfo.SizeOfImage;

	//Get length for our mask, this will allow us to loop through our array
	DWORD patternLength = (DWORD)strlen(mask);

	for(DWORD i = 0; i < size - patternLength; i++)
	{
		bool found = true;
		for(DWORD j = 0; j < patternLength; j++)
		{
			//if we have a ? in our mask then we have true by default, 
			//or if the bytes match then we keep searching until finding it or not
			found &= mask[j] == '?' || pattern[j] == *(char*)(base + i + j);
		}

		//found = true, our entire pattern was found
		//return the memory addy so we can write to it
		if(found) 
		{
			return base + i;
		}
	}

	return NULL;
}
source.cpp
Code:
#include <Windows.h>
#include <iostream>  
#include "Functions.h"

using namespace std;
char AmmoOpCode[] = "\x90\x90\x90\x90\x90\x90\x90\x90\x90";


void InitiateHooks()
{

	///*-----UNLIMITED AMMO--------*/
	//SCAN FOR THIS IN CHEAT ENGINE SEARCH
	DWORD ammoAddy = FindPattern("plugin-container.exe", 
		"\xD9\x58\x58\xD9\x45\xE4\xD9\x58\x50", "xxxxxxxx");
	//ammoAddy+=8;

	MsgBoxAddy(ammoAddy);
	WriteToMemory(ammoAddy, AmmoOpCode, 9);
	
}
#pragma endregion




BOOL WINAPI DllMain(
    HINSTANCE hinstDLL,  // handle to DLL module
    DWORD fdwReason,     // reason for calling function
    LPVOID lpReserved)     // reserved
{
    // Perform actions based on the reason for calling.
    switch(fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // Initialize once for each new process.
            // Return FALSE to fail DLL load.
            //MessageBoxA(NULL, "Attached successfuly", "", 0);
			InitiateHooks();
            break;
    }
    // Successful DLL_PROCESS_ATTACH.
    return TRUE;
}
so diesen code habe ich auch verstanden.
Jetzt ist es so, dass das Pattern das gefunden werden soll, nicht in einem Modul vorhanden ist.
Ein bekannter gab mir als Tipp, Pages zu durchsuchen mit VirtualQuery(Ex)
Kann mir einer erklären wie ich das auf den Code anwenden kann?

Danke schonmal
Mit freundlichen Grüßen
Moritz ;)
12/15/2013 18:29 Dr. Coxxy#2
speicher ist in windows in pages unterteilt, eine page hat eigenschaften wie z.b. ob sie readable, writable oder executable ist, mit virtualquery kannst du abfragen, was für einen status eine page hat.
einfach über den gesamten adressbereich pageweise iterieren, mit virtualquery abfragen ob die page lesbar (executable wenn du code suchst) ist, wenn ja, die page nach deinem pattern durchsuchen.
implementieren darfste das selber, das wird dir hier niemand machen (was du wahrscheinlich nicht schaffen wirst, wenn das nach deinem namen dein geburtsjahr ist und du dir das hier net zusammengooglen konntest...).
12/15/2013 19:13 Moritz99#3
also.
Nein ich habe ihn mir nicht zusammengegoogelt habe ihn von einer Reihe von Video.
Ich habe ihn außerdem verstanden, weil ich auch ein C++ Buch besitze und fleisig am lernen bin. Außerdem finde ich es nicht ganz fair, nur wegen meinem Alter zu sagen, dass ich das nicht schaffen kann.
Achja, ich verstehe es leider echt nicht, aber nur, weil ich mit Pages noch NIE was gemacht habe. Da man durch Sehen lernt, habe ich ja gefragt, ob mir jemand das ganze in den Code implementieren kann. Ich möchte es einfach nur verstehen und das kann ich leider nicht, wenn ich kein Beispiel habe.

Danke :)
12/15/2013 19:34 マルコ#4
Für manche Sachen benötigt man eine gewisse Menge Wissen, die man aus ganz praktischen Gründen mit 14 noch nicht haben kann (außer man ist inselbegabt oder so). Da hilft es auch nichts, dass du ein C++ Buch hast.
In diesem Fall ist es zum Beispiel so, dass dir jemand zeigen kann, wie man mit Pages arbeitet. Aber um damit richtig arbeiten zu können und zu verstehen, warum die so funktionieren (was grundlegend für viele Dinge ist) musst du die Theorie dahinter kennen.
Ich bin Student im 5. Semester Ingenieurinformatik. Ich habe letztes Semester eine Vorlesung namens "Betriebssysteme" gehabt, in der wir u.a. Pages durchgenommen haben. Ich denke nicht, dass du mit deinem lückenhaften Basiswissen und fehlender Mathematik in der Lage bist, es anhand von ein paar Beispielen zu verstehen, wenn nichtmal ich mir anmaße, ohne eine weitere umfangreiche Recherche korrekt damit umgehen zu können.
Das einzige, was du in deinem jezzigen Zustand machen kannst ist entweder copy&past oder fleißig zur Schule gehen und nebenher ein wenig Fachliteratur über Betriebssysteme lesen.
Auch viel C++ üben kann nicht schaden.

Ich hoffe du verstehst, dass mein Text dich nicht herunter machen soll, sondern dir aufzeigen soll, dass du nicht über Nacht etwas lernen kannst, was viele schlaue Köpfe über Jahrzehnte entwickelt haben.
12/15/2013 19:42 Moritz99#5
Wo du recht hast hast du recht aber:
Diesen Code den ich gepostet habe, habe ich schließlich auch verstanden und nicht nur C&P betrieben. Außerdem denke ich, dass das ein 14 Jährigee genauso lernen kann wie ein 20 Jähriger. Ich kann nunmal nur durch Beispiele lernen. So ist das halt.
12/15/2013 20:34 Dr. Coxxy#6
Quote:
Originally Posted by Moritz99 View Post
Wo du recht hast hast du recht aber:
Diesen Code den ich gepostet habe, habe ich schließlich auch verstanden und nicht nur C&P betrieben. Außerdem denke ich, dass das ein 14 Jährigee genauso lernen kann wie ein 20 Jähriger. Ich kann nunmal nur durch Beispiele lernen. So ist das halt.
du wirst aber wie du selber merkst nicht zu jedem mist beispiele finden, wäre ja auch sinnlos, dann müsstest du ja nichts mehr programmieren wenn es alles schon als fertigen code gibt.
am besten liest du dich erstmal ein, was paging überhaupt ist:
https://en.wikipedia.org/wiki/Paging
(weiteres problem bei deinem alter ist, dass du vermutlich kein/kaum englisch kannst, was ein sehr großes problem ist, da fast ausschließlich in englisch programmiert wird).
dann guckste dir an wie dein copypaste code funktioniert, dann überlegst du dir welchen code du damit nicht durchsuchen kannst (nämlich den, der nicht in einem modul liegt), dann überlegst du dir, wie du denn codestellen im virtual memory finden könntest der nicht in einem modul liegt.
du wirst zu dem schluss kommen, dass du einfach alle adressen durchsuchst die in frage kommen, was du z.b. mit virtualquery abfragen kannst (geht auch anders, das ist aber relativ easy zu implementieren.).
12/15/2013 21:17 Moritz99#7
Warum genau sollte ich kein englisch können?
Ich habe schließlich in der Schule englisch.
Naja in dem C&P Code ist als Modul plugin-container.exe angegeben.
Also wird darin auch nach dem Codestück gesucht. Da das Codestück aber in keinem Modul liegt wird es auch nichts finden. Deswegen muss ich in den Pages danach suchen.
Aber wie schon gesagt, ich verstehe einfach nicht wie ich das mache.
, deswegen fände ich es klasse, wenn jemand den code ergänzen könnte, damit ich es verstehe.
12/15/2013 23:36 burncode#8
Quote:
Originally Posted by Moritz99 View Post
Warum genau sollte ich kein englisch können?
Ich habe schließlich in der Schule englisch.
Naja in dem C&P Code ist als Modul plugin-container.exe angegeben.
Also wird darin auch nach dem Codestück gesucht. Da das Codestück aber in keinem Modul liegt wird es auch nichts finden. Deswegen muss ich in den Pages danach suchen.
Aber wie schon gesagt, ich verstehe einfach nicht wie ich das mache.
, deswegen fände ich es klasse, wenn jemand den code ergänzen könnte, damit ich es verstehe.
Code ergänzen = Copy&Paste = 100% wirst du es nicht ohne Erklärung verstehen

Schulenglisch hilft nicht immer.

Regards.
12/15/2013 23:37 Czer0™#9
Quote:
Originally Posted by Moritz99 View Post
Außerdem denke ich, dass das ein 14 Jährigee genauso lernen kann wie ein 20 Jähriger. Ich kann nunmal nur durch Beispiele lernen. So ist das halt.
Diese Aussage ist falsch. Your arguments are invalid.
12/16/2013 00:15 Moritz99#10
Quote:
Originally Posted by burncode View Post
Code ergänzen = Copy&Paste = 100% wirst du es nicht ohne Erklärung verstehen


Regards.
sag ich schon.
da bin ich mir sogar fast 100% sicher. ich hab diesen code auch verstanden und hab die kommentare nicht angeschaut.

@Chrizz
okay aber in sachen Programmierung schon.
12/16/2013 00:26 Dr. Coxxy#11
Quote:
Originally Posted by Moritz99 View Post
@Chrizz
okay aber in sachen Programmierung schon.
ich hab das ganze auch hinbekommen ohne fragen in foren zu stellen, per google, bücher und msdn findest du alles was du wissen musst.
12/16/2013 00:36 burncode#12
Quote:
Originally Posted by Dr. Coxxy View Post
ich hab das ganze auch hinbekommen ohne fragen in foren zu stellen, per google, bücher und msdn findest du alles was du wissen musst.
^This.

Dr. Coxxy hat es erfasst.
12/16/2013 12:50 th0rex#13
Nur mal so :
Die Start Adresse muss nicht unbedingt die eines Moduls sein. Genauso wenig ist das bei Size der Fall. Wenn du den Code so Super toll verstanden hast dürfte es ein leichtes sein Code zu finden der sich in keinem Modul befindet. Solltest halt nur Start Adress und Länge der Page kennen.
12/16/2013 17:12 MrSm!th#14
Wie wäre es, wenn ihr dann jetzt mal euren unnötigen Streit über die Sinnhaftigkeit von seiner Lernmethode beilegt und ihm entweder helft oder es lasst.
Man muss nicht Informatik studiert haben, um die nötigen WinApi Funktionen zu kennen, die einem das Auslesen von Pages ermöglichen.
Ein paar Stichwörter für Google dürften wohl drin sein, wenn keiner einen fertigen Code bereitstellen will (was ich wiederum vollkommen unterstütze: hier wird nicht gespoonfeedet).
12/16/2013 17:38 Dr. Coxxy#15
Quote:
Originally Posted by MrSm!th View Post
Wie wäre es, wenn ihr dann jetzt mal euren unnötigen Streit über die Sinnhaftigkeit von seiner Lernmethode beilegt und ihm entweder helft oder es lasst.
Man muss nicht Informatik studiert haben, um die nötigen WinApi Funktionen zu kennen, die einem das Auslesen von Pages ermöglichen.
Ein paar Stichwörter für Google dürften wohl drin sein, wenn keiner einen fertigen Code bereitstellen will (was ich wiederum vollkommen unterstütze: hier wird nicht gespoonfeedet).
soweit ich das sehe wurden entsprechende stichwörter und auch schon ein lösungsweg beschrieben, trzd. scheint der TE nicht weiterzukommen - was wiederum zweifel an der sinnhaftigkeit seiner "lernmethode" aufkommen lässt.