Перейти к содержанию

Chusa

Пользователи
  • Постов

    25
  • Зарегистрирован

  • Посещение

Весь контент Chusa

  1. Спасибо конечно за ответы, но как-бы прошло более года =) Я разобрался во всем через месяц
  2. Странно, но при чтение в переменной coor_X имеется значение, да оно не того типа, но оно имеется. Сначало я нажимаю, чтобы записать в эти переменные, а потом, чтобы записать и когда записываю в переменных уже нули. Хотя, когда читаю память в переменнх имеется значение. И еще у меня вопрос возник про чтение вот у меня в переменной center_X есть адрес в котором хранится значение координаты Х и последняя функция RPM получается читает в переменную cord_X значение этого адреса, но оно не в том типе и даже то, что приводил кенг не работает вот пример значение cord_X == 184490720, а f_coord_X == -107374176 Хотя истинное значение в данный момент равно 2250.819336.
  3. При записи в память при таком коде 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, &center_X, (LPCVOID)coord_X, sizeof(center_X), NULL); WriteProcessMemory(phandle, &center_Y, (LPCVOID)coord_Y, sizeof(center_Y), NULL); WriteProcessMemory(phandle, &center_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.
  4. А потом когда будем записывать, то это будет тритий параметр как я понял? И выглядеть это будет как то так? 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. Настоящие координаты не менялись такие же, как и на скрине
  5. 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, но в ней уже непонятный для меня мусор(но я не обратил внимания и стал сразу же писать функции для записи) и заметил это только на отладке, и теперь я не понимаю откуда надо начинать писать, если вам не трудно, то подскажите пожалуйста. Учту твои советы, всю нужную литературу прочитаю.
  6. Все заработало. Надо было извенить третий параметр функции 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. Как допишу полностью отмечусь, еще раз спасибо за помощь.
  7. 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. Название изменилось потому, что я стал пробывать не на Криминальной России, а на обычной Сан-Андреас(Думал в этом ошибка).
  8. Я по поводу функции FindWindow, а если я не знаю класс окна(или просто на данной стадии не понимаю, что это), то можно поставить просто 0? И еще заголовок окна жертвы брать из названия окна игры? По поводу pID - здесь все правильно я проверял pID находит правильно, я сверял с Диспетчером задач. Сейчас буду пробывать с функцией VirtualProtectEx и напишу о результатах.
  9. 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.
  10. Все теперь я понял свою ошибку буду исправлять, спасибо за помощь. Вообщем я поменял, как было сказанно, но все равно в переменной 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;
  11. Если я правильно понял, то вы хотите сказать, что надо вот так? У меня так и было только hwnd - хэндл открытого на запись процесса был выше, но даже в таком случае в переменной CPed == 0
  12. Проблемане решена, если не сложно, то можем глянуть вместе в скайпе(lol_44_lol) или в RC. А по поводу смещений, да я не прав, но все равно дело до них не доходит, ошибка возникает в другом.
  13. pID определяет правильно с таким названием и CE подключается к этому же процессу
  14. А во время исполнения программы значение CPed == содержимому Base
  15. Вообщем попробывал, как ты сказал все тоже самое. Потом я решил начать писать все с нуля написал только чтение из памяти без всяких клавиш тупо вывод на консоль значений при каждом смещении, так все равно читате только то , что в базовом адресе и все дальше не идет. Я не знаю, что делать. Делал все, как показано у тебя в видео 1 к 1, только изменяется название игры и базовый адрес со смещениями
  16. Я делал так выдает ошибку 1 IntelliSense: аргумент типа "const wchar_t *" несовместим с параметром типа "LPCSTR" , а если удаляю букву L то переменная hwnd пустая и выдает ошибку unused <Чтение памяти невозможно> .
  17. Keng я как только не пробывал, но у меня постоянно не может прочесть Handle процесса, но есть одна странность, что значение в базы он читает, но не записывает и поэтому дальше чтение по со смещениями не идет. Я пробывал делать, как ты, но у меня все равно пишет unused <Чтение памяти невозможно> , хотя значение базы читает правильно, я проверял на отладке, но не записывает его. Я снимал защиту на чтение с помощью функции VirtualProtect, но все равно пишет, что чтение невозможно. Если у тебя будет свободная минутка, то можешь написать чтение на координату Х, а дальше я уже сам пойму.
  18. Спасибо буду теперь доделывать, чтобы у меня все работало.
  19. Я смотрел все твои уроки и кодера тоже. Именно после уроков мне и захотелось перевести все с СЕ на С++ потому, что он открывает еще большие просторы. Keng можешь объяснить как хотя бы прочесть одну координату, я а дальше я на примере сдедлаю. Вот та часть которую я написал сейчас, в вот здесь послностью весь код https://yadi.sk/d/6nkwuunIZdgPq case WM_KEYDOWN: if(wParam == 0x49) { DWORD pID = UpdatePID("grand_theft_auto_san_andreas.dll"); DWORD offsets_coordX[2] = {0xE, 0x1E}; DWORD offsets_coordY[2] = {0xE, 0x22}; DWORD offsets_coordZ[2] = {0xE, 0x26}; 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; ReadProcessMemory(hWnd,(LPCVOID)Base, (LPVOID)CPed, sizeof(Base), NULL); center = CPed + 0xE; ReadProcessMemory(hWnd,(LPCVOID)center, (LPVOID)coord_X1, sizeof(center), NULL); center_X = coord_X1 + 0x1E; ReadProcessMemory(hWnd,(LPCVOID)center_X, (LPVOID)coord_X, sizeof(center_X), NULL); ReadProcessMemory(hWnd,(LPCVOID)center, (LPVOID)coord_Y1, sizeof(center), NULL); center_Y = coord_Y1 + 0x22; ReadProcessMemory(hWnd,(LPCVOID)center_Y, (LPVOID)coord_Y, sizeof(center_Y), NULL); ReadProcessMemory(hWnd,(LPCVOID)center, (LPVOID)coord_Z1, sizeof(center), NULL); center_Z = coord_Z1 + 0x26; ReadProcessMemory(hWnd,(LPCVOID)center_Z, (LPVOID)coord_Z, sizeof(center_Z), NULL); } Заранее спасибо.
  20. Спасибо большое если я правильно понял, то сейчас все получится.
  21. Да ты меня не правильно понял) В CE у меня уже все координаты найдены, теперь же я хочу, чтобы в любой момент времени я мог нажать клавишу и координаты записались(как делал ты в видео-уроке, но только я хчу реализовать на С++ и для трех осей), а потом нажать другую и опять вернуться на тоже место. И я не могу понять с чего начать читать потому что все что у меня есть в начале это указтель на CPed 0xB6F5F0 и я не знаю, как его прочитать, чтобы потом читать со смещениями. Как-то так) Сори если очень муторно по-другому я пока что не могу объянсить
  22. Как работают эти функции я разобрался из твоих уроков и уроков Codera, я не могу понять как с самого начала когда найти базовый адрес CPed, когда у нас есть адрес 0xB6F5F0 который хранит адрес CPed. И еще есть один непонятный момент куда читает функция ReadProcessMemory.
  23. Я начинающий и еще не очень сильно разобрался в работе указателей на С++. Но мне нужно из процесса игры прочесть и сохранить три координаты и в нужный момент по нажатию клавиши все это записать в память. pID процесса и все что еще необходимо я нашел и написал(из видео уроков и msdn), но только не могу написать само прочтение и записаь в память. Кому не сложно объяснить помогите пожалуйста. Исходники если надо, то я скину. Вот эти самые адреса из которых надо читать, сохранять и писать 0xB6F5F0 - Указатель игрока (CPed) (CPed+0x14) +0x30 = [dword] позиция по X-координате (CPed+0x14) +0x34 = [dword] позиция по Y-координате (CPed+0x14) +0x38 = [dword] позиция по Z-координате
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.