Skip to content

Instantly share code, notes, and snippets.

@LuxXx
Created January 28, 2020 22:42
Show Gist options
  • Save LuxXx/488fdf1c962595a243586fbf3e20d48e to your computer and use it in GitHub Desktop.
Save LuxXx/488fdf1c962595a243586fbf3e20d48e to your computer and use it in GitHub Desktop.
AddressGetter
/**
Made by David_Luchs 27.07.2015
[email protected]
Discord: lux#6470
http://forum.revival-gaming.net/index.php?page=Thread&postID=3270478#post3270478
**/
#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>
#include <Psapi.h>
#include <fstream>
//#define isGameLoaded *(bool*)(g_dwSAMP_Addr + 0xFD42C)
DWORD g_dwSAMP_Addr = NULL;
HMODULE hHandle;
bool dataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for (; *szMask; ++szMask, ++pData, ++bMask)
if (*szMask == 'x' && *pData != *bMask)
return false;
return (*szMask) == NULL;
}
DWORD findPattern(DWORD addr, DWORD len, BYTE *bMask, char * szMask)
{
for (DWORD i = 0; i < len; i++)
if (dataCompare((BYTE*)(addr + i), bMask, szMask))
return (DWORD)(addr + i);
return 0;
}
bool KeyPressed(BYTE key)
{
return ((GetAsyncKeyState(key)&(1 << 16)) != 0);
}
DWORD GetModuleLength(HMODULE hHandle)
{
MODULEINFO info;
GetModuleInformation(GetCurrentProcess(), hHandle, &info, sizeof(info));
return info.SizeOfImage;
}
DWORD getAddresses(char* pattern, char* mask) {
return findPattern((DWORD)hHandle, GetModuleLength(hHandle), (BYTE *)pattern,
mask);
}
void Log(char* text) {
char GTASettings[256];
char cUserName[100];
unsigned long nUserName = sizeof(cUserName);
GetUserNameA(cUserName, &nUserName);
sprintf_s(GTASettings, "C:/Users/%s/Documents/GTA San Andreas User Files/SAMP/chatlog.txt", cUserName);
std::ofstream log;
log.open(GTASettings, std::ios_base::app);
log << text;
log << "\n";
log.close();
//addMessageToChatWindow(0xFFFFFFFF, text);
}
void printAddress(char* pattern, char* mask, char* name) {
char szBuffer[1024];
sprintf_s(szBuffer, "Address of %s: samp.dll+%02x", name, getAddresses(pattern, mask) - g_dwSAMP_Addr);
Log(szBuffer);
}
void printStructAddress(char* pattern, char* mask, char* name, int shift) {
DWORD myOffset = shift + findPattern((DWORD)hHandle, GetModuleLength(hHandle), (BYTE *)pattern,
mask);
DWORD* structPtr = (DWORD*)myOffset;
//addMessageToChatWindow(0xFFFFFFFF, "%02x", (*structPtr) - g_dwSAMP_Addr);
char szBuffer[1024];
sprintf_s(szBuffer, "Address of %s: samp.dll+%02x", name, (*structPtr) - g_dwSAMP_Addr);
Log(szBuffer);
}
void printAddresses() {
printAddress("\x83\xEC\x08\x56\x57\x8B\x7C\x24\x14\x85\xFF\x8B\xF1\x7D\x18",
"xxxxxxxxxxxxxxx",
"FUNC_SAMP_SHOWDIALOG");
printAddress("\x55\x8B\xEC\x83\xE4\xF8\x81\xEC\x00\x00\x00\x00\x57\x33\xC0\xB9\x00\x00\x00\x00\x8D\x7C\x24\x08\xF3\xAB\x8B\x4D\x0C\x8D\x45\x10\x50\x51\x8D\x54\x24\x10\x52\xE8\x00\x00\x00\x00\x8A\x4C\x24\x14\x83\xC4\x0C\x84\xC9\x8D\x44\x24\x08\x74\x1B\xEB\x03\x8D\x49\x00\x8A\x08\x84\xC9\x7E\x08\x80\xF9\x20\x7D\x03\xC6\x00\x20\x8A\x48\x01\x40\x84\xC9\x75\xEA\x8B\x4D\x08\x8B\x81\x00\x00\x00\x00\x6A\x00\x50\x6A\x00\x8D\x54\x24\x14\x52\x6A\x08",
"xxxxxxxx????xxxx????xxxxxxxxxxxxxxxxxxxx????xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xxxxxxxxxxxx",
"FUNC_SAMP_ADDTOCHATWND");
printAddress("\x55\x56\x8B\xE9\x57\x8D\xBD\x00\x00\x00\x00\x8D\xB5\x00\x00\x00\x00\xB9\x00\x00\x00\x00",
"xxxxxxx????xx????x????",
"FUNC_PRINTCHAT");
printAddress("\x80\x39\x00\x74\x39",
"xxxxx",
"FUNC_SAMP_PLAYAUDIOSTR");
printAddress("\x80\x39\x00\x74\x09",
"xxxxx",
"FUNC_SAMP_STOPAUDIOSTR");
printAddress("\x64\xA1\x00\x00\x00\x00\x6A\xFF\x68\x00\x00\x00\x00\x50\xA1\x00\x00\x00\x00\x64\x89\x25\x00\x00\x00\x00\x81\xEC\x00\x00\x00\x00\x85\xC0",
"xx????xxx????xx????xxx????xx????xx",
"FUNC_SAMP_SENDCMD");
printAddress("\x64\xA1\x00\x00\x00\x00\x6A\xFF\x68\x00\x00\x00\x00\x50\x64\x89\x25\x00\x00\x00\x00\x81\xEC\x00\x00\x00\x00\x53\x56\x8B\xB4\x24\x00\x00\x00\x00\x8B\xC6",
"xx????xxx????xxxx????xx????xxxxx????xx",
"FUNC_SAMP_SENDSAY");
printAddress("\x55\x8B\xEC\x81\x7D",
"xxxxx",
"FUNC_SAMP_SHOWGAMETEXT");
printAddress("\x64\xA1\x00\x00\x00\x00\x6A\xFF\x68\x00\x00\x00\x00\x50\x64\x89\x25\x00\x00\x00\x00\x81\xEC\x00\x00\x00\x00\x56\x57\x5F",
"xx????xxx????xxxx????xx????xxx",
"FUNC_UPDATESCOREBOARD");
printStructAddress("\xA1\x00\x00\x00\x00\x68\x00\x00\x00\x00\x50\xE8",
"x????x????xx",
"ADDR_SAMP_CHATMSG_PTR",
1);
printStructAddress("\xA1\x00\x00\x00\x00\x85\xC0\x53\x55\x56\x57\x0F\x84\x00\x00\x00\x00",
"x????xxxxxxxx????",
"SAMP_INFO_OFFSET",
1);
printStructAddress("\xA1\x00\x00\x00\x00\x8B\x48\x55",
"x????xxx",
"ADDR_SAMP_INCHAT_PTR",
1);
printStructAddress("\x8B\x0D\x00\x00\x00\x00\x52\x50\xE8\x00\x00\x00\x00\x8D\x4C\x24\x10",
"xx????xxx????xxxx",
"ADDR_SAMP_SHOWDLG_PTR",
2);
}
void init(){
while (g_dwSAMP_Addr == NULL)
{
g_dwSAMP_Addr = (DWORD)GetModuleHandleA("samp.dll");
Sleep(500);
}
while ((hHandle = GetModuleHandle(L"samp.dll")) == NULL)
Sleep(200);
//while (isGameLoaded == NULL)
//{
// Sleep(100);
//}
Sleep(50);
Log("SAMP is loaded and ready");
Log("AddressChecker by David_Luchs loaded. www.rgn.gr");
printAddresses();
while (true){
if (KeyPressed(VK_F3)) {
printAddresses();
}
Sleep(100);
}
}
BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
DisableThreadLibraryCalls(hDll);
if (dwReason == DLL_PROCESS_ATTACH)
{
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)init, NULL, NULL, NULL);
}
return TRUE;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment