Code:
header.h
#include <Windows.h>
#include <string>
using namespace std;
typedef unsigned int uint;
void WorkFunc();
void ReadProcMem(void *pAddress, void *pMem, int iSize);
void OpenConsole();
enum ObjectManager
{
CurMgrPointer = 0x9BE7E0,
CurMgrOffset = 0x463C,
NextObject = 0x3C,
FirstObject = 0xC0,
LocalGUID = 0xC8
};
Main.cpp
#include "header.h"
DWORD dwThreadId;
BOOL WINAPI DllMain (HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
if(reason == DLL_PROCESS_ATTACH)
{
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkFunc,NULL, 0, &dwThreadId);
OpenConsole();
}
if(reason == DLL_PROCESS_DETACH)
{
}
return (TRUE);
}
void WorkFunc()
{
while(TRUE)
{
if(GetAsyncKeyState(0x43))
{
system("CLS");
uint BaseAddress = (uint)GetModuleHandle(0);
uint ObjectPointer;
ReadProcMem((LPVOID)(BaseAddress + CurMgrPointer),&ObjectPointer,4);
uint ObjectPointerOffset;
ReadProcMem((LPVOID)(ObjectPointer + CurMgrOffset),&ObjectPointerOffset,4);
uint FirstItem;
ReadProcMem((LPVOID)(ObjectPointerOffset + FirstObject),&FirstItem,4);
printf("CurMgrPointer: %X\n",ObjectPointer);
printf("Object Manager: %X\n",ObjectPointerOffset);
printf("First Object: %X\n",FirstItem);
uint BaseObject = FirstItem;
int ObjectCount = 0;
while (BaseObject != 0 && BaseObject % 2 == 0)
{
ObjectCount++;
DWORD nm;
char name[100]="";
ReadProcMem((LPVOID)(BaseObject + 0x1CC),&nm, 4);
ReadProcMem((LPVOID)(nm + 0xB4),&nm, 4);
ReadProcMem((LPVOID)(nm),&name[0], 100*sizeof(char));
printf("Name: %s\n",name);
ReadProcMem((LPVOID)(BaseObject + NextObject),&BaseObject,4);
}
printf("Total ObjectCount = %i\n",ObjectCount);
}
}
}
void ReadProcMem(void *pAddress, void *pMem, int iSize)
{
HANDLE hProc = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ, FALSE, GetCurrentProcessId());
DWORD dwOld;
VirtualProtectEx(hProc, pAddress, iSize, PAGE_EXECUTE_READWRITE, &dwOld);
ReadProcessMemory(hProc, pAddress, pMem, iSize, 0);
CloseHandle(hProc);
}
console.cpp
#include "header.h"
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <io.h>
void OpenConsole()
{
int outHandle, errHandle, inHandle;
FILE *outFile, *errFile, *inFile;
AllocConsole();
CONSOLE_SCREEN_BUFFER_INFO coninfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
coninfo.dwSize.Y = 9999;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
outHandle = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),0);
errHandle = _open_osfhandle((long)GetStdHandle(STD_ERROR_HANDLE),0);
inHandle = _open_osfhandle((long)GetStdHandle(STD_INPUT_HANDLE),0);
outFile = _fdopen(outHandle, "w" );
errFile = _fdopen(errHandle, "w");
inFile = _fdopen(inHandle, "r");
*stdout = *outFile;
*stderr = *errFile;
*stdin = *inFile;
setvbuf( stdout, NULL, _IONBF, 0 );
setvbuf( stderr, NULL, _IONBF, 0 );
setvbuf( stdin, NULL, _IONBF, 0 );
std::ios::sync_with_stdio();
}