-
Постов
47 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент holy
-
Значения очков, я вроде искал через неизвестные значения. Т.е. изначально ищем неизвестные значения, потом в игре увеличиваются очки, и в Cheat Engine отсеиваю результаты через "Увеличилось значение"
-
Не знаю Вроде ничем не паковал. А если и пакую, то UPX'ом
-
Ещё как вариант , предположу что BaseAddress у модуля Game.exe смещается. У тебя на скрине статичный адрес это "Game.exe"+016*** (видны на скрине только первые 3 цифры). А в коде у тебя жестко задано число. Однако в зависимости от смещения Game.exe будет разный первоначальный адрес.
-
По аналогии с этим: wchar_t My_Little_String[100]; swprintf(My_Little_String, L"%d - %s", 24, L"piupiu"); Все функции printf работают одинаково. Либо они выводят инфу в консоль (и тогда первый параметр является сразу форматом строки) Либо они выводят инфу в строку (и тогда первый параметр всегда строка в которую будет писаться результат)
-
Я вообще не стал бы конкретно эту ошибку патчить. Судя по описанию ошибки, она может возникнуть во время любой рассинхронизации, а не только в момент читерства. От сюда следует, что эта ошибка, возможно, где-то выше вызывается через call. Возьми отладчик, поставь BP на место где она вызывается, и смотри на стек вызовов. Исследуй код который вызывает эту функцию, возможно найдешь как "починить", если повезет.
-
Память выделяется динамически, в зависимости от входных данных ) А это значит, что: 1. Эти данные хранятся не в стеке, а в куче 2. Эти данные всегда имеют соответствующий входным строкам размер, а значит переполнения не может быть И именно по этому я не люблю когда Visual Studio что-то пытается решить за меня, по этому юзаю Code::Blocks и GCC компилятор )
-
Вообще-то все эти ошибки гуглятся... Столько лишних вопросов, попробуй сам гуглить. То что студии не нравится swprintf это я знаю, по этому и не люблю Visual Studio, слишком много на себя берет. Попробуй вторым параметром передать длину строки, т.е. swprintf(My_Little_String, len_string, L"%d - %s", entry.th32ProcessID, entry.szExeFile); Может поможет. Если нет, то загугли альтернативные функции.
-
так как у тебя ExeFile уже имеет тип WCHAR то тебе уже ничего не надо делать, можешь все что связано с переменной forExeFile удалить, а строку swprintf(My_Little_String, L"%d - %s", entry.th32ProcessID, forExeFile); заменить на swprintf(My_Little_String, L"%d - %s", entry.th32ProcessID, entry.szExeFile);
-
DWORD это 32-bit unsigned int (Т.е. целое беззнаковое число от 0x00000000 до 0xFFFFFFFF) Объясни вопрос более подробно и с примером. Иначе не понятно, причем тут число и количество символов в нем. Если более филосовско рассуждать, то DWORD это 2 WORD'а, которые состоят из 4х CHAR'ов :DD а значит 4 символа
-
Раздел "Платный запросы", ему подсказки не нужны, ему требуется выполнение запроса за деньги. Почти нереально. Не думаю что кто-то возьмется за такое, тем-более если сервера не маленькие.
-
Тебе не хватает понимания того что ты делаешь. По этому не разобрался в моем примере и в том примере который ты привел по ссылке. Но не страшно, метод "тыка" тоже имеет место быть. В функции CreateWindowEx (которую ты наверняка используешь, ибо в коде по ссылке это именно она) четвертый параметр с конца это родительской HWND окна, установи его в NULL. И из стилей созданного окна убери WS_CHILD. А лучше, CTRL+C код для создания основного окна, CTRL+V туда где создаешь второе окно по клику.
-
А в чем проблема? 1. Создай кнопку OK передав туда параметр HMENU 2. В процедуру обработки оконных сообщений WndProc добавь в switch обработку константы WM_COMMAND, пример: 3. И просто создавай через CreateWindow новое окно, и в него добавляй что тебе надо. P.S. Возможно это не самый лучший вариант, но этим вариантом я пользуюсь при создании TrainMe.
-
Из визуального значения можно как шерлок-холмс выйти на реальное. Предлагаю найти строку в памяти куда рендерится значение, например "Х%" или просто "Х" смотря в каком виде там рисуется значение, затем подключившись в OllyDbg и используя memory breakpoint на этой строке дойти до нужных инструкций. Я как раз собирался записать один такой урок как-нибудь в ближайшее время.
-
Верно! Правильный подход. Суть данного TrainMe в том, что он обманывает CheatEngine тем, что выдает якобы "статический" адрес, который на самом деле при перезапуске программы меняется. На самом деле существует 3 таких адреса в коде (3 инструкции в которых присутствует адрес): При инициализации (присвоению значению 100) При увеличении / уменьшении значения на 10 При освобождении динамически выделенной памяти Но суть в том, чтобы добавить в таблицу CE адрес на одну из этих инструкций (например): CPU Disasm Address Hex dump Command Comments 004013A6 |. 8B15 83604000 MOV EDX,DWORD PTR DS:[406083] И добавить к ним оффсет, например в данном случае 004013A6 + 2 (опкод команды MOV в данном случае занимает 2 байта 0x8B15) и получаем указатель на указатель который указывает на значение.