-
Постов
174 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные temtriss
-
-
4 часа назад, Andy сказал:
Все равно не выходит,пробую
Плохо пробуете. Сейчас пару минут набросаю проектик.
-
33 минуты назад, partoftheworlD сказал:
Но оно не должно мешать.
Ну по сути да, просто задался вопросом почему так, 43 строки лишние написал))
Да и задача решена.
36 минут назад, partoftheworlD сказал:попробуй описать свой функционал в колбеке
Так CALLBACK - дефайн __stdcall
Так что так и есть. Да и под отладчиком все вроде нормально да и мой нумератор вызывается вместо оригинального.
44 минуты назад, partoftheworlD сказал:ничего необычного в нем нет, ну не считая этого
Оббил переменную 0 с двух сторон
Ладно, я еще этот вопрос завтра помучаю, сегодня я до функции декода пакетов дорвался, уже желания с нумератором нету копаться)
-
Всем прив. Возникла небольшая проблема, не могу разобраться почему.
Собственно писал обход запрета запуска CE/olly/artmoney и прочего. В игре это устроено циклом.
Ищет окна по названию(FindWindowA)
Делает снапшот процессов и прогоняет их(Process32NextW)
Нумерует окна(EnumWindows)
Если что-то прокнуло, дисконект от сервера.
По сути поставленую задачу я решил, хукнул выше указаные функции
в FindWindowA в любом случае возвращаю NULL, В Process32NextW Проверяю нужно ли прятать приложение, если да, то просто обнуляю LPPROCESSENTRY32W и делаю рекурсивный вызов хукнутой Process32NextW.
Далее EnumWindows:
BOOL __stdcall Hooked_EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam) { // структура для возвращения оригинальной функции и параметров tORGENUMINFO tWinEnumInfo = { lpEnumFunc, lParam }; // Запускаем наш нумератор и фильтруем то, что не должно видеть приложение :) return oEnumWindows(MyEnumWindowsProc, (LPARAM)&tWinEnumInfo); }
Отрабатывает на ура.
Вызывается мой нумератор:
SIZESTR - дефайн sizeof - 1
static BOOL __stdcall MyEnumWindowsProc(HWND hWnd, LPARAM lParam) { if (hWnd) { char WindowTitle[1024]; WindowTitle[0] = WindowTitle[SIZESTR(WindowTitle)] = 0; if (GetWindowTextA(hWnd, WindowTitle, SIZESTR(WindowTitle)) > 0) // Я не получаю заголовок окна и возращаю FALSE { // Код моего нумератора приводить смысла нету } } return(FALSE); }
Но по итогу игра получает FALSE всегда, даже для тех окон которые прятать не нужно. т.к. я не получаю заголовок окна.
В принципе работает и ладно, но очень хотелось бы разобратся почему так.
GetLastError показывает 2 кода
0x12 или 0x2
Хотя поставленая задача была решена, но, мне очень интересно, почему мне не получить заголовок окна О_о
-
Эх, допилил бы DarkByte DBVM для 8700к
На форуме вроде писал, что из-за кол-ва ядер не работает DBVM, и вроде в планах есть, но могу ошибаться.
Оууу) Заработала DBVM на 8700к Урааа!)
-
В 26.04.2018 в 23:52, X86Jumps сказал:
у меня уже тут ошибку дает
У меня так же было)) Для устранения #include <array>
Да у меня тоже студия видила std::array, но ругалась на какую-то хрень :) Подключил array перестала ошибка вылезать))
-
4 часа назад, srg91 сказал:
vector<array<vector<int>,2>> r = {{x, y}};
Хм... интересненькая задача))) Правда у меня студия уже тут начинает матерится, на отсутсвие экземпляра конструктора, для соответствующего списка аргументов.
Правда я особо не использовал vector, а чаще обходился обычными массивами. Сейчас попробую покапаться, может что-то и найду :))
Блин, думал, что разобрался, уже расписал ответ, и уже по нему понял, что нет
Приложу скрин того, как это видит студия, дабы еще больше нас запутать
https://drive.google.com/open?id=1OnRtK1surpqcFF_hM7OLqZkwQ4SPGkN3
Судя по скрину студия так же видит.
{НашКонтенер{Масив{Элемент масива}}}
Если ответ найдется, отпишите тут, а то мне тоже интересно
-
@Garik66 И тебя с праздником
-
Хотя в памяти оно лежит именно в этом порядке - Текст, Первое оружие, Второе
Так что может и то)
Правильно или не правильно?
Так то интересная затея
Было бы побольше итемов в инвентаре
- 1
-
В 27.03.2018 в 20:40, ReWanet сказал:
1. Здесь текст
2. Здесь первое оружие
3. Здесь второе оружие
То или не то?Видимо я нашел что-то не то? У меня получилось так:
Указатель на Итем1
Указатель на Итем2
Указатель на указатель в нем текст
- 1
-
15 часов назад, partoftheworlD сказал:
Auto a = reinterpret_cast<int*>(0x00AC1230)
ну или тоже самое в стиле С
int a = (int*)0x00AC1230
-
В 13.03.2018 в 21:40, keng сказал:
обе тулзы попытаются его хукнуть - будет конфликт.
да, это понятно, по этому вопрос и задал :)))
В 13.03.2018 в 22:42, mrPTyshnik сказал:Найти адрес прыжка в эту тулзу
спасибо, попробую сегодня :)))
-
Сразу оговорюсь, как найти девайс, хукнуть и прочее я знаю.(даже собственные проекты примитивных менюшек есть)
Но в данный момент нету компа под рукой, по этому пока не могу попробовать, но вот в чем вопрос.
Имеется некая игры(GW2 если очень важно название), к ней имеется некая тулза, которая в свою очередь уже хукает DX функции и использует ImGui интерфейс.
Естественно исходников тулзы я не имею, могу ли я как-то реализовать свою тулзу и использовать паралельно с этой(тоже планируется ImGui) ???
Если есть какие-то ссылки на подобное или гайды(Английские так же устроят) буду очень благодарен
-
окей, значит проверьте свою переменную текст, судя по ошибке вы выходите за предел масива/переменной
-
4 часа назад, Habar сказал:
Как и в примере
т.е. Вы просто взяли адрес от балды и не посмотрели, что лежит по этому адресу?
-
я извеняюсь, а что вы пишите в 0x800000сомневаюсь, что по этомумадресу лежат значения игры. Проверьте правильность адреса в который пишите. по коду все ок.
-
2 минуты назад, pachela сказал:
Ведь у меня есть поворот тела от 0 до 6.28 и нет отрицательного
Только что об этом подумал, у меня было от -3.14 до 3.14 двойное в вашем примере аналогично но от нуля до 6.28
-
1 час назад, pachela сказал:
Если ниче не выйдет
Ну тогда к коду приложи еще название игры))
-
4 минуты назад, pachela сказал:
///Объявляем переменные и присваиваем им нулевое значение?
Да правильно. Инициализировали нулем, что бы не столкнутся с багами(хрен знает что там в памяти)
10 минут назад, pachela сказал:///Почему следующая переменная полный круг double? И что значит M_PI? или мне это не нужно?
Это полукруг, он не как не используется M_PI - дефайн из math.h
M_PI = 3.14 - число Пи
13 минуты назад, pachela сказал://Это я тоже не знаю зачем. Какое то значение =)
Это просто вывод в консоль.
13 минуты назад, pachela сказал:cout << "Input X:" << endl; //Это Х по факту?
Это вывод сообщения на экран с прозьбой ввести X
14 минуты назад, pachela сказал:cin >> X;
А вот это получение переменной от пользователя. Х по факту. Аналогично с Y
15 минут назад, pachela сказал:cout << "Input needed X:" << endl; //Х конечной точки?
Вывод сообщения в консоль с прозьбой ввести конечную точку.
16 минут назад, pachela сказал://Как я понял, мы вызвали функция калькуляции угла и калькуляции окружности и вывели это дело на экран
Да так и есть.
В это части кода был только вывод на экран и получение параметров. Основная функция ниже
17 минут назад, pachela сказал://Почему в этой функции все переменные double? Я же могу их заменить на float?
Дабл - число с плавающей точкой повышеной точности. Теоретически не возникнет проблем если мы скормим float в эту переменную. А на сколько я помню для правильной работы тригонометрических функций нужен double, но я могу ошибатся, так что не волнуйтесь за типы.
20 минут назад, pachela сказал://В MSDN вижу, что в atan используется double, не возникнет ли конфликта при вычислениях Ydiff и Xdiff
Вот мои слова выше подтвердились, нужен дабл, но в дабл можно скормить флоат значение.
20 минут назад, pachela сказал://ведь X и Y у нас в флоат, да и значение поворота камеры у меня тоже флоат.
Конфликтов не будет
Вроде на все вопросы ответил :))
P.s. Не уверен надо ли что-то тут прятать под сполер, если что прошу понять и простить!
-
1 час назад, pachela сказал:
angle" мы впишем в адрес
Да, вы правы
-
2 часа назад, pachela сказал:
6.27
Да вы правы я затупил) 6.28(6.28 == 0) по этому вы видите 6.27
Число Пи умноженое на 2
Мой пример должен прекрасно отработать)
-
float и до 6.28?
Так, если я правильно помню, то меняем секцию 1 и 2, а меняем так,
Секция один:
tmp = 360 - AngleA;
Секция 2:
tmp = 180+ AngleA;
Теоретически должно отработать, может возникнуть путаница со сторонами, но надеюсь поможет) потести
-
1 минуту назад, pachela сказал:
Угол обзора это же FOV
Не совсем, FOV - это угол поля зрения. А мне нужен угол на который повернута камера. И его Мин/Макс значения
-
в первую очередь найди угол обзора.
В радианах он или в градусах - пофиг, всегда можно конвертнуть
я сейчас найду на винте и скину код, калькулятора угла(подбираю с помощью него угол обзора, если все сходится, добавляю расчеты в проект)
От тебя потребуется узнать в чем у нас измеряет угол обзора игра и мин/макс значение угла, я подскажу как поправить код или если уловишь суть можешь по эксперементировать сам.
Скрытый текст#include <iostream> #include <Windows.h> #define _USE_MATH_DEFINES #include <math.h> float CalcAngle(float X, float Y, float nX, float nY); // Портотип функции float CalcRadians(float angle); // Портотип функции using namespace std; int main() { float X = 0; float Y = 0; float nX = 0; float nY = 0; double halfcircle = M_PI; // Ввод/Вывод нужной информации cout << "Angel Calculator by Wi11ka" << endl; // Проверяем наши переменные cout << "Math PI: " << M_PI << endl; // not needed :D // Получаем нужные значение от пользователя // и сразу же выводим значение для проверки правильности. cout << "Input X:" << endl; cin >> X; cout << "X =" << X << endl; cout << "Input Y:" << endl; cin >> Y; cout << "Y =" << Y << endl; cout << "Input needed X:" << endl; cin >> nX; cout << "Needed X = " << nX << endl; cout << "Input needed Y:" << endl; cin >> nY; cout << "Needed Y = " << nY << endl; // Вызываем функцию Калькулирующую наш угол и выводим результат. float res = CalcAngle(X, Y, nX, nY); cout << "Result: " << res << endl; float fResult = CalcRadians(res); cout << "Finish Result: " << fResult << endl; system("PAUSE"); } float CalcAngle(float X, float Y, float nX, float nY) { // Различие между нами и целью по оси X и Y double Xdiff; double Ydiff; // Угол double AngleA; // Времянка :D double tmp; // Разбиваем работу на 4 секции // Section 1 if (nY > Y && nX <= X) { Ydiff = nY - Y; Xdiff = X - nX; // Умножаем на 57.29578 для перевода из радиан в градусы. AngleA = atan(Xdiff / Ydiff) * 57.29578; tmp = 0 - AngleA; } // Section 2 if (nY <= Y && nX < X) { Ydiff = Y - nY; Xdiff = X - nX; AngleA = atan(Xdiff / Ydiff) * 57.29578; tmp = (180 - AngleA)*-1; } // Section 3 if (nY < Y && nX >= X) { Ydiff = Y - nY; Xdiff = nX - X; AngleA = atan(Xdiff / Ydiff) * 57.29578; tmp = 180 - AngleA; } // Section 4 if (nY >= Y && nX > X) { Ydiff = nY - Y; Xdiff = nX - X; AngleA = atan(Xdiff / Ydiff) * 57.29578; tmp = 0 + AngleA; } return tmp; } float CalcRadians(float angle) { // Возвращаем в радианы angle = angle / 57.29578; return angle; }
Честно не помню под какую игру тут были расчеты, но суть, что в игре угол обзора был от -3.14 до 3.14
И в итоге это выглядело вот так
https://drive.google.com/open?id=12OprCTzivVEVdIUxVnfpJfwh6xsXnbpt
P.S. Извеняюсь, что-то не обратил внимания на C# в заголовке, пример на C++ хотя может тоже поможет. Сори.
-
3 часа назад, JustStudy сказал:
Но вот хотелось поглядеть, что тут пишут
Я тебе аж 2шт кинул. Оба на 100% рабочие) сами функции инжекта пашут, оберни в гуй или юзай консольный вариант
Окно с картинкой на C++
in Низкоуровневое программирование
Опубликовано · Изменено пользователем temtriss
Ну собственно вот, сильно ногами не бейте, несколько раз оговорился при описании загрузки))(сегодня тяпница все таки))
Ну и собственно код:
#include <Windows.h> #include "resource.h" HWND hWnd; MSG uMsg; LRESULT __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,LPSTR lpCommandLine , int nCmdShow) { WNDCLASSEX WndClass = { 0 }; WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.hbrBackground = CreatePatternBrush(LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2))); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hInstance = hInst; WndClass.lpfnWndProc = WndProc; WndClass.lpszClassName = "Main Window"; RegisterClassEx(&WndClass); hWnd = CreateWindowEx(0,WndClass.lpszClassName, "WndWithCustumBrush", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, (GetSystemMetrics(SM_CXSCREEN) - 640) / 2, (GetSystemMetrics(SM_CYSCREEN) - 480) / 2, 640, 480, NULL, NULL, NULL, NULL); ShowWindow(hWnd, SW_SHOWDEFAULT); while (GetMessage(&uMsg, hWnd, NULL, NULL)) { TranslateMessage(&uMsg); DispatchMessage(&uMsg); } return uMsg.wParam; } LRESULT __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { // Обработчик оконных сообщений switch (uMsg) { case WM_CLOSE: ExitProcess(0); break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } }
P.S. еще раз извеняюсь за оговорки и голос, чуток синий