Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace RabirDimensionalBeast
{
class PatternScanner
{
private static unsafe uint FindPattern(int StartAddress, int Length, string bMask, string szMask)
{
byte[] ByteMask = new byte[szMask.Length];
//Creating Byte Array
int State = 0;
for (int i = 0; i < bMask.Length; i++)
{
if (bMask[i] == 'x')
{
ByteMask[State] = byte.Parse(bMask.Substring(i + 1, 2), System.Globalization.NumberStyles.HexNumber);
State++;
}
}
//Searching Byte Pattern
for (int i = 0; i < Length; i++)
{
bool Found = true;
for (int j = 0; j < ByteMask.Length; j++)
{
Found = Found && ((ByteMask[j] == *(byte*)(StartAddress + i + j)) || szMask[j] == '?');
}
if (Found) return (uint)(StartAddress + i); //Found it
}
return 0; //Didn't found it
}
public static unsafe int[] SequentedOffsetScanner(int StartAddress, int Length, string bMask, string szMask, int OffsetPos)
{
List<int> FoundOffsets = new List<int>();
//Creating Byte Array
byte[] ByteMask = new byte[szMask.Length];
int State = 0;
for (int i = 0; i < bMask.Length; i++)
{
if (bMask[i] == 'x')
{
ByteMask[State] = byte.Parse(bMask.Substring(i + 1, 2), System.Globalization.NumberStyles.HexNumber);
State++;
}
}
//Searching Byte Pattern
for (int i = 0; i < Length; i++)
{
bool Found = true;
for (int j = 0; j < ByteMask.Length; j++)
{
Found = Found && ((ByteMask[j] == *(byte*)(StartAddress + i + j)) || szMask[j] == '?');
}
if (Found)
{
if (!FoundOffsets.Contains(*(int*)(StartAddress + i + OffsetPos)))
FoundOffsets.Add(*(int*)(StartAddress + i + OffsetPos));
}
}
return FoundOffsets.ToArray();
}
public static unsafe int[] SequentedByteOffsetScanner(int StartAddress, int Length, string bMask, string szMask, int OffsetPos)
{
List<int> FoundOffsets = new List<int>();
//Creating Byte Array
byte[] ByteMask = new byte[szMask.Length];
int State = 0;
for (int i = 0; i < bMask.Length; i++)
{
if (bMask[i] == 'x')
{
ByteMask[State] = byte.Parse(bMask.Substring(i + 1, 2), System.Globalization.NumberStyles.HexNumber);
State++;
}
}
//Searching Byte Pattern
for (int i = 0; i < Length; i++)
{
bool Found = true;
for (int j = 0; j < ByteMask.Length; j++)
{
Found = Found && ((ByteMask[j] == *(byte*)(StartAddress + i + j)) || szMask[j] == '?');
}
if (Found)
{
if (!FoundOffsets.Contains((int)(*(byte*)(StartAddress + i + OffsetPos))))
FoundOffsets.Add((int)(*(byte*)(StartAddress + i + OffsetPos)));
}
}
return FoundOffsets.ToArray();
}
//######################### Find Addys #####################
//******************Pointers
public static unsafe uint FindWeaponMgr(uint CShell)
{
uint WeaponMgr = FindPattern((int)CShell, 0xFFFFFF, @"\x8B\x4F\x04\xA1\x00\x00\x00\x00\x85\xC0\x8B\x51\x04\x8B\x6A\x04", "xxxx????xxxxxxxx");
WeaponMgr = (*(uint*)(WeaponMgr + 4)) - CShell;
return WeaponMgr;
}
public static unsafe uint FindCShellPointer(uint CShell)
{
uint CShell_Pointer = FindPattern((int)CShell, 0xFFFFFF, @"\xc6\x01\x01\x8b\x15\x00\x00\x00\x00\x8b\x82\x00\x00\x00\x00\x8B", "xxxxx????xx????x");
CShell_Pointer = (*(uint*)(CShell_Pointer + 5)) - CShell;
return CShell_Pointer;
}
public static unsafe uint FindBasicPlayerInfo(uint CShell)
{
uint BasicPlayerInfo = FindPattern((int)CShell, 0xFFFFFF, @"\x8B\x0D\xD8\x52\xF6\x10\x83\xC4\x04\x69\xC0\xA8\x00\x00\x00\xD9\x9C\x08\x88\x00\x00\x00\x8B\x4C\x24\x30\x3B\xCB", "xx????xxxxx????xxx????xxx?xx");
BasicPlayerInfo = (*(uint*)(BasicPlayerInfo + 2)) - CShell;
return BasicPlayerInfo;
}
public static unsafe uint FindPushToConsole(uint CShell)
{
uint PTC = FindPattern((int)CShell, 0xFFFFFF, @"\x8B\x0D\x44\xA2\x59\x10\x8B\x91\x04\x02\x00\x00\x68\xB8\x55\x4C\x10\xFF\xD2\x83\xC4\x04\x53\xE8\x46\xF3\xFD\xFF\x8B\xC8\xE8\xBF\x5F\x2F\x00", "xx????xx????x????xxxxxxx????xxx????");
PTC = (*(uint*)(PTC + 2)) - CShell;
return PTC;
}
public static unsafe uint FindBypass(uint CShell)
{
uint ByPass = FindPattern((int)CShell, 0xFFFFFF, @"\xE8\xF6\x06\xE9\xFF\x8B\xF0\x83\xC4\x04\x85\xF6\x0F\x84\xE2\x01\x00\x00\xD9\x86\x3C\x0C\x00\x00\x0F\xB6\x86\x6C\x08\x00\x00\xD9\x5C\x24\x08\x89\x44\x24\x04\xD9\x86\x40\x0C\x00\x00\x57", "x????xxxx?xxxx????xx????xxx????xxx?xxx?xx????x");
return ByPass - CShell;
}
public static unsafe uint FindSecondBypass(uint CShell)
{
uint ByPass = FindPattern((int)CShell, 0xFFFFFF, @"\x66\x8B\x54\x24\x04\x33\xC0\x66\x85\xD2\x7C\x26\x56\x8B\x35\x50\xAA\xFD\x10", "xxxx?xxxxxx?xxx????");
return ByPass - CShell;
}
public static unsafe uint FindWallHack(uint CShell)
{
uint WallHack = FindPattern((int)Main.GetModuleHandle("crossfire.exe"), 0x2D7000, @"\xB8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x8B\x06\x8B\x50\x18", "x????x????xxxxx");
WallHack = *(uint*)(WallHack + 1);
WallHack += 0xA4;
return WallHack;
}
public static unsafe uint FindMemorySeeGhost(uint CShell)
{
uint WallHack = FindPattern((int)Main.GetModuleHandle("crossfire.exe"), 0x2D7000, @"\xB8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x8B\x06\x8B\x50\x18", "x????x????xxxxx");
WallHack = *(uint*)(WallHack + 1);
WallHack += 0xB8;
return WallHack;
}
public static unsafe uint FindDamageZone(uint CShell)
{
uint DamageZoneMgr = FindPattern((int)CShell, 0xFFFFFF, "\x68\x00\x00\x00\x00\x8D\x4C\x24\x24\x51\x8D\x54\x24\x34", "x????xxxxxxxxx");
DamageZoneMgr = *(uint*)(DamageZoneMgr + 0x01);
return DamageZoneMgr;
}
//*****************Offsets
public static unsafe void BetaOffsetSearch(uint CShell)
{
int[] Offsets = SequentedByteOffsetScanner((int)CShell, 0xFFFFFF, @"\xD9\x5C\x24\x24\x8B\x0D\xD4\x52\xF6\x10\xD9\x44\x24\x24\x8B\x15\xD8\x52\xF6\x10\x83\xC4\x04\x69\xC9\xA8\x00\x00\x00\xD9\x5C\x11\x08", "xxx?xx????xxx?xx????xx?xx????xxx?", 32);
for (int i = 0; i < Offsets.Length; i++)
Console.WriteLine("Found Offset(C4DefuTimePattern): 0x" + Storage.DecToHex(Offsets[i]));
}
//WeaponMgr
public static unsafe uint FindReloadAnimRatio(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x8B\x0D\xA4\xC5\xFC\x10\x53\x8D\x3C\xB1\xFF\x15\x54\xC4\x4D\x10\xD9\x5C\x24\x14\xD9\x44\x24\x14\x8B\x07\xD9\x98\x3C\x0C\x00\x00\x83\xC4\x04", "xx????xxxxxx????xxx?xxx?xxxx????xx?", 28);
return (uint)Offsets[1];
}
public static unsafe uint FindChangeWeaponAnimRatio(uint CShell)
{
uint Value = FindPattern((int)CShell, 0xFFFFFF, @"\x8B\x0D\xA4\xC5\xFC\x10\x53\x8D\x3C\xB1\xFF\x15\x54\xC4\x4D\x10\xD9\x5C\x24\x14\x8B\x17\xD9\x44\x24\x14\x8B\x3D\xE0\xC4\x4D\x10\xD9\x9A\x40\x0C\x00\x00\x83\xC4\x04", "xx????xxxxxx????xxx?xxxxx?xx????xx????xx?");
return (*(uint*)(Value + 34));
}
public static unsafe uint FindLeftClickAttributes(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x2B\xC1\xC1\xF8\x02\x3B\xF0\x72\x0C\xFF\x15\xE0\xC4\x4D\x10\x8B\x0D\xA4\xC5\xFC\x10\x8B\x04\xB1\x83\x88\xEC\x0A\x00\x00\x01", "xxxx?xxxxxx????xx????xxxxx?????", 26);
return (uint)Offsets[0];
}
public static unsafe uint FindRightClickAttributes(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x2B\xC1\xC1\xF8\x02\x3B\xF0\x72\x0C\xFF\x15\xE0\xC4\x4D\x10\x8B\x0D\xA4\xC5\xFC\x10\x8B\x04\xB1\x83\x88\xEC\x0A\x00\x00\x01", "xxxx?xxxxxx????xx????xxxxx?????", 26);
return (uint)Offsets[1];
}
public static unsafe uint FindZoomAttributes(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x2B\xC1\xC1\xF8\x02\x3B\xF0\x72\x0C\xFF\x15\xE0\xC4\x4D\x10\x8B\x0D\xA4\xC5\xFC\x10\x8B\x04\xB1\x83\x88\xEC\x0A\x00\x00\x01", "xxxx?xxxxxx????xx????xxxxx?????", 26);
return (uint)Offsets[2];
}
public static unsafe uint FindZoomAction(uint CShell)
{
uint Value = FindPattern((int)CShell, 0xFFFFFF, @"\x8B\x0D\xA4\xC5\xFC\x10\x55\x8D\x1C\xB1\xFF\x15\x54\xC4\x4D\x10\xD9\x5C\x24\x14\xD9\x44\x24\x14\x8B\x0B\xD9\x9C\xB9\x20\x39\x00\x00", "xx????xxxxxx????xxx?xxx?xxxxx????");
return (*(uint*)(Value + 29));
}
public static unsafe uint FindRange(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\xD9\x44\x24\x14\x8B\x06\xDC\x0D\x50\xFC\x54\x10\x83\xC4\x04\xD9\x5C\x24\x10\xD9\x44\x24\x10\xD9\x98\x0C\x08\x00\x00", "xxx?xxxx????xx?xxx?xxx?xx????", 25);
return (uint)Offsets[0];
}
public static unsafe uint FindAiModeRange(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\xD9\x44\x24\x14\x8B\x06\xDC\x0D\x50\xFC\x54\x10\x83\xC4\x04\xD9\x5C\x24\x10\xD9\x44\x24\x10\xD9\x98\x0C\x08\x00\x00", "xxx?xxxx????xx?xxx?xxx?xx????", 25);
return (uint)Offsets[1];
}
public static unsafe uint FindDamageVariantionFactor(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x8D\x34\xA9\xFF\x15\x54\xC4\x4D\x10\xD9\x5C\x24\x14\xD9\x44\x24\x14\x8B\x16\xD9\x9A\x38\x08\x00\x00", "xxxxx????xxx?xxx?xxxx????", 21);
return (uint)Offsets[2];
}
public static unsafe uint FindAmmoDamage(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x8D\x34\xA9\xFF\x15\x54\xC4\x4D\x10\xD9\x5C\x24\x14\xD9\x44\x24\x14\x8B\x06\xD9\x98\x1C\x08\x00\x00", "xxxxx????xxx?xxx?xxxx????", 21);
return (uint)Offsets[0];
}
//BasicPlayerInfo
public static unsafe uint FindC4DefuseTime(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x8B\x15\xD4\x52\xF6\x10\xD9\x44\x24\x24\xA1\xD8\x52\xF6\x10\x83\xC4\x04\x69\xD2\xA8\x00\x00\x00\xD9\x9C\x02\x80\x00\x00\x00", "xx????xxx?x????xx?xx????xxx????", 27);
return (uint)Offsets[0];
}
public static unsafe uint FindCharacterHiddenWalkAlpha(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x8B\x15\xD4\x52\xF6\x10\xD9\x44\x24\x24\xA1\xD8\x52\xF6\x10\x83\xC4\x04\x69\xD2\xA8\x00\x00\x00\xD9\x9C\x02\x80\x00\x00\x00", "xx????xxx?x????xx?xx????xxx????", 27);
return (uint)Offsets[1];
}
public static unsafe uint FindCharacterHiddenRunAlpha(uint CShell)
{
int[] Offsets = SequentedOffsetScanner((int)CShell, 0xFFFFFF, @"\x8B\x15\xD4\x52\xF6\x10\xD9\x44\x24\x24\xA1\xD8\x52\xF6\x10\x83\xC4\x04\x69\xD2\xA8\x00\x00\x00\xD9\x9C\x02\x80\x00\x00\x00", "xx????xxx?x????xx?xx????xxx????", 27);
return (uint)Offsets[1] + 4;
}
public static unsafe uint FindMovementWalkRate(uint CShell)
{
int[] Offsets = SequentedByteOffsetScanner((int)CShell, 0xFFFFFF, @"\xD9\x5C\x24\x24\x8B\x0D\xD4\x52\xF6\x10\xD9\x44\x24\x24\x8B\x15\xD8\x52\xF6\x10\x83\xC4\x04\x69\xC9\xA8\x00\x00\x00\xD9\x5C\x11\x08", "xxx?xx????xxx?xx????xx?xx????xxx?", 32);
return (uint)Offsets[0];
}
//PTC
public static unsafe uint FindPushToConsoleOffset(uint CShell)
{
uint PTC = FindPattern((int)CShell, 0xFFFFFF, @"\x8B\x0D\x44\xA2\x59\x10\x8B\x91\x04\x02\x00\x00\x68\xB8\x55\x4C\x10\xFF\xD2\x83\xC4\x04\x53\xE8\x46\xF3\xFD\xFF\x8B\xC8\xE8\xBF\x5F\x2F\x00", "xx????xx????x????xxxxxxx????xxx????");
PTC = (*(uint*)(PTC + 8));
return PTC;
}
//###################################################################################################
public static void LogAddresses(uint CShell)
{
//*******************************Define Offsets
//WeaponMgr
Console.WriteLine("Start Searching For Offsets");
Console.WriteLine(">>>>WeaponMgr<<<<");
Storage.SetOffset((int)FindReloadAnimRatio(CShell), "ReloadAnimRatio"); //float
Storage.SetOffset((int)FindChangeWeaponAnimRatio(CShell), "ChangeWeaponAnimRatio"); //float
Storage.SetOffset((int)FindLeftClickAttributes(CShell), "LeftClickAttributes"); //int
Storage.SetOffset((int)FindRightClickAttributes(CShell), "RightClickAttributes"); //int
Storage.SetOffset((int)FindZoomAttributes(CShell), "ZoomAttributes"); //int
Storage.SetOffset((int)FindZoomAction(CShell), "ZoomAction"); //float[13] Index[10] = Int
/*
Storage.SetOffset(0x3B20, "ThrowVelocity"); //float
Storage.SetOffset(0x3B24, "ThrowAngle"); //float
Storage.SetOffset(0x3B28, "ThrowAirRes"); //float
Storage.SetOffset(0x3B2C, "ThrowTime"); //float (Grenade Delay)
*/
Storage.SetOffset((int)PatternScanner.FindRange(CShell), "Range"); //float
Storage.SetOffset((int)PatternScanner.FindAiModeRange(CShell), "AiModeRange"); //float
Storage.SetOffset((int)PatternScanner.FindAmmoDamage(CShell), "AmmoDamage"); //float
Storage.SetOffset(0x820, "AiModeAmmoDamage"); //float
Storage.SetOffset((int)PatternScanner.FindDamageVariantionFactor(CShell), "DamageVariantionFactor"); //float
/*
Storage.SetOffset(0xA5C, "KnifeNormalRange"); //float[3]
Storage.SetOffset(0xA80, "KnifeBigshotRange"); //float[3]
Storage.SetOffset(0xA9C, "KnifeNormalRange2"); //float[3]
Storage.SetOffset(0xAC0, "KnifeBigshotRange2"); //float[3]
Storage.SetOffset(0xA70, "KnifeNormalAniRate"); //float[3]
Storage.SetOffset(0xA98, "KnifeBigshotAniRate"); //float[3]
Storage.SetOffset(0xAB8, "KnifeNormalAniRate2"); //float[3]
Storage.SetOffset(0xADC, "KnifeBigshotAniRate2"); //float[3]
Storage.SetOffset(0xA68, "KnifeNormalAngle"); //float[3]
Storage.SetOffset(0xA8C, "KnifeBigshotAngle"); //float[3]
Storage.SetOffset(0xAA8, "KnifeNormalAngle2"); //float[3]
Storage.SetOffset(0xACC, "KnifeBigshotAngle2"); //float[3]
*/
/*
Storage.SetOffset(0xC04, "KnifeNormalAmmoDamage"); //float[3]
Storage.SetOffset(0xC10, "KnifeBigshotAmmoDamage"); //float[3]
Storage.SetOffset(0xC1C, "KnifeNormalAmmoDamage2"); //float[3]
Storage.SetOffset(0xC28, "KnifeBigshotAmmoDamage2"); //float[3]
*/
/*
Storage.SetOffset(0x352C, "BulletPosOffset"); //float[4]
Storage.SetOffset(0x353C, "ShotReactYaw"); //float[9]
Storage.SetOffset(0x370C, "ShotReactPitch"); //float[9]
Storage.SetOffset(0x11CC, "DatailReactYawShot"); //float[9]
Storage.SetOffset(0x1064, "DatailReactPitchShot"); //float[9]
Storage.SetOffset(0xEFC, "DetailPerturbShot"); //float[9]
Storage.SetOffset(0x540, "PerturbMin"); //float[9]
Storage.SetOffset(0x6A8, "PerturbMax"); //float[9]
*/
Console.WriteLine(">>>>Basic Player Info<<<<");
//BasicPlayerInfo
Storage.SetOffset((int)FindC4DefuseTime(CShell), "C4DefuseTime"); //float
Storage.SetOffset(0x88, "CharacterHiddenAlpha"); //float
Storage.SetOffset((int)FindCharacterHiddenWalkAlpha(CShell), "CharacterHiddenWalkAlpha"); //float
Storage.SetOffset((int)FindCharacterHiddenRunAlpha(CShell), "CharacterRunAlpha"); //float
Storage.SetOffset(0xC, "MovementDuckWalkRate"); //float
Storage.SetOffset((int)FindMovementWalkRate(CShell), "MovementWalkRate"); //float
Storage.SetOffset(0x84, "MaxCanDefuseDistance"); //float
//PlayerPointer
//Storage.SetOffset(0x64C, "FlyOffset"); //float
//PTC
Console.WriteLine(">>>>PushToConsole<<<<");
Storage.SetOffset((int)FindPushToConsoleOffset(CShell), "PTCOffset");
}
}
}