-
Постов
25 -
Зарегистрирован
-
Посещение
Репутация
1 Навыки не прокаченыИнформация о Chusa

- День рождения 07.01.1998
Информация
-
Пол
Мужчина
-
Город
Кострома
Контакты
-
Skype
lol_44_lol
Посетители профиля
2 498 просмотров профиля
-
Странно, но при чтение в переменной coor_X имеется значение, да оно не того типа, но оно имеется. Сначало я нажимаю, чтобы записать в эти переменные, а потом, чтобы записать и когда записываю в переменных уже нули. Хотя, когда читаю память в переменнх имеется значение. И еще у меня вопрос возник про чтение вот у меня в переменной center_X есть адрес в котором хранится значение координаты Х и последняя функция RPM получается читает в переменную cord_X значение этого адреса, но оно не в том типе и даже то, что приводил кенг не работает вот пример значение cord_X == 184490720, а f_coord_X == -107374176 Хотя истинное значение в данный момент равно 2250.819336.
-
При записи в память при таком коде case WM_KEYDOWN: if(wParam == 0x49) { MessageBox(hWnd,"Сохранение координат","Lol",MB_OK); VirtualProtectEx(phandle, (LPVOID)Base, sizeof(Base), PAGE_EXECUTE_READWRITE, &old_prot); ReadProcessMemory(phandle,(LPCVOID)Base, &CPed, sizeof(Base), NULL); center = CPed + 0x14; ReadProcessMemory(phandle,(LPCVOID)center, &coord_X1, sizeof(center), NULL); center_X = coord_X1 + 0x30; ReadProcessMemory(phandle,(LPCVOID)center_X, &coord_X, sizeof(center_X), NULL); float f_coord_X = (float)coord_X; ReadProcessMemory(phandle,(LPCVOID)center, &coord_Y1, sizeof(center), NULL); center_Y = coord_Y1 + 0x34; ReadProcessMemory(phandle,(LPCVOID)center_Y, &coord_Y, sizeof(center_Y), NULL); float f_coord_Y = (float)coord_Y; ReadProcessMemory(phandle,(LPCVOID)center, &coord_Z1, sizeof(center), NULL); center_Z = coord_Z1 + 0x38; ReadProcessMemory(phandle,(LPCVOID)center_Z, &coord_Z, sizeof(center_Z), NULL); float f_coord_Z = (float)coord_Z; } if(wParam == 0x55) { MessageBox(hWnd,"Телепорт","Lol",MB_OK); WriteProcessMemory(phandle, ¢er_X, (LPCVOID)coord_X, sizeof(center_X), NULL); WriteProcessMemory(phandle, ¢er_Y, (LPCVOID)coord_Y, sizeof(center_Y), NULL); WriteProcessMemory(phandle, ¢er_Z, (LPCVOID)coord_Z, sizeof(center_Z), NULL); VirtualProtectEx(phandle, (LPVOID)Base, sizeof(Base), old_prot, &old_prot); CloseHandle(phandle); }Выдает вот такие ошибки, на отладке смотрел читает правильно, но при записи выдает вот так ошибки: Run-Time Check Failure #3 - The variable 'coord_X' is being used without being initialized. Run-Time Check Failure #3 - The variable 'coord_Y' is being used without being initialized. Run-Time Check Failure #3 - The variable 'coord_Z' is being used without being initialized.
-
А потом когда будем записывать, то это будет тритий параметр как я понял? И выглядеть это будет как то так? WriteProcessMemory(phandle, &coord_X, coord_X , sizeof(coord_X), NULL); Получается вот так coord_X == 181410528 f_coord_X == -107374176. coord_Y == 3298893584 f_coord_Y == 3.29889357e+009 coord_Z == 1096163328 f_coord_Z == -107374176. Настоящие координаты не менялись такие же, как и на скрине
-
LONG WINAPI WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ HDC hDC; PAINTSTRUCT ps; DWORD Base = 0xB6F5F0; DWORD CPed = 0; HWND hwnd = FindWindow(0, "GTA:San Andreas"); DWORD pID = UpdatePID("gta_sa.exe"); HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID); DWORD coord_X; DWORD coord_X1; DWORD coord_Y; DWORD coord_Y1; DWORD coord_Z; DWORD coord_Z1; DWORD center = 0; DWORD center_X = 0; DWORD center_Y = 0; DWORD center_Z = 0; DWORD old_prot = 0; switch(msg) { case WM_DESTROY: PostQuitMessage(0); case WM_COMMAND: switch(wParam) { case 1: break; } case WM_KEYDOWN: if(wParam == 0x49) { MessageBox(hWnd,"Сохранение координат","Lol",MB_OK); VirtualProtectEx(phandle, (LPVOID)Base, sizeof(Base), PAGE_EXECUTE_READWRITE, &old_prot); ReadProcessMemory(phandle,(LPCVOID)Base, &CPed, sizeof(Base), NULL); center = CPed + 0x14; ReadProcessMemory(phandle,(LPCVOID)center, &coord_X1, sizeof(center), NULL); center_X = coord_X1 + 0x30; ReadProcessMemory(phandle,(LPCVOID)center_X, &coord_X, sizeof(center_X), NULL); ReadProcessMemory(phandle,(LPCVOID)center, &coord_Y1, sizeof(center), NULL); center_Y = coord_Y1 + 0x34; ReadProcessMemory(phandle,(LPCVOID)center_Y, &coord_Y, sizeof(center_Y), NULL); ReadProcessMemory(phandle,(LPCVOID)center, &coord_Z1, sizeof(center), NULL); center_Z = coord_Z1 + 0x38; ReadProcessMemory(phandle,(LPCVOID)center_Z, &coord_Z, sizeof(center_Z), NULL); } if(wParam == 0x55) { MessageBox(hWnd,"Телепорт","Lol",MB_OK); WriteProcessMemory(phandle, &coord_X, 0, sizeof(coord_X), NULL); WriteProcessMemory(phandle, &coord_Y, 0, sizeof(coord_Y), NULL); WriteProcessMemory(phandle, &coord_Z, 0, sizeof(coord_Z), NULL); VirtualProtectEx(phandle, (LPVOID)Base, sizeof(Base), old_prot, &old_prot); CloseHandle(phandle); } break; case WM_PAINT: { hDC = BeginPaint(hWnd, &ps); OnPaint(hDC); EndPaint(hWnd, &ps); break; } default: return DefWindowProc (hWnd, msg, wParam, lParam); } return 0;}Я знаю, что скорей всего надоел с этой темой, но прошу помочь еще. Читать все начало и все правильно, но теперь я не понимаю, на каком моменте мне надо остановиться. Дело в том, что в таблице СЕ вот такая ситуацияБаза адреса это переменная Base, из нее читается CPed, потом в переменную center пишется CPed+0x14, для первого смещения, далее coord_X1 читается(CPed+0x14) и далее в center_X пишется coord_X1+0x30 и это как я понял нужный адрес и мы читаем его последней функцией RPM в переменную coord_X, но в ней уже непонятный для меня мусор(но я не обратил внимания и стал сразу же писать функции для записи) и заметил это только на отладке, и теперь я не понимаю откуда надо начинать писать, если вам не трудно, то подскажите пожалуйста. Учту твои советы, всю нужную литературу прочитаю.
-
Все заработало. Надо было извенить третий параметр функции RPM. Вот как изменился код. Сейчас буду дописывать, чтобы читал все координаты до конца и записывал. Спасибо большое за помощь. case WM_KEYDOWN: if(wParam == 0x49) { DWORD Base = 0xB6F5F0; DWORD CPed = 0; HWND hwnd = FindWindow(0, "GTA:San Andreas"); DWORD pID = UpdatePID("gta_sa.exe"); HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID); MessageBox(hWnd,"Сохранение координат","Lol",MB_OK); DWORD coord_X; DWORD coord_X1; DWORD coord_Y; DWORD coord_Y1; DWORD coord_Z; DWORD coord_Z1; DWORD center = 0; DWORD center_X = 0; DWORD center_Y = 0; DWORD center_Z = 0; DWORD old_prot = 0; VirtualProtectEx(phandle, (LPVOID)Base, sizeof(Base), PAGE_EXECUTE_READWRITE, &old_prot); ReadProcessMemory(phandle,(LPCVOID)Base, &CPed, sizeof(Base), NULL); center = CPed + 0x14; VirtualProtectEx(phandle, (LPVOID)Base, sizeof(Base), old_prot, &old_prot); CloseHandle(phandle);Если нужен будет полный код, то он вот здесь вот https://yadi.sk/d/cFXHd8S5aLqXT. Как допишу полностью отмечусь, еще раз спасибо за помощь.
- 61 ответ
-
- 1
-
-
case WM_KEYDOWN: if(wParam == 0x49) { DWORD Base = 0xB6F5F0; DWORD CPed = 0; HWND hwnd = FindWindow(0, "GTA:San Andreas"); DWORD pID = UpdatePID("gta_sa.exe"); HANDLE phandle = OpenProcess(PROCESS_VM_READ, 0, pID); MessageBox(hWnd,"Сохранение координат","Lol",MB_OK); DWORD coord_X; DWORD coord_X1; DWORD coord_Y; DWORD coord_Y1; DWORD coord_Z; DWORD coord_Z1; DWORD center = 0; DWORD center_X = 0; DWORD center_Y = 0; DWORD center_Z = 0; DWORD old_prot = 0; VirtualProtectEx(phandle, (LPVOID)Base, sizeof(Base), PAGE_EXECUTE_READWRITE, &old_prot); ReadProcessMemory(phandle,(LPCVOID)Base, (LPVOID)CPed, sizeof(Base), NULL); center = CPed + 0x14; VirtualProtectEx(phandle, (LPVOID)Base, sizeof(Base), old_prot, &old_prot); CloseHandle(phandle);Вот так получилось и все равно в Cped == 0. Название изменилось потому, что я стал пробывать не на Криминальной России, а на обычной Сан-Андреас(Думал в этом ошибка).
-
Я по поводу функции FindWindow, а если я не знаю класс окна(или просто на данной стадии не понимаю, что это), то можно поставить просто 0? И еще заголовок окна жертвы брать из названия окна игры? По поводу pID - здесь все правильно я проверял pID находит правильно, я сверял с Диспетчером задач. Сейчас буду пробывать с функцией VirtualProtectEx и напишу о результатах.
-
1. А что именно туда надо передавать? ЗАголовок какого окна? 2. Функция UpdatePID работает отлично, все проверено на отладке. Вот ее код int UpdatePID(char* pName){ HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSENTRY32 pInfo; DWORD pID = 0; pInfo.dwSize = sizeof(PROCESSENTRY32); if(Process32First(snapshot,&pInfo)) { while(Process32Next(snapshot,&pInfo)) { if(_stricmp(pName,pInfo.szExeFile) == 0) { CloseHandle(snapshot); return pID = pInfo.th32ProcessID; } } } CloseHandle(snapshot); return 0;}3. Хэндл закрывается. 4 и 5 этот пункт я не смог реализовать потому, что выдает ошибку, что невозможно пребразовать DWORD в PDDWORD.
-
Все теперь я понял свою ошибку буду исправлять, спасибо за помощь. Вообщем я поменял, как было сказанно, но все равно в переменной CPed == 0. Но только одно я не смог сделать, это снять защиту потому, что выдает ошибку. Вот код который получился case WM_KEYDOWN: if(wParam == 0x49) { DWORD Base = 0xB6F5F0; DWORD CPed = 0; HWND hwnd = FindWindow(0, "grand_theft_auto_san_andreas.dll"); DWORD pID = UpdatePID("grand_theft_auto_san_andreas.dll"); HANDLE phandle = OpenProcess(PROCESS_VM_READ, 0, pID); MessageBox(hWnd,"Сохранение координат","Lol",MB_OK); DWORD coord_X; DWORD coord_X1; DWORD coord_Y; DWORD coord_Y1; DWORD coord_Z; DWORD coord_Z1; DWORD center = 0; DWORD center_X = 0; DWORD center_Y = 0; DWORD center_Z = 0; DWORD old_prot = 0; ReadProcessMemory(phandle,(void*)Base, (LPVOID)CPed, sizeof(Base), NULL); center = CPed + 0x14;