RockHammer Опубликовано 8 января, 2015 Поделиться Опубликовано 8 января, 2015 (изменено) Чтобы долго не печатать:Проблема с указателями. Конкретно - не ищутся. Изменено 8 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость MrKirbyTM Опубликовано 8 января, 2015 Поделиться Опубликовано 8 января, 2015 (изменено) Delphi по проще будет ))) Изменено 8 января, 2015 пользователем MrKirbyTM Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 8 января, 2015 Автор Поделиться Опубликовано 8 января, 2015 (изменено) В 08.01.2015 в 17:01, MrKirbyTM сказал: Float - 4 Byta фига первый раз такое слышу эм... тогда сколько?sizeof(float)=4 Bytes p.s. я сам с ответов мейл ру узнал Изменено 8 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость MrKirbyTM Опубликовано 8 января, 2015 Поделиться Опубликовано 8 января, 2015 (изменено) В 08.01.2015 в 17:06, RockHamer сказал: эм... тогда сколько?sizeof(float)=4 Bytes p.s. я сам с ответов мейл ру узналhttp://msdn.microsoft.com/ru-ru/library/hd7199ke.aspxфига сам только узнал ))) Привык в играх видеть значение флоат в виде значения ,а не байт Изменено 8 января, 2015 пользователем MrKirbyTM 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 8 января, 2015 Автор Поделиться Опубликовано 8 января, 2015 (изменено) В 08.01.2015 в 17:09, MrKirbyTM сказал: http://msdn.microsoft.com/ru-ru/library/hd7199ke.aspxфига сам только узнал ))) Привык в играх видеть значение флоат в виде значения ,а не байт Я, если честно, сам в шоке) Знаю, что тип int занимает 4 байта, но почему же тогда тип float занимает так же 4 байт? Ведь Int хранит одно число, а тип float хранит целых 7 цифр... 1-само число и еще 6 знаков после запятой (или 7, тут я не помню) В 08.01.2015 в 17:01, MrKirbyTM сказал: Delphi по проще будет ))) А как на дельфях писать? Изменено 8 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость MrKirbyTM Опубликовано 8 января, 2015 Поделиться Опубликовано 8 января, 2015 В 08.01.2015 в 18:04, RockHamer сказал: Я, если честно, сам в шоке) Знаю, что тип int занимает 4 байта, но почему же тогда тип float занимает так же 4 байт? Ведь Int хранит одно число, а тип float хранит целых 7 цифр... 1-само число и еще 6 знаков после запятой (или 7, тут я не помню) А как на дельфях писать? Смотря что ты именно хочешь писать ? Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 8 января, 2015 Автор Поделиться Опубликовано 8 января, 2015 В 08.01.2015 в 18:39, MrKirbyTM сказал: Смотря что ты именно хочешь писать ?Пфф, пентагон взломать, конечно же))Не, ну трейнер обычный... Аобскан, инъекци... Или просто поиск байтов в памяти и их замена нупами. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость MrKirbyTM Опубликовано 8 января, 2015 Поделиться Опубликовано 8 января, 2015 В 08.01.2015 в 18:50, RockHamer сказал: Пфф, пентагон взломать, конечно же))Не, ну трейнер обычный... Аобскан, инъекци... Или просто поиск байтов в памяти и их замена нупами. Сорь не для рекламы делал для своего ушедшего в прах сайта https://www.youtube.com/watch?v=Uu-q1fqnZRg https://www.youtube.com/watch?v=YEXuXSNptbo https://www.youtube.com/watch?v=RRMed5KFrX8 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 8 января, 2015 Автор Поделиться Опубликовано 8 января, 2015 (изменено) В 08.01.2015 в 19:00, MrKirbyTM сказал: Сорь не для рекламы делал для своего ушедшего в прах сайтаhttps://www.youtube.com/watch?v=Uu-q1fqnZRghttps://www.youtube.com/watch?v=YEXuXSNptbohttps://www.youtube.com/watch?v=RRMed5KFrX8Сам делал видосы?)Красава!) Я тоже варфейс взламываю)))) Эм... немного отвлеклись от темы... Кто-то знает как решить проблему? Изменено 8 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 9 января, 2015 Автор Поделиться Опубликовано 9 января, 2015 При чтении указателей почему-то там где должен быть адрес - выводится последний оффсет в массиве!Кто знает, как исправить? На видео даже показал как и что делаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 Обновлено:Нашел другой указатель. Другой оффсет. Выдает опять последний оффсет из массива!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 Привет!Можешь показать исходный код метода mem->ReadPointer() ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 Ну начнем с того, что Dead Ricing 3 это x64 игра.А трейнер собирается под x86,так еще и исходники тоже под x64 заточены.Примерно так надо код фиксить и компилить трейнер надо под x64.DWORD64 MemReader::ReadPointer(DWORD64 base, DWORD64* offsets, int count){ for (int i = 0; i < count - 1; i++) { base = Read(base + offsets[i], 8).toUINT64(); } return base + offsets[count - 1];}Единственное, чем я тебе могу помочь, это предоставить свои наработки последнего поколения (их в уроках не было).Наработки независимы от архитектуры под которую ты компилишь (x86 или x64), а также от кодировки ANSI или UNICODE.Но однако, трейнер тебе все равно надо собрать под x64, потому что ты работаешь с игрой в x64. Исходники во вложении. Метод ReadPointer накидаешь сам думаю, если возникнут осложнения - пиши.Пример использования:#include "Process.h"#include "MemWorker.h"int SeDebugPrivilege(void){ HANDLE hToken; LUID Val; TOKEN_PRIVILEGES tp; OpenProcessToken(HANDLE(-1), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Val); tp.PrivilegeCount = 1; tp.Privileges[0].Luid = Val; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof (tp), NULL, NULL); CloseHandle(hToken); return 1;}int main(int argc, CHAR* argv[]){ GH::Process process; GH::MemWorker memory; process.FindProcessID(GH::string(TEXT("game.exe"))); DWORD PID = process.GetPID(); if (PID == 0) { printf("Run game first!\n"); system("PAUSE"); return 0; } printf("PID: %X\n", PID); process.OpenProcess(PROCESS_ALL_ACCESS); // открываешь хэндл memory.SetProcess(&process); // помещаешь указатель на объект Process в MemWorker // ... дальше оперируешь с процессом игры process.CloseProcess(); // закрываешь хэндл return 0;}Mem.zip 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 (изменено) В 10.01.2015 в 15:32, Coder сказал: Ну начнем с того, что Dead Ricing 3 это x64 игра.А трейнер собирается под x86,так еще и исходники тоже под x64 заточены.Примерно так надо код фиксить и компилить трейнер надо под x64. Исходники во вложении. Метод ReadPointer накидаешь сам думаю, если возникнут осложнения - пиши. Спасибо))"Старому" исходнику новое описание ReadPointer не помогло, теперь ковыряю новый ))В нем, как я понял, FindPattern это поиск сигнатуры. Немного непонятно с предпоследним аргументом, resultArray... Что ему передавать в майне?Функция Write, что передавать аргументу destr? Цитата //buffer address where bytes will be storedПримерный вариант перевода: Буффер адреса, где будут хранится байты. Либо у меня плохо с английским) Это буффер с байтами, которые будут записаны?Еще аргумент count и bytesWrited. count - это количество байтов, которое будет записано. А что тогда bytesWrited? Изменено 10 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 В 10.01.2015 в 16:20, RockHamer сказал: Спасибо))"Старому" исходнику новое описание ReadPointer не помогло, теперь ковыряю новый ))В нем, как я понял, FindPattern это поиск сигнатуры. Немного непонятно с предпоследним аргументом, resultArray... Что ему передавать?Указатель на массив void* размером maxCount элементов.void* results[5] = {0};FindPattern(..., results, 5); Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 В 10.01.2015 в 14:57, keng сказал: Привет!Можешь показать исходный код метода mem->ReadPointer() ? Да, конечноDWORD MemReader::ReadPointer(DWORD base, DWORD* offsets, int count){ for (int i = 0; i < count - 1; i++) { base = Read(base + offsets[i], 4).toUINT32(); } return base + offsets[count - 1];} В 10.01.2015 в 16:22, Coder сказал: P.S. Учти, что тамошний FindPattern адаптирован для использования в DLL (VirtualQuery), чтобы использовать в трейнере, тебе придется чуток изменить его.VirtualQuerryEx? Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 В 10.01.2015 в 16:36, RockHamer сказал: VirtualQuerryEx?Я то уже удалил, это я по глупости своей сморозил) Там все правильно, VirtualQuery это метод класса, все правильно. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 (изменено) В 10.01.2015 в 16:37, Coder сказал: Я то уже удалил, это я по глупости своей сморозил) Там все правильно, VirtualQuery это метод класса, все правильно. И еще... Можно как-то получать базовый адрес автоматически, а не ручками? А то он каждый раз меняется...P.s. игра определенно любит скрипты) Изменено 10 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 Это тебе виднее, я в этом не особо разбираюсь) Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 (изменено) В 10.01.2015 в 18:11, Coder сказал: Это тебе виднее, я в этом не особо разбираюсь) Coder не разбирается в чем-то, связанном с программированием???)))Сейчас помоему магма вулканическая развергентся))) Ведь мы это делали, в том уроке с MemReader. BaseAddress, помнишь?))Разве нельзя это переделать под этот, уже обновленный исходник? (чтобы работал на 32 и 64 бит и без разницы в какой кодировке) Изменено 10 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 В 10.01.2015 в 19:17, RockHamer сказал: Coder не разбирается в чем-то, связанном с программированием???)))Сейчас помоему магма вулканическая развергентся))) Ведь мы это делали, в том уроке с MemReader. BaseAddress, помнишь?))Разве нельзя это переделать под этот, уже обновленный исходник? (чтобы работал на 32 и 64 бит и без разницы в какой кодировке)Моя не понимать о чем ты говорить)Если ты про получение базового адреса модуля, то там все просто вполне делается. Если DLL - GetModuleHandle, если внешний процесс, то можно через tlhelp32 сделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 В 10.01.2015 в 19:24, Coder сказал: Моя не понимать о чем ты говорить) Моя твоя не понимать)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 10 января, 2015 Поделиться Опубликовано 10 января, 2015 В 10.01.2015 в 19:59, RockHamer сказал: Моя твоя не понимать))Изложи свою проблему понятнее и желательно с примерами кода (или иллюстрациями). Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 11 января, 2015 Автор Поделиться Опубликовано 11 января, 2015 В 10.01.2015 в 20:03, Coder сказал: Изложи свою проблему понятнее и желательно с примерами кода (или иллюстрациями). P.s. через tlhelp32 не выходит получить modBaseAddr... Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 11 января, 2015 Поделиться Опубликовано 11 января, 2015 Ну как же так можно, почему ты даже не смотришь в хидер файлы?Там каждый метод документирован. /* startAddress - address from which search begins size - search size (maximum offset) pattern - pattern for search mask - mask of pattern for search resultArray - pointer to an array that stores data maxCount [opt] - limit count of found signatures WARNING: size of resultArray should be not smaller than maxCount You must open process with PROCESS_QUERY_INFORMATION and PROCESS_VM_READ rights before call this function Return value: none */ virtual void FindPattern(void* startAddress, size_t size, PBYTE pattern, char* mask, void* resultArray[], size_t maxCount = 1);Открой MemWorker.h, там каждый метод документирован. Тебе даже студия мою документацию в твоем видео вывела, но ты продолжаешь ее игнорировать...tlhelp32 работает, я же тебе уже говорил, что компилить надо в x64 режиме. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения