Skip to content
MPGHThe Dark Arts
/
RegisterLog in
Forum
Community
What's NewLatest posts across the boardTrendingHottest threads right nowSubscribedThreads you follow
Discussion
GeneralIntroductionsEntertainmentDebate FortFlaming & Rage
Board
News & AnnouncementsMPGH TimesSuggestions & HelpGiveaways
More Sections
Art & Graphic DesignProgrammingHackingCryptocurrency
Hacks & Cheats
Games
ValorantCS2 / CS:GOCall of Duty / WarzoneFortniteApex LegendsEscape From Tarkov
+14 moreLeague of LegendsGTA VMinecraftRustROTMGBattlefieldTroveBattleOnCombat ArmsCrossFireBlackshotRuneScapeDayZDead by Daylight
Resources
Game Hacking TutorialsReverse EngineeringGeneral Game HackingAnti-CheatConsole Game Hacking
Tools
Game Hacking ToolsTrainers & CheatsHack/Release NewsNew
Submit a release →Share your cheat, tool, or config with the community.
AINEW
AI Tools
General & DiscussionPrompt EngineeringLLM JailbreaksHotAI Agents & AutomationLocal / Open Models
AI × Gaming
AI Aimbots & VisionML Anti-CheatGame Bots & Automation
Create
AI Coding / Vibe CodingAI Art & MediaAI Voice & TTS
The AI frontier →Where game hacking meets modern machine learning. Jump in.
Marketplace
Buy & Sell
SellingBuyingTradingUser Services
Trust & Safety
Middleman LoungeMarketplace TalkVouch Copy Profiles
Money
Cryptocurrency TalkCurrency ExchangeWork & Job Offers
Start selling →List accounts, services, and goods. Use the middleman to trade safe.
MPGH The Dark Arts

A community for offensive security research, reverse engineering, and AI.

Community

ForumMarketplaceSearch

Account

RegisterLog in

Legal

Privacy PolicyForum RulesHelp & FAQ
© 2026 MPGH · All rights reserved.Built by the community, for the community. For educational purposes onlyContent is shared for security research and education — we don't condone illegal use. You're responsible for complying with applicable laws. Use at your own risk.
Home › Forum › MultiPlayer Game Hacks & Cheats › Combat Arms Hacks & Cheats › Combat Arms Hack Coding / Programming / Source Code › Simple MemoryMgr Class

Simple MemoryMgr Class

Posts 1–15 of 22 · Page 1 of 2
CO
CodeDemon
Simple MemoryMgr Class
I was bored, pretty much it easily allows you to manage all your addresses.

There are some things you can do to easily make this better(Get the original bytes for the addresses automatically), but hey its for the public

Credits: mmbob, nubzgetskillz

Code:
/*===============================|
|Simple MemoryMgr Class			 |
|								 |
|By CodeDemon					 |
|Credits: mmbob, nubzgetskillz	 |
|===============================*/
#include <Windows.h>

#define ON true
#define OFF false
#define ingamecheck 0x37829B4C

struct memory{
	char * name;
	bool enabled;
	int address;
	int size;
	char * original;
	char * newbytes;
};

class MemoryMgr{
	public:
		memory mem[99]; //change 99 to however many addresses you have as to not allocate too much memory

		void AddOffset(char * name, int address, char * original, char * newbytes , int size);
		void UnPatchAll();
		void PatchBytes(char * name, bool onoff);
	private:
		int adrcount;
};

void MemoryMgr::AddOffset(char * name, int address, char * original, char * newbytes, int size)
{
	mem[adrcount].address = address;
	mem[adrcount].name = name;
	mem[adrcount].size = size;
	mem[adrcount].original = original;
	mem[adrcount].newbytes = newbytes;
	mem[adrcount].enabled = false;
	adrcount++;
}

void MemoryMgr::UnPatchAll()
{
	for(int i = 0; i<(sizeof(mem)/sizeof(memory)); i++){
		memcpy((LPVOID)mem[i].address,mem[i].original,mem[i].size);
		mem[i].enabled = false;
	}
}


void MemoryMgr::PatchBytes(char * name, bool onoff)
{
	for(int i = 0; i<(sizeof(mem)/sizeof(memory)); i++){
		if(mem[i].name == name){
			if(*(int*)ingamecheck == 1){
				if(onoff == true){
					memcpy((LPVOID)mem[i].address,mem[i].newbytes,mem[i].size);
					mem[i].enabled = true;
				} else {
					memcpy((LPVOID)mem[i].address,mem[i].original,mem[i].size);
					mem[i].enabled = false;
				}
			} else {
				memcpy((LPVOID)mem[i].address,mem[i].original,mem[i].size);
			}
		}
	}
}
How to use:

Paste the code into a new header file.

Create a new instance of the class, preferably where your DLL main function is, or where your hacks are. You can also extern it if that will be easier for you.
Code:
MemoryMgr mempatch
In your DLL main, initiate the addresses, this is done, so that you dont initiate addresses more than once.

Code:
bool APIENTRY DllMain(HMODULE hMod, DWORD pReason, LPVOID lpReserved)
{
	if (pReason == DLL_PROCESS_ATTACH)
	{

		mempatch.AddOffset("NoReload", 0x374BB8F4, "\x0F\x84\xB1\x01\x00\x00", "\x90\x90\x90\x90\x90\x90", 6);
		mempatch.AddOffset("SuperBullets", 0x374B65D6, "\x0F\x94\xC0", "\x90\x90\x90", 3);
	}

	return true;

}
Use:

Code:
 mempatch.PatchBytes("HACKNAME",ON);
or

Code:
 mempatch.PatchBytes("HACKNAME",OFF);
The function automatically checks if bytes can be patched(patches only if in game), and patches them accordingly.
#1 · 15y ago
DE
Departure
Nice work, I made something similar awhile ago but nothing to do with hacks, just similar idea of an array of patches... A lot of my coding is based around reverse engineering so it was for creating a simple loader which patches the target when loaded in a Suspended state.

[highlight=Delphi]
(* ************************************************** ***
Unit : uMultiMemPatch
Author : Departure
Url : cheesydoodle.com

Info:
An Easy way to patch your Target in memory,
Just add your VA and your array of bytes,
it will load the target in suspended mode
write the bytes to address(s) given and then
resume the thread with new Patches.

Usage:
uses
uMultiMemPatch;
Var
MyArrayOfPatches: APatchRec;
Being
AddPatch($0040107B,[$90,$90,$90],MyArrayOfPatches);
AddPatch($004010B0,[$90,$EB],MyArrayOfPatches);
WritePatches('CrackMe.exe', MyArrayOfPatches);
MyArrayOfPatches:= Nil;
end;
************************************************** *** *)
unit uMultiMemPatch;

interface

uses
Windows;

type
TPatchRec = Record
dwAddress: Dword;
baPatches: Array of Byte;
end;

type
APatchRec = Array of TPatchRec;

Procedure AddPatch(dwAddress: Dword; aPatches: Array of byte; var ArrayRecord: APatchRec);

implementation

Procedure AddPatch(dwAddress: Dword; aPatches: Array of byte; var ArrayRecord: APatchRec);
var
Patch: TPatchRec;
i: Integer;
begin
{Set the Address}
Patch.dwAddress:= dwAddress;
{Set the Length of Patches}
SetLength(Patch.baPatches, Length(aPatches));
{Add the Patches}
for i:= low(aPatches) to high(aPatches) do
Patch.baPatches[i]:= aPatches[i];

{Check if Array is already Built}
if ArrayRecord = Nil then
SetLength(ArrayRecord,1)
else
SetLength(ArrayRecord,Length(ArrayRecord) +1);
{Add out Patches to the Array}
ArrayRecord[high(ArrayRecord)]:= Patch;
end;

Function WritePatches(sFileName: String; ArrayPatches: APatchRec):Boolean;
var
{ Startup and variables used in procedure }
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
Write: Cardinal;
i: Integer;
begin
Result:= False;
{ Intinilize }
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);

{ Create Process in a suspended state }
CreateOK := CreateProcess(PChar(sFileName),nil, nil, nil,False,CREATE_SUSPENDED,nil, nil, StartInfo, ProcInfo);

{ check to see if successful }
if CreateOK then
try
Begin
for i:= low(ArrayPatches) to high(ArrayPatches) do
{ Write MultiPatch to memory }
WriteProcessMemory(ProcInfo.hProcess,ptr(ArrayPatc hes[i].dwAddress),@arrayPatches[i].baPatches,Length(ArrayPatches[i].baPatches),Write);
{ Resume the thread }
ResumeThread(ProcInfo.hThread);
CloseHandle(ProcInfo.hProcess);
Result:= True;
end;
except
Result:= False;
end;
end;

end.
[/highlight]

Anyway great work, keep it up
#2 · 15y ago
supercarz1991
supercarz1991
Pretty cool, if I had a working hack, id probably use this haha
#3 · 15y ago
CO
CodeDemon
Quote Originally Posted by Departure View Post
Nice work, I made something similar awhile ago but nothing to do with hacks, just similar idea of an array of patches... A lot of my coding is based around reverse engineering so it was for creating a simple loader which patches the target when loaded in a Suspended state.

[highlight=Delphi]
(* ************************************************** ***
Unit : uMultiMemPatch
Author : Departure
Url : cheesydoodle.com

Info:
An Easy way to patch your Target in memory,
Just add your VA and your array of bytes,
it will load the target in suspended mode
write the bytes to address(s) given and then
resume the thread with new Patches.

Usage:
uses
uMultiMemPatch;
Var
MyArrayOfPatches: APatchRec;
Being
AddPatch($0040107B,[$90,$90,$90],MyArrayOfPatches);
AddPatch($004010B0,[$90,$EB],MyArrayOfPatches);
WritePatches('CrackMe.exe', MyArrayOfPatches);
MyArrayOfPatches:= Nil;
end;
************************************************** *** *)
unit uMultiMemPatch;

interface

uses
Windows;

type
TPatchRec = Record
dwAddress: Dword;
baPatches: Array of Byte;
end;

type
APatchRec = Array of TPatchRec;

Procedure AddPatch(dwAddress: Dword; aPatches: Array of byte; var ArrayRecord: APatchRec);

implementation

Procedure AddPatch(dwAddress: Dword; aPatches: Array of byte; var ArrayRecord: APatchRec);
var
Patch: TPatchRec;
i: Integer;
begin
{Set the Address}
Patch.dwAddress:= dwAddress;
{Set the Length of Patches}
SetLength(Patch.baPatches, Length(aPatches));
{Add the Patches}
for i:= low(aPatches) to high(aPatches) do
Patch.baPatches[i]:= aPatches[i];

{Check if Array is already Built}
if ArrayRecord = Nil then
SetLength(ArrayRecord,1)
else
SetLength(ArrayRecord,Length(ArrayRecord) +1);
{Add out Patches to the Array}
ArrayRecord[high(ArrayRecord)]:= Patch;
end;

Function WritePatches(sFileName: String; ArrayPatches: APatchRec):Boolean;
var
{ Startup and variables used in procedure }
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
Write: Cardinal;
i: Integer;
begin
Result:= False;
{ Intinilize }
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);

{ Create Process in a suspended state }
CreateOK := CreateProcess(PChar(sFileName),nil, nil, nil,False,CREATE_SUSPENDED,nil, nil, StartInfo, ProcInfo);

{ check to see if successful }
if CreateOK then
try
Begin
for i:= low(ArrayPatches) to high(ArrayPatches) do
{ Write MultiPatch to memory }
WriteProcessMemory(ProcInfo.hProcess,ptr(ArrayPatc hes[i].dwAddress),@arrayPatches[i].baPatches,Length(ArrayPatches[i].baPatches),Write);
{ Resume the thread }
ResumeThread(ProcInfo.hThread);
CloseHandle(ProcInfo.hProcess);
Result:= True;
end;
except
Result:= False;
end;
end;

end.
[/highlight]

Anyway great work, keep it up
Thanks! Nice Delphi btw
#4 · 15y ago
supercarz1991
supercarz1991
Quote Originally Posted by CodeDemon View Post
Thanks! Nice Delphi btw
I know this is a lil off topic but where can I find a download link for the delphi programs to write it? (I've been using note pad to make a uce >…<)
#5 · 15y ago
AT
AtomicStone
Useful Thanks.
#6 · 15y ago
WH
whit
Nice classes bro
#7 · 15y ago
Alessandro10
Alessandro10
Hahahahaha, I had seen it somewhere.
#8 · 15y ago
whatup777
whatup777
Good job .
#9 · 15y ago
CO
CodeDemon
Quote Originally Posted by Alessandro10 View Post
Hahahahaha, I had seen it somewhere.
Ummm are you saying I leeched this?
#10 · 15y ago
Alessandro10
Alessandro10
Quote Originally Posted by CodeDemon View Post
Ummm are you saying I leeched this?
No, I said I've seen something like that.
#11 · 15y ago
D-Vid the DBag
D-Vid the DBag
Quote Originally Posted by Alessandro10 View Post
No, I said I've seen something like that.
Well, I assure you that this was ALL CD.
I was on MSN when he was talking about it.

...and I am sure glad that you've changed your avatar, cuz that's homo to be stealing other people's avatars.
#12 · 15y ago
Nubzgetkillz
Nubzgetkillz
Good job. This can be used in very obscure ways like to suck your dick!!!
#13 · 15y ago
_F
_Fk127_
Quote Originally Posted by D-Vid the DBag View Post


Well, I assure you that this was ALL CD.
I was on MSN when he was talking about it.

...and I am sure glad that you've changed your avatar, cuz that's homo to be stealing other people's avatars.
He stole UnknownCoder's this time xD
#14 · 15y ago
D-Vid the DBag
D-Vid the DBag
Quote Originally Posted by _Fk127_ View Post
He stole UnknownCoder's this time xD
Lolz. I don't give a shit if he steals anyone else's, but not my little buddy, CodeDemon's avatar. He BETTER not steal mine tho.
#15 · 15y ago
Posts 1–15 of 22 · Page 1 of 2

Post a Reply

Tags for this Thread

None