Antifreez Опубликовано 20 июля, 2017 Поделиться Опубликовано 20 июля, 2017 (изменено) Всем привет прощу сильно не пинать первый пост на этом форуме ближе к теме,появилось желания написать бота используя чисто игровые функции (раньше писал ботов путём поиска оффсетов)(мой родной язык C# , в асме и с++ особо не силён но потихоньку осваиваю) , собственно сам вопрос нашел в dll игровую функцию public: virtual struct User * __thiscall UHandler::GetNextTarget(float,int) допустим это её постоянный адрес 0x005b0be5, примерно так выглядит структура User Скрытый текст struct User { int id; unsigned short name; int race; int hp_max int hp; int mp_max; int mp; }; как правильно мне вызвать данный метод (public: virtual struct User * __thiscall UHandler::GetNextTarget(float,int)) используя C++ или CE ? то что я сделал создал dll для иньекции потом создаю поток if (dwReason == DLL_PROCESS_ATTACH) { CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)TestPipe, NULL, NULL, NULL); } в потоке поднимаю pipe Скрытый текст BOOL WINAPI TestPipe() { ofstream fout("D:\\LOG\\pipe.txt", ios_base::app); // создаём объект класса ofstream для записи и связываем его с файлом cppstudio.txt fout << "\n" << "Запуск потока TestPipe"; // запись строки в файл fout.close(); HANDLE hPipe; char szClientUpdate[22]; BOOL fSuccess = FALSE; DWORD cbRead, cbToWrite, cbWritten, dwMode; LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\drwebPipe"); do { hPipe = CreateFile( lpszPipename, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hPipe != INVALID_HANDLE_VALUE) { ofstream fout("D:\\LOG\\pipe.txt", ios_base::app); fout << "\n" << "Соеденился с pipe"; fout.close(); } Sleep(1000); } while (hPipe == INVALID_HANDLE_VALUE); do { fSuccess = ReadFile( hPipe, szClientUpdate, strlen(szClientUpdate), &cbRead, NULL); if (!fSuccess && GetLastError() != ERROR_MORE_DATA) { ofstream fout("D:\\LOG\\pipe.txt", ios_base::app); fout << "\n" << "Ошибка в pipe"; fout.close(); break; } string hexstr; int i; for (i = 0; i<cbRead; i++) { if (szClientUpdate[i] == 0) { continue; } hexstr += szClientUpdate[i]; } if (hexstr == "start") { // СОБСТВЕННО ТУТ МНЕ НУЖЕН ВЫЗОВ ФУНКЦИИ //public: virtual struct User * __thiscall UHandler::GetNextTarget(float,int) } ofstream fout("D:\\LOGAA\\pipe.txt", ios_base::app); fout << "\n" << "Пришло сообщение =" << hexstr; fout.close(); } while (fSuccess); // repeat loop if ERROR_MORE_DATA ofstream fouts("D:\\LOG\\pipe.txt", ios_base::app); fouts << "\n" << "Поток закрыт!!!"; fouts.close(); return TRUE; вот тут if (hexstr == "start") { // СОБСТВЕННО ТУТ МНЕ НУЖЕН ВЫЗОВ ФУНКЦИИ //public: virtual struct User * __thiscall UHandler::GetNextTarget(float,int) } честно гуглил много, но толком не чего не понял Изменено 22 июля, 2017 пользователем Xipho Куски кода более 5 строк нужно убирать под спойлер. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 20 июля, 2017 Поделиться Опубликовано 20 июля, 2017 (изменено) Достаточно создать прототип функции и вызывать его в потоке. typedef void(*GetNextTarget)(float,int); auto *AnyFunction = reinterpret_cast<GetNextTarget>(0x005b0be5); void main() { AnyFunction(1.0f, 1337); } после инжекта CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(main), hmodule, 0, nullptr); Функция вроде как возвращает указатель на структуру User. Можешь в Reclass задампить структуру, а после вызова присваивать ей вернувшийся указатель и на прямую работать со структурой и её значениями. Изменено 20 июля, 2017 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Antifreez Опубликовано 20 июля, 2017 Автор Поделиться Опубликовано 20 июля, 2017 (изменено) Спасибо за ответ,pipe нужен будет для снятия внутри игровых хуков.. попробовал написать тестовую программку и сделать как вы написали,оно почти работает.. функция вызывается и на return высыпается с ошибкой мол нету прав на запись оО вот тестовое приложение https://drive.google.com/open?id=0B430T62QsrdXU25BLVNzSlM5UTA скажите пожалуйста,тут каждое сообщение проходит модерацию? или как то можно без модерации писать? Изменено 20 июля, 2017 пользователем Antifreez Ссылка на комментарий Поделиться на другие сайты Поделиться
Antifreez Опубликовано 21 июля, 2017 Автор Поделиться Опубликовано 21 июля, 2017 (изменено) Вроде со своим примером разобрался,буду пробовать на игре,вопросов думаю будет ещё масса. Изменено 21 июля, 2017 пользователем Antifreez Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 21 июля, 2017 Поделиться Опубликовано 21 июля, 2017 (изменено) 16 часов назад, Antifreez сказал: функция вызывается и на return высыпается с ошибкой мол нету прав на запись оО определи какой тип возвращает функция я думаю ошибка при возвращении значения из-за 16 часов назад, partoftheworlD сказал: typedef void(*GetNextTarget)(float,int); Попробуй так сделать, если возвращается отличный тип от void typedef Тип(*GetNextTarget)(float,int); typedef DWORD(*GetNextTarget)(float,int); typedef float(*GetNextTarget)(float,int); и т.д Изменено 21 июля, 2017 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 июля, 2017 Поделиться Опубликовано 22 июля, 2017 В 21.07.2017 в 00:44, Antifreez сказал: скажите пожалуйста,тут каждое сообщение проходит модерацию? или как то можно без модерации писать? После пяти одобренных модератором постов премодерация автоматически снимается. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antifreez Опубликовано 22 июля, 2017 Автор Поделиться Опубликовано 22 июля, 2017 Спасибо всем за ответы,с вызовами разобрался,оставляю тестовый проект вдруг кому понадобится,теперь появился вопрос как обойти GPF (general protection fault) при попытки поставить MBP сразу вылетает GPF и приложение падает... как я понял этот вопрос нужно оформить в новый пост правда не понятно в какой раздел в "OllyDbg" или "Вопросы по взлому MMO"? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 23 июля, 2017 Поделиться Опубликовано 23 июля, 2017 Лучше в разделе ММО с указанием названия игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения