# Thread: My pattern finding function

1. ## 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);
}
{
MEMORY_BASIC_INFORMATION memInfo;
VirtualQuery(NULL, &memInfo, sizeof(MEMORY_BASIC_INFORMATION));
size_t total = memInfo.RegionSize;
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.

2. ## The Following User Says Thank You to yodaliketaco For This Useful Post:

DecoderBack (08-03-2011)

3. Don't really have time to look at it, but good job.

4. Already looking at the code, i see some undefined stuff, might wanna look over it bruh.

5. lol gettin into the coding i see, modding get boring? :P

6. 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>
{
MEMORY_BASIC_INFORMATION memInfo;
VirtualQuery(NULL, &memInfo, sizeof(MEMORY_BASIC_INFORMATION));
size_t total = memInfo.RegionSize;
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;
}```

Originally Posted by supercarz1991
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.

7. same here, i just redownloaded the lithtech jupiter source and something called XNA engine

8. 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)
{
{
return;
}
__asm
{
push called
}
}```
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.

Originally Posted by supercarz1991
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.

9. Originally Posted by yodaliketaco

Code:
```void __cdecl PTC(const std::string called)
{
{
return;
}
const char* pNigga = called.c_str();
__asm
{
push pNigga
}
}```
Fixed. That's why people use C strings.

10. ## The Following User Says Thank You to mmbob For This Useful Post:

yodaliketaco (07-26-2011)

11. Originally Posted by mmbob

Fixed. That's why people use C strings.
Does it really make a difference?

12. Originally Posted by CAFlames

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

13. Originally Posted by mmbob

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.

14. Originally Posted by yodaliketaco
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.

15. 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.

16. Originally Posted by CAFlames
Don't really have time to look at it, but good job.
OMFG, whos the bigshot now?

17. ## The Following User Says Thank You to topblast For This Useful Post:

~Stephen (08-03-2011)

18. Originally Posted by CAFlames
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...

Page 1 of 2 12 Last