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

Coder

Ветераны
  • Постов

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

  • Посещение

  • Победитель дней

    13

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

  1. Вообще если уж на то пошло, то я сплагиатил "свою идею" из https://play.google.com/store/apps/details?id=Game.NDK )
  2. MasterGH выкладывал очень много полезных и интересных статей на этом форуме. Всё верно ты сказал. Но тебе не нужно делать какую-нибудь супер-пупер навороченную игру, создай плоскую хоть без текстурок игру. Это значительно увеличит твои знания ООП. Начни с самих основ и не спеши, я в своё время танчики делал (правда на C# и XNA еще на 1м курсе в колледже по-моему), потом спустя 2 годика по-моему сделал TrainME на C++/GDI, там где надо машинкой траффик объезжать. Потом вообще под вдохновлением, сделал ремейк танчиков своих на C++/DirectX) В общем - не торопись, всё продумай и начни потихоньку делать. На форуме тебе помогут.
  3. Привет! Все очень просто, легко ломают игры, те кто в этой сфере крутится. Вот, посмотри на того же MasterGH, я не знаю человека, который ломает игры лучше него из зоны RU. Соответственно, если хочешь научиться ломать игры - научись их создавать (хотя бы примитивные). Тогда ты сможешь во всём разобраться и применить полученные знания.
  4. Имя: gmz Причина: Спам Наказание: Устное предупреждение
  5. Ловишь предуперждение за очередную порцию вываленной тупости неверной информации. Последующий оффтоп будет наказываться.
  6. memcpy это отлично реализованная функция.
  7. 0. "VirtualProtect работает 4к блоками xD" - идем на MSDN читать описание параметра dwSize. 1. "проверка на фейл VirtualProtect - явно на любителя костылей" - VirtualProtect не всегда возвращает успешный результат. 2. "Ставлю протект на весь модуль" - размер модуля может быть пару килобайт, а может быть и пару мегабайт/гигабайт. Модифицируя защиту памяти для всего модуля ты создаешь угрозу безопасности, помимо этого может произойти нарушение работы программы. 3. "Работаю с ним как с обычным буфером буффером" - рокхаммер тоже модифицирует память напрямую (memcpy).
  8. 1. Сдохнет один пиндос (шучу, ничего не случится) 2. Верно.
  9. Предложу Xipho поставить сайт на мониторинг.
  10. 1. DWORD filler; filler не была инициализирована, а просто объявлена (и в ней может содержаться любой системный мусор. Почему я её не инициализировал? Потому что она служит только заглушкой, поэтому нам абсолютно без разницы какое значение будет в ней содержаться). 2. blockSize = 4; Даже если ты в VirtualProtect передашь размер блока менее 4х байт,с протект будет выставлен всё равно на 4 байт, я так сделал, чтобы минимизировать время затраты на работу функции VirtualProtect (хоть и на пару тактов процессора). 3. if (!oldProtect); если oldProtect равен нулю (т.е. мы не передали свой указатель), то в него будет записан указатель на filler, так как 4й параметр у функции VirtualProtect - обязательный. 4. return ...; нет, функция вернет истину (если результат вызова VirtualProtect вернет число не равное нулю) и ложь (в случае если вызов VirtualProtect вернёт 0).
  11. Боже, ну и кастыль ты сделал) По консолям я не спец, это можешь легко загуглить. Сделай себе функцию обёртку (wrapper) над VirtualProtect. // address - указатель на блок памяти; blockSize - размер блока памяти; newProtect - новая защита памяти; указатель на старую защиту памяти (опциональный параметр) bool SetMemoryProtect(void* address, size_t blockSize, unsigned int newProtect, unsigned int* oldProtect = 0){ DWORD filler; if (blockSize < 4) blockSize = 4; if (!oldProtect) oldProtect = &filler; return VirtualProtect(address, blockSize, newProtect, oldProtect) != 0;}Если функция вернет true, значит всё в порядке, если false, то пиши в логи. Можешь вообще в самой этой функции сделать кстати говоря и запись в логи, тогда вообще париться не придется. Пример использования: // пример без восстановления оригинальной защиты памятиint main(){ void* address = 0x00403000; if (SetMemoryProtect(address, 12, PAGE_EXECUTE_READWRITE, 0)) { // тут что-то делаем памятью } return 0;}// пример с восстановлением оригинальной защиты памятиint main(){ void* address = 0x00403000; unsigned int oldProtect = 0; if (SetMemoryProtect(address, 12, PAGE_EXECUTE_READWRITE, &oldProtect)) { // тут что-то делаем с памятью // восстановление оригинальной защиты памяти SetMemoryProtect(address, 12, oldProtect, 0); } return 0;}
  12. Проверяй, что тебе возвращает VirtualProtect и всё, в общем-то) Если возвращает 0, то в логи или куда там ты ошибки пишешь добавляешь запись, например: logs.put("Error 0x%X while accessing memory (здесь примерное место в коде, где возникла ошибка (название метода класса/функции или номер строки))", GetLastError());
  13. Всё таки для паблик релизов нужно учитывать, то что VirtualProtect может завершиться провалом. Return value If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError.
  14. Весьма интересно, как это делается) Неужели, на все найденные функции элементарно ставятся бряки?
  15. Если не сложно, хотя бы парой слов, можешь объяснить, что за UltiMap? По названию понятно, что это карта чего-то, но вот чего?
  16. Да онлайн игра это очевидно, а подменяются сигнатуры локального античита ИМХО.
  17. Ты бы для начала разобрался в том, как работает DirectX, и только потом думал о перехвате в стороннем приложении. Создай собственное DirectX приложение, разберись как оно работает и попробуй рисовать примитивы хоть какие-то. Потом почитай статьи по игростроению, как они создавали игровое меню, сделай меню для своего DirectX приложения. Потом реализуй какое-то взаимодействие с меню, и только потом уже возвращайся к перехвату DirectX в стороннем приложении, а иначе это - слышишь звон, да не знаешь где он.
  18. Ты в вызов функции ProtectHacker передаешь не переменную типа void*, а сам тип, естественно эта конструкция недопустима. Ты хоть ошибки читай. что тебе IDE пишет, причем еще и на русском же написано...
  19. Я просто не записывал в память процесса NT_IMAGE_HEADERS и не уведомлял процесс о том, что в него загружен был образ PE файла.
  20. Ага, с праздником вас, хоть я сам и не христианин)
  21. А чем собственно говоря мой инжектор не угодил?
  22. Что ж пробуй, удачи C# исполняется на виртуальной машине со своим ассемблером, поэтому даже если ты напишешь на нем код решающий твою задачу, воспользоваться им не сможешь)
  23. Да действительно, криво прочитал. Касательно твоего вопроса, могу дать совет. Напиши нужный тебе код на C++ (выполняющий задачу перебора байт и заполнения их по условию), скомпилируй программу в Release сборку и собственно говоря запусти отладку, поставь бряк на своем участке кода и скопируй дизассемблерный код да и все.
  24. Элементарное решение -найди инструкцию, что работает с адресами тумана войны, и просто клади в адреса 1 (если нужно добавь пару условий).
  25. Плохо смотрел значит, здесь есть нужное для тебя
×
×
  • Создать...

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

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