zorinchel Опубликовано 4 ноября, 2015 Поделиться Опубликовано 4 ноября, 2015 цепочка указателей в таблицекод такойна консоль выводятся p4 = 00000000, то есть не то что нужно, как мне в p4 получить нужное значение и сравнить его с 188, NullAlex: Тег спойлера не просто так придуман. Читай правила и FAQ.#include <iostream>#include <windows.h>#include <string>#include <conio.h>#include <fstream>#include <iomanip>#include <stdio.h>#include <io.h>#include <fcntl.h>#include <mmsystem.h>#pragma comment(lib, "winmm")using namespace std; DWORD WINAPI GtaSA_thread (LPVOID); DWORD APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID ipReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: CreateThread (NULL, NULL, GtaSA_thread, NULL, NULL, NULL); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return true;} void CreateConsole (){int hConHandle = 0;HANDLE lStdHandle = 0;FILE *fp = 0;AllocConsole ();SetConsoleTitle ("ID ");lStdHandle = GetStdHandle (STD_OUTPUT_HANDLE);hConHandle = _open_osfhandle (PtrToUlong (lStdHandle), _O_TEXT);fp = _fdopen (hConHandle, "w");*stdout = *fp;setvbuf (stdout, NULL, _IONBF, 0);}DWORD WINAPI GtaSA_thread (LPVOID){ DWORD base = 0xBA18FC; DWORD p1 = 0; DWORD p2 = 0; DWORD p3 = 0; DWORD p4 = 0; DWORD old_prot = 0; VirtualProtectEx(GtaSA_thread, (LPVOID)base, sizeof(base), PAGE_EXECUTE_READWRITE, &old_prot); ReadProcessMemory(GtaSA_thread, (LPVOID)base, &p1, sizeof(base), NULL);//прочитали, записали в p1 p2 = p1 + 0x384;// прибавили смещение ReadProcessMemory(GtaSA_thread, (LPVOID)p2, &p3, sizeof(p2), NULL);//прочитали адрес p2, записали в p3 p3 = p2 + 0x00; ReadProcessMemory(GtaSA_thread, (LPVOID)p3, &p4, sizeof(p3), NULL); if (p4 == 188) {// если равно, то DWORD*var = (DWORD*)(0x6CC3B2); DWORD*var2 = (DWORD*)(0x6C9103); DWORD*var3 = (DWORD*)(0x406AF3); DWORD*var4 = (DWORD*)(0x6c9690); DWORD*var5 = (DWORD*)(0x6C9F1C); DWORD*var6 = (DWORD*)(0x6C8F10); *var -= 0x2c0000; *var2 -= 0x2c0000; *var3 -= 0x2c0000; *var4 -= 0x2c0000; *var5 -= 0x2c0000; *var6 -= 0x2c0000; WriteProcessMemory(GtaSA_thread, (void*)var, var, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var2, var2, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var3, var3, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var4, var4, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var5, var5, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var6, var6, sizeof(4), NULL); } CreateConsole (); { for (;;Sleep (1000)) printf (" ID = %p", p4); return 0; } } Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 ноября, 2015 Поделиться Опубликовано 4 ноября, 2015 Если ты инжектишь эту длл-ку в адресное пространство игры, то на кой тебе сдались ReadProcessMemory и WriteProcessMemory? Ссылка на комментарий Поделиться на другие сайты Поделиться
zorinchel Опубликовано 4 ноября, 2015 Поделиться Опубликовано 4 ноября, 2015 Если ты инжектишь эту длл-ку в адресное пространство игры, то на кой тебе сдались ReadProcessMemory и WriteProcessMemory?так тоже не получаетсяDWORD WINAPI GtaSA_thread (LPVOID){ DWORD Cp1 = *(DWORD*)(0xBA18FC); DWORD Cp2 = *(DWORD*)(Cp1 + 0x384); } так тоже не получаетсяDWORD WINAPI GtaSA_thread (LPVOID){ DWORD Cp1 = *(DWORD*)(0xBA18FC); DWORD Cp2 = *(DWORD*)(Cp1 + 0x384); }и так тожеDWORD p1 = ((DWORD)0xBA18FC);DWORD p2 = *(DWORD *)(p1 + 0x384);так мы к адресу 0xBA18FC прибавляем, а мне нужно к значению в адресе (которое тоже адрес), в общем я уже запутался Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 ноября, 2015 Поделиться Опубликовано 4 ноября, 2015 Насколько я понял, тебе нужно взять из базового указателя значение, прибавить к нему смещение, считать из полученного значения следующий адрес, прибавить к нему смещение, и так далее. Ссылка на комментарий Поделиться на другие сайты Поделиться
zorinchel Опубликовано 4 ноября, 2015 Поделиться Опубликовано 4 ноября, 2015 Насколько я понял, тебе нужно взять из базового указателя значение, прибавить к нему смещение, считать из полученного значения следующий адрес, прибавить к нему смещение, и так далее.DWORD WINAPI GtaSA_thread (LPVOID){ DWORD* pl = (DWORD *)0xBA18FC; DWORD value = *pl; CreateConsole (); { for (;;Sleep (1000)) printf (" ID = %p", *pl); return 0; }*p1 равно нужному адресу, а как дальше прочитать этот адрес и прибавить смещение? Ссылка на комментарий Поделиться на другие сайты Поделиться
Крайслер Опубликовано 4 ноября, 2015 Поделиться Опубликовано 4 ноября, 2015 (изменено) Немного бреда(но работать должно):INT value = *(DWORD*)(*(DWORD*)(*(DWORD*)(0xBA18FC)+0x384)+0x00);printf_s("Pointer value:: 0x%X\nSignification value::%i\n",value,value)if(value==188) printf_s("value = 188")+ значение наверное меняется через промежутки времени. поэтому думаю это нужно внутри цикла обрабатыватьDWORD WINAPI GtaSA_thread (LPVOID){CreateConsole();while(true) { //Читаем - проверяем - переписываем Sleep(500); }return 0;} Изменено 4 ноября, 2015 пользователем Крайслер Ссылка на комментарий Поделиться на другие сайты Поделиться
zorinchel Опубликовано 4 ноября, 2015 Поделиться Опубликовано 4 ноября, 2015 Немного бреда(но работать должно):DWORD WINAPI GtaSA_thread (LPVOID){while(true){INT value = *(DWORD*)(*(DWORD*)(*(DWORD*)(0xBA18FC)+0x384)+0x00);if(value==188){DWORD*var = (DWORD*)(0x6CC3B2);DWORD*var2 = (DWORD*)(0x6C9103);DWORD*var3 = (DWORD*)(0x406AF3);DWORD*var4 = (DWORD*)(0x6c9690);DWORD*var5 = (DWORD*)(0x6C9F1C);DWORD*var6 = (DWORD*)(0x6C8F10);*var -= 0x2c0000;*var2 -= 0x2c0000;*var3 -= 0x2c0000;*var4 -= 0x2c0000;*var5 -= 0x2c0000;*var6 -= 0x2c0000;}Sleep(500);}return 0;}попробовал так. компилируется, но крашится при запускеNullAlex: Читай FAQ по тегам. И цитировать большие сообщения полностью - необязательно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Chusa Опубликовано 5 ноября, 2015 Автор Поделиться Опубликовано 5 ноября, 2015 (изменено) Спасибо конечно за ответы, но как-бы прошло более года =) Я разобрался во всем через месяц Изменено 5 ноября, 2015 пользователем Chusa Ссылка на комментарий Поделиться на другие сайты Поделиться
zorinchel Опубликовано 5 ноября, 2015 Поделиться Опубликовано 5 ноября, 2015 Спасибо конечно за ответы, но как-бы прошло более года =) Я разобрался во всем через месяцтогда объясни, как получать значения указателей, потом читать их как адрес, например: 0xBA1300 базовый адрес, значение в этом адресе 0xCF0000, плюс смещение 0x384 получаем адрес 0xCF0384 в нем значение 0xCA0002, в этом адресе значение 188, как до него добраться? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 5 ноября, 2015 Поделиться Опубликовано 5 ноября, 2015 ReadProcessMemory Ссылка на комментарий Поделиться на другие сайты Поделиться
zorinchel Опубликовано 6 ноября, 2015 Поделиться Опубликовано 6 ноября, 2015 ReadProcessMemory Если ты инжектишь эту длл-ку в адресное пространство игры, то на кой тебе сдались ReadProcessMemory и WriteProcessMemory? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 ноября, 2015 Поделиться Опубликовано 6 ноября, 2015 Алекс, видимо, не увидел просто, что ты именно длл-ку пишешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения