My pattern finding function

Posts 1–15 of 18 · Page 1 of 2
My pattern finding function
There are probably still some errors with this (I have never coded hacks before; I wrote this yesterday in the span of about 20 minutes), but I thought I'd share my ideas. The idea is to make a more efficient pattern finding function. I based this off of the boyer-moore string searching algorithm.

Code:
#define realAddy( cast, base, offset ) (cast)((DWORD)(base) + (DWORD)(offset))
template <typename T>
bool exist(BYTE part, T whole)
{
	BYTE *start = (BYTE*)&whole;
	for(DWORD loc = 0; loc < sizeof(whole); loc++)
		if(*(BYTE*)(start + loc) == part) return true;
	return false;
}
DWORD lastLocationOfByte(BYTE part, T whole)
{
	BYTE *start = (BYTE*)&whole;
	for(DWORD loc = 0; loc < sizeof(whole); loc++)
		if(*(BYTE*)(start + sizeof(whole) - loc) == part) return (sizeof(whole) - loc);
}
T *searchAddy(T val)
{
	MEMORY_BASIC_INFORMATION memInfo;
	VirtualQuery(NULL, &memInfo, sizeof(MEMORY_BASIC_INFORMATION));
	size_t total = memInfo.RegionSize;
	T *first = (T*)memInfo.BaseAddress;
	size_t next = sizeof(val);
	T *addy = (T*)(--(&val + next));
	bool exist = false;
	T *loc;
	unsigned char check;
	for(DWORD n = (next - 1); n < total;)
	{
		DWORD spot;
		for(spot = 0; *(unsigned char*)(first + n - spot) == *(unsigned char*)(addy - spot); spot++);
		if(spot == next) return realAddy( T*, first, n );
		else if(exist(*(BYTE*)(first + n), val)
			n += lastLocationOfByte(*(BYTE*)(first + n), val);
		else n += next;
	}
	return false;
}

I haven't tested this yet because I am still working on making a complete hack (I don't want to use someone else's base). If you try this out, please tell me how it worked for you.
Don't really have time to look at it, but good job.
Quote Originally Posted by CAFlames View Post
Don't really have time to look at it, but good job.
OMFG, whos the bigshot now?
Quote Originally Posted by CAFlames View Post
Don't really have time to look at it, but good job.
If you didn't even look at the thread, why would you come in here and post. You don't have time to look at the code but you have time to raise your post count with spam, huh?

What were you thinking when you clicked the post button...
Already looking at the code, i see some undefined stuff, might wanna look over it bruh.
lol gettin into the coding i see, modding get boring? :P
Updated it a bit to fix some issues... haven't tested yet.

Code:
#define realAddy( cast, base, offset ) (cast)((DWORD)(base) + (DWORD)(offset))
template <typename T>
bool bExist(BYTE part, T whole)
{
	BYTE *start = (BYTE*)&whole;
	for(DWORD loc = 0; loc < sizeof(whole); loc++)
		if((*(BYTE*)(start + loc) == part) || (*(BYTE*)(start + loc) == '?')) return true;
	return false;
}
template <typename T>
DWORD lastLocationOfByte(BYTE part, T whole)
{
	BYTE *start = (BYTE*)&whole;
	for(DWORD loc = 0; loc < sizeof(whole); loc++)
		if((*(BYTE*)(start + sizeof(whole) - loc) == part) || (*(BYTE*)(start + loc) == '?')) return (sizeof(whole) - loc);
}
template <typename T>
T *searchAddy(T val)
{
	MEMORY_BASIC_INFORMATION memInfo;
	VirtualQuery(NULL, &memInfo, sizeof(MEMORY_BASIC_INFORMATION));
	size_t total = memInfo.RegionSize;
	T *first = (T*)memInfo.BaseAddress;
	size_t next = sizeof(val);
	T *addy = (T*)((&val + next) - 1);
	bool exist = false;
	T *loc;
	for(DWORD n = (next - 1); n < total;)
	{
		DWORD spot;
		for(spot = 0; (*(unsigned char*)(first + n - spot) == *(unsigned char*)(addy - spot)) || (*(unsigned char*)(addy - spot) == '?'); spot++);
		if(spot == next) return realAddy( T*, first, n );
		else if(bExist(*(BYTE*)(first + n), val))
			n += lastLocationOfByte(*(BYTE*)(first + n), val);
		else n += next;
	}
	return false;
}

Quote Originally Posted by supercarz1991 View Post
lol gettin into the coding i see, modding get boring? :P
Yes. Modding got boring a while ago, I'm more interested in game development.
same here, i just redownloaded the lithtech jupiter source and something called XNA engine
Just finished my hotkey base... the address finding function executes, but when I use the provided address with my PTC function:
Code:
void __cdecl PTC(const std::string called)
{
	if(!PTCaddy)
	{
		PTCaddy = (void*)searchAddy("é????0xÌÌÌÌÌÌÌÌÌÌ̡????");
		return;
	}
	__asm
	{
		push called
		call PTCaddy
		add esp, 0x4
	}
}
The game crashes. I've looked at some other PTC functions and it seems that most people prefer to use C strings. I prefer having access to string methods for my decryption function, but this may be causing my issue. I will update when I get different results.




Quote Originally Posted by supercarz1991 View Post
same here, i just redownloaded the lithtech jupiter source and something called XNA engine
I'm waiting for the cryengine 3 sdk. I'm interesting in making an RTS.
Quote Originally Posted by yodaliketaco View Post

Code:
void __cdecl PTC(const std::string called)
{
	if(!PTCaddy)
	{
		PTCaddy = (void*)searchAddy("é????0xÌÌÌÌÌÌÌÌÌÌ̡????");
		return;
	}
        const char* pNigga = called.c_str();
	__asm
	{
		push pNigga
		call PTCaddy
		add esp, 0x4
	}
}
Fixed. That's why people use C strings.
Quote Originally Posted by mmbob View Post

Fixed. That's why people use C strings.
Does it really make a difference?
Quote Originally Posted by CAFlames View Post


Does it really make a difference?
Umm... yes. A std::string can't fit in an argument, so the compiler actually passes a pointer to the std::string. PTC wants a pointer to a char array, not a string.

@CAFlames
Quote Originally Posted by mmbob View Post

Fixed. That's why people use C strings.
Well, it still crashes. Thanks for the help though. I will use this function as a scanner and see if that portion of the hack is working.
Quote Originally Posted by yodaliketaco View Post
Well, it still crashes. Thanks for the help though. I will use this function as a scanner and see if that portion of the hack is working.
You could show a message box with the value of PTCAddy in it to make sure your scanner is working correctly.
Now that I'm using the function in a logger it seems to be crashing combat arms. I'm not sure where the problem is yet; I will look again tomorrow. If anyone looks at/implements the function, please let me know your results.
Posts 1–15 of 18 · Page 1 of 2
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Need help?