Ищу обходной путь для ASLRC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ищу обходной путь для ASLR

Сообщение Anonymous »

Я пытаюсь сделать хаки для офлайн-игры под названием «TCG Card Shop Simulator», и столкнулся с несколькими проблемами, связанными с ASLR (рандомизацией макета адресного пространства), и мне интересно, почему мой код больше не работает. >
Я беру базовый адрес моей программы и добавляю первое значение, определяющее, как она называется, затем складываю все векторы с помощью готовой функции, она не печатает правильное значение и каким-то образом читает «0» байтов

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

DWORD GetModuleBaseAddress(TCHAR* lpszModuleName, DWORD pID) {
DWORD dwModuleBaseAddress = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID); // make snapshot of all modules within process
MODULEENTRY32 ModuleEntry32 = { 0 };
ModuleEntry32.dwSize = sizeof(MODULEENTRY32);

if (Module32First(hSnapshot, &ModuleEntry32)) //store first Module in ModuleEntry32
{
do {
if (_tcscmp(ModuleEntry32.szModule, lpszModuleName) == 0) // if Found Module matches Module we look for -> done!
{
dwModuleBaseAddress = (DWORD)ModuleEntry32.modBaseAddr;
break;
}
} while (Module32Next(hSnapshot, &ModuleEntry32)); // go through Module entries in Snapshot and store in ModuleEntry32

}
CloseHandle(hSnapshot);
return dwModuleBaseAddress;
}

DWORD GetPointerAddress(HWND hwnd, DWORD gameBaseAddr, DWORD address, std::vector offsets)
{
DWORD pID = NULL; // Game process ID
GetWindowThreadProcessId(hwnd, &pID);
HANDLE phandle = NULL;
phandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
if (phandle == INVALID_HANDLE_VALUE || phandle == NULL);

DWORD offset_null = NULL;
ReadProcessMemory(phandle, (LPVOID*)(gameBaseAddr + address), &offset_null, sizeof(offset_null), 0);
DWORD pointeraddress = offset_null; // the address we need
for (int i = 0; i < offsets.size() - 1; i++) // we dont want to change the last offset value so we do -1
{
ReadProcessMemory(phandle, (LPVOID*)(pointeraddress + offsets.at(i)), &pointeraddress, sizeof(pointeraddress), 0);
}
return pointeraddress += offsets.at(offsets.size() - 1); // adding the last offset
}
int main()
{
DWORD PID = 0;
TCHAR ModuleName[] = _T("Card Shop Simulator.exe");
HWND WindowHandle = FindWindow(NULL, L"Card Shop Simulator");
GetWindowThreadProcessId(WindowHandle, &PID);
HANDLE Handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
DWORD BaseAddress = GetModuleBaseAddress(ModuleName, PID);
DWORD XPAddress = 00770240;
std::vector XPAddressOffsets = { 0x18C,0xBA4,0x90,0x1B8 };
DWORD XPAddressPointer = GetPointerAddress(WindowHandle, BaseAddress, XPAddress, XPAddressOffsets);
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79145866/looking-for-a-workaround-for-aslr[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»