Created
January 28, 2020 22:42
-
-
Save LuxXx/488fdf1c962595a243586fbf3e20d48e to your computer and use it in GitHub Desktop.
AddressGetter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| 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