#include <windows.h>
#include <psapi.h>
//Maximum processes
#define PROCMAXCOUNT 4096
int main()
{
int aa,bb,mode=0;
int IsStarCraft; // Used to check if a process is StarCraft
int AddrCount; // Used to iterate through the 11 memory addresses
DWORD pIDs[PROCMAXCOUNT],pIDssz,pIDscount,Modssz,Modscount;
HANDLE proch;
HMODULE Mods[4096];
unsigned char mbasename[MAX_PATH];
MODULEINFO minfo;
char ProcessName[] = "StarCraft.exe"; // Process Name
int disp = 0;
BYTE ChatBuffer[11][255];
int SCProcID; // StarCraft Process ID
HANDLE hProcess;
BYTE bBuffer[78];
DWORD dwBaseAddress[] = {0x00665852, 0x00664FCE, 0x006650A8, 0x00665182, 0x0066525C, 0x00665336, 0x00665410, 0x006654EA, 0x006655C4, 0x0066569E, 0x00665778};
DWORD lSize = 78;
DWORD lRead = 0;
// Enumerate processes
if (EnumProcesses(pIDs,sizeof(pIDs),&pIDssz)==FALSE)
{
printf("Error getting process list.\n");
return 1;
}
// Show processes info
pIDscount=pIDssz/sizeof(DWORD);
for (aa=0;aa<pIDscount;aa++)
{
// Open process
if (!(proch=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pIDs[aa])))
{ continue; }
// Enumerate modules
if (!EnumProcessModules(proch,Mods,sizeof(HMODULE)*4096,&Modssz))
{ continue; }
Modscount=Modssz/sizeof(DWORD);
// First module representes own process
if (!mode) { Modscount=1; }
for (bb=0;bb<Modscount;bb++)
{
GetModuleBaseName(proch,Mods[bb],mbasename,MAX_PATH/sizeof(unsigned char));
//Compares process name and "StarCraft.exe"
if ((strcmpi(ProcessName,mbasename)) == 0)
{
IsStarCraft = 1;
SCProcID = pIDs[aa];
}
}
}
while (IsStarCraft == 1) // Checks if process name is StarCraft.exe
{
//printf("Process ID: %i\n",SCProcID);
for(AddrCount=0;AddrCount<10;AddrCount++)
{
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, SCProcID);
if (hProcess == NULL)
{
printf("Error opening process with OpenProcess()\n");
IsStarCraft = 0;
}
if (ReadProcessMemory(hProcess, (void*)dwBaseAddress[AddrCount], (char *)bBuffer, lSize, &lRead))
{
CloseHandle(hProcess);
memset(bBuffer, '\0', sizeof(bBuffer));
if ((strcmpi(ChatBuffer[AddrCount], bBuffer)) != 0)
{
strcpy(ChatBuffer[AddrCount], bBuffer);
printf("0x%i: %s\n",dwBaseAddress[AddrCount], ChatBuffer[AddrCount]);
}
}
else { printf("ReadProcessMemory failed.\n"); }
}
} // End of IsStarCraft
system("PAUSE");
return 0;
}