As im sealing my trainer development for now, i decided to release the source of my pattern scanner i use in my hack. Its a really simple one, and i already have a more advanced version, but to get the idea, this is enough.
For calling this procedure (which is delphi btw), you have to have 3 parameters: A start adress (SAddr), the Length of the Area that will be scanned (Slength) and the pattern you want to search for (SPattern).Code:function TMainForm.FindPatterns(SAddr, SLength: Integer; sPattern: String): Integer; var buf: array of Byte; raw: String; i, foundpos: Integer; begin Result := 0; //Set Scan-Length SetLength(buf, SLength); //Null the Buffer for i := 0 to Length(buf)-1 do Buf[i] := 0; //Read out the Memory Values RPM(SAddr, buf); //Translate into an hex-String raw := ''; for i := 0 to Length(buf)-1 do raw := raw + StrToHex(Chr(buf[i])); //Searching the position the pattern is contained in raw //div 2 is needed because 1 byte = 2 Hex-Chars foundpos := pos(sPattern, raw) div 2; //if it was found anywhere, return that value if foundpos <> 0 then Result := foundpos + SAddr; end;
if you want to find e.g. Health for BlackOps, these 3 parameters wil work:
PATTERN_START_ADDR = $1B00000;
PATTERN_LEN = $100000;
HEALTH_PATTERN = '0000000000640000000000000064';
The procedure RPM just reads out the Memory of BlackOps into an array of byte. This is then translated into an Hexadecimal string (raw).
It is a really simple one, but for understanding the idea behind it, its okey.
An extension would be masking the pattern, so you can say stuff like "the first 10 signs have to be exactly the same, the next 6 dont matter, last 6 need to be the same again", but that would need regular expressions, which would let this thread explode :P
Thanks if i helped,
Edlmann






endeavor Game
Epic War 4 Game
Crystal Story Game
Haunt the House Game
Colour My Fate Game
LARRY: Pup Run Game
Demolition City Game
Sushi Cat Game
Cursed Treasure Game
Manhattan Project Game






