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

MasterGH

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

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

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

    129

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

  1. Автор, если хочешь защитить свой трейнер, то наверно об этом надо спрашивать не у нас, а делать это самому и тайно от всех. Иначе, что это будет за защита, которую тебе кто-то предложил или хуже того за тебя сделал. Закрыто.
  2. Ссылка на необходимую краткую информацию по режимам. Кратко написаны функции режимов. Разделение обязанностей юзер- и кернел-модев на рисунке. Я не думаю, что стоит заморачиваться на режимах больше чем нужно. Возможно в нашем деле это потребуется тогда, когда, например, нужно писать в память процесса через кернел-режим, если сделать это обычными способами будет невозможно из-за защит.
  3. В системе Windows есть объекты ядра и ИХ описатели. Последние чаще называют дескрипторами, "хендлами", "hadle(s)". Вот пример использования хендла типа Окно (тип HWND): int WINAPI MessageBox( __in_opt HWND hWnd, __in_opt LPCTSTR lpText, __in_opt LPCTSTR lpCaption, __in UINT uType ); Сразу напрашивается расшифровка этой абривиатуры HWND. H- handle , WND - window. Получаем handle window. Для чего нужен этот описатель для казалось бы независимого диалога MessageBox?! Идём в справку MSDN и смотрим: A handle to the owner window of the message box to be created. If this parameter is NULL, the message box has no owner window. Оказывается этот параметр, если его указать, свяжет мессагу и описатель HWND. У мессаги появится "хозяин"... Если окно закроется, то и мессага закроется... Разбирать эту связь я не буду, кому надо глянут. Это был просто пример. Описатели или дескрипторы это структуры данных. Используются в работе разных режимов. На Windows cуществует два режима. Режим Ядра и "Пользовательский" Ошибки на уровне Ядра покажут вам Синий экран. Ошибки на Пользовательском уровне должны привести максимум к закрытию пользовательского приложения. "Должны" это не значит, что так и будет, но на все 100% нельзя быть уверенным. "Режим пользователя" это программирование на WinAPI где мы работаем с дескрипторами Пользовательского режима (а система в свою очередь обрабатывает эти дескрипторы работая с объектами ядра), и если что-то на этом уровне Пользователя пойдёт не так, то в предположительно в худшем случае ваше приложение закроется с критической ошибкой. "Режим ядра" это тот режим на котором писать программы очень "мерзко", если что, то синий экран. Если опять что-то, то опять синий экран. При чем компьютер после перезагрузки может не запустить операционную систему... Итак. В Пользовательском режиме Хендлы или дескрипторы это номера, по которым идентифицируются структуры данных в системе. Эти структуры разного размера в зависимости от названия типа хендла. Эти структуры созданы для взаимодействия процессов Пользовательского уровня в обход уровня Ядра. Более подробнее читаем Рихтера. Глава3.
  4. Сплошной косяк. Особенно, когда после условия идёт функция: if (count>1) then function No(hotkey) .... Лучше убрать функцию myattach(timer) и работу таймера. Начни с простого - подготовь форму и реакции на хот-кеи function No() --... end function Norma() --... end function SetHotKey(func, hotkey) local objectHotKey = createHotkey(func, hotkey) generichotkey_setKeys(objectHotKey, hotkey) generichotkey_onHotkey(objectHotKey, func) end function onOpenProcess(processid) SetHotKey(No, VK_R) SetHotKey(Norma, VK_V) control_setCaption(formTrainer, "Trainer Run ....") setProperty(infoLabel, "Enabled", "true") end function OnCloseTrainerForm(sender) closeCE() return caFree end formTrainer = createForm(true) form_centerScreen(formTrainer) control_setCaption(formTrainer, "Process game is not exist") form_onClose(formTrainer, OnCloseTrainerForm) infoLabel = createLabel(formTrainer) control_setCaption(infoLabel, "Key R - ....\n\rKey V - ....") control_setPosition(infoLabel, 20, 10) setProperty(infoLabel, "Enabled", "false") listProcess = getAutoAttachList() strings_add(listProcess, "test.exe")
  5. Для начала это. << Я так понимаю, что AOBScan мы можем найти заданный массив байт? Можем. Можем найти адрес массива или адреса по которым находятся похожие массивы. << У меня задача отыскать большой массив (х х х х х х х х х х х х х) и заменить его на (у у у у у у у у у у у у у) Поиск массива через AOBScan или класс MemScan Запись байт writeBytes(address, x,x,x,x,...) : Write the given bytes to the given address from a table writeBytes(address, table) : Write the given bytes to the given address from a table В Lua коде нужно написать, что дескать, если нашли адреса массива, то по каждом адресу записать такие-то байты. Или записать только по первому найденному адресу. Или ещё дописать условие,что если найденных адресов больше чем 1, то вывести сообщение об ошибке, о том что должен был найтись только один адрес. >> Пересмотрел операторы языка, но подходящего не разглядел. Я дал несколько подсказок, а дальше сами.
  6. Нам уже исполнилось 2 года 11 Декабря 2009 это дата регистрации первого пользователя на нашем форуме. В принципе, этой датой можно считать рождение именно этого форума. Первым появился форум, а через год в 2010 в декабре появился сайт. За эти два года много пользователей ознакомились с ресурсом gamehacklab[ru]. Всё больше людей продолжает испытывать интерес к созданию читов различными способами. Количество интересующихся такой сложной темой только растёт. Примерно в 60% случаев новые пользователи ищут информацию по читингу в мультиплеерных играх. Конечно, это расстраивает, т.к. с людьми надо играть честно поэтому мы этим и не занимаемся. Когда-то давно во времена 2007 годов существовала команда Team-X. Два человека Ветераны создания трейнеров размеров ~2кб до 80кб до сих пор пишут на форуме это Xipho и SER[G]ANT. В их сторону дань уважения. Многие зарубежные товарищи создают команды и следуют прежним далёким традициям. Трейнер в виде *.exe файла с инфошкой, с музыкой, некоторыми эффектами. У нас же, как многие могли заметить, почти всё крутится около Cheat Engine без всяких прошлых традиций. И это произошло очевидным образом. Cheat Engine наиболее удобная стартовая база для людей, которые ничего о программировании под Windows не знают. Эта программа именно для тех кто желает побыстрее понять принципы создания читов (о том как изменять код игры) и побыстрее приступить к делу. Если человек (а таких весьма мало) захочет писать трейнеры на языках программирования, то примеры на форуме у нас тоже есть, но 100% готовых исходников трейнеров можно не встретить, а найти их в Интернете. Итак, поздравляю всех с событием "2 года нашему форуму". Желаю всем интересных открытий в создании читов.
  7. Почитай мануалы в Интернете о записи данных в файл + обработку исключений, чтобы всегда, как в данном примере так и в других уметь определять ошибку. А также отладку dll-ок в Visual Studio в редакторе кода, если это тебе надо.
  8. Статья хорошая. Это я писал в личном сообщении автору. Напоминаю способы сравнения свой-чужой: 1) Сравнение данных в структурах как это было в этой статье. Если в этом случае ничего не находится, то ищем новый уровень в цепочке указателей и сравниваем структуры на этом уровне. Если опять не нашли, то опять ищем указатель и сравниваем аналогично. И так делать пока не построим полную цепочку указателей. 2) Если тратим много времени на пункт1, запутались или долго искать указатели, то ищем инструкции которые работали бы только с игроком за которого играем. Но и здесь свои трудности в случае, когда у героя есть дружественные единицы. Как бы там не было всегда надо помнить "код игры умеет выбирать кто друг твоему герою, а кто враг". При чем это сравнение может вообще отсутствовать, помним об этом. Код дружественного бота может работать с адресом главного героя своими алгоритмами "дружбы". А код "врага" будет также работать с адресом вашего героя своими алгоритмами "врага". И никаких СРАВНЕНИЙ "кто свой, а кто чужой НЕТ (и нет их в структурах данных)" - только работа с адресами. 3) Наконец, третий вариант, если на верхние два тратили много времени. Учим как автоматически вести лог и трейсить места из call-ов из глубины вверх до места срабатывания клика мышкой или ввода с клавиатуры (делается на Cheat Engine или других отладчиках). Именно в местах, где читается ввод с мышки или клавиатуры, будет дизассемблированный код который будет работать только с твоим управляемым персонажем. Затем может идти вход в call или call-ы которые вызывались бы уже и ботами. Когда у нас есть логи какие call-ы работают от ботов, а какие от мест сравнений нажатий мышки или клавиатуры, то мы можем составить схему какие участки кода работают, когда что-то происходит в игре... и это 99-100% поможет найти решение задачи "кто свой, а кто чужой". Все пункты 1,2,3 требуют времени и опыта работы в отладке, а также интуицию. На интуицию благоприятно влияет опыт программирования 3Dигр или хотя бы представление как эти игры работают.
  9. Вроде, так должно работать и так проще: function onOpenProcess(processid) control_setCaption(UDF1_someLabel, "Process is exist") end listAAProcess = getAutoAttachList() strings_add(listAAProcess, 'game.exe') control_setCaption(UDF1_someLabel, "Process is not exist") form_show(UDF1) Функция onOpenProcess всегда срабатывает, когда процесс найден. Форму нужно предварительно создать в дизайнере с именем UDF1 и на форму "бросить" лейбл с именем someLabel. Код этот не тестировал, может работает,а может нет. --- Только что проверил, всё работает
  10. >> form_setBorderStyle(form, borderstyle, bsNone) Чтобы работать с этой функцией нужна подходящая версия CE с соответсвующей ревизией не раньше чем эта функция была включена. >> А возможно ли сделать создаваемую форму при нажатии на кнопку передвигаемой, если не назначены события ? Нет, нельзя. Должно обрабатываться как минимум одно событие, когда пользователь удерживает левую кнопку мышки на форме. Это событие должно быть присоединено к названию Lua-функции в дизайнере форм. ------------ В новой версии CE 6.2 Альфа3 r1131 доступны функции: 1) Работы со стилями границы формы form_setBorderStyle(form, borderstyle): 6.2+: Sets the borderstyle of the window form_getBorderStyle Для работы с form_setBorderStyle(form, borderstyle) в "документации"нет описания borderstyle. Понятно что borderstyleдолжно иметь тип integer, а какое именно число не понятно. 2) Перетаскивание формы form_dragNow(form) function FormMouseDown(sender, button, x, y) form_dragNow(UDF1) end Но, поскольку эта альфа, а не официальная версия, то думаю эти функции использовать рано, если конечно не делать автономные трейнеры.
  11. Ответ на третий пост: 1) Либо в дизайнере форм... 2) Либо в Lua-коде: ... setProperty(UDF1 ,'BorderStyle','bsNone') ... Где UDF1 имя формы
  12. Специально не поддерживается и наверно эта возможность не появится. Как самый простой вариант из этой ситуации используй компонент Image для своих кнопок.
  13. ZOCKIR, если ищешь ответ, то тебе надо копать функции по получению данных из процесса и модулей. Если таких не найдёшь для .NET фреймверка, то ищи их в API Windows. Как поймёшь их работу переноси на C# через импорт необходимых функций, если тебе нужно писать на C#. Общее впечатление - ищешь лишних трудностей, когда уже есть Cheat Engine
  14. Надеюсь этот товарищ (вопрос к нему) напишет ответ на главный вопрос с какой целью он копировал информацию с нашего форума на свой сайт? По его ответу можно хотя бы какое-то представление иметь какую цель ставил перед собой человек. У меня только несколько версий 1) Отомстить всем на GameHackLab[RU] (может обидел кто, не помог ломать ММОРГ- игрулю?! ) 2) Получать весьма малые деньги от рекламы на своём сайте - хитрый и в тот же время очевидный ход, завести кучу клонов и писать как бы от разных пользователей повышая популярность и хиты в поисковых системах. Публикуя видео на Ютубе чужих авторов - чтобы повысить рейтинг "своего" сайта. 3) А может просто раздражает "интерфейс и угловатость" нашего форума... Я вот понять не могу. Наверняка, у человека должны быть занятия более интересные чем тратить своё время на эту фигню.
  15. Мы обсудим с Xipho новые дополнения к правилам форума чтобы пользователям не приходилось к каждому посту или в своей подписи писать о запрете публикации его материалов. Во всяком случае на текущий момент, как это обычно делают правообладатели, можно вежливо потребовать удалить свой материал.
  16. Это зависит всё-таки от поставленных целей. Удобно, когда в объектах нужно хранить инкапсулированные данные и работать с ними через методы. Плюсы возможности наследования и полиморфизма. Но в случае отладки, можно обойтись и без классов. Я имею ввиду там, где пишем скрипты, а не в исходниках программы GodGame. Например, у текущей ревизии CE есть работа как с отладчиком так и с дизассеблированием/ассемблированием. Довольно важная функция-событие: function debugger_onBreakpoint(): When a breaking breakpoint hits (that includes single stepping) and the lua function debugger_onBreakpoint() is defined it will be called and the global variables EAX, EBX, .... will be filled in Return 0 if you want the userinterface to be updated and anything else if not (e.g: You continued from the breakpoint in your script) Она работает всегда, когда вызывается точка останова при этом откуда-то с потолка, т.е. с глобальными переменными регистров можно работать. Хотя они могли бы передаваться в аргумент функции через переменную данных о событиях. Но, кто знает, может это сделано в целях производительности и может быть правильно. Кстати также пригодилась бы функция-событие: function onOpenProcess(processid) : When this function is defined it will be called each time a process has been opened (note that a process can be opened multiple times in a row, e.g when attaching the debugger it might first open it and then attach the debugger which opens it again...) Ещё некоторые функции: disassemble(address): Disassembles the given address and returns a string in the format of "address - bytes - opcode : extra" splitDisassembledString(disassembledstring): Returns 4 strings. The address, bytes, opcode and extra field getInstructionSize(address): Returns the size of an instruction (basically it disassembles the instruction and returns the number of bytes for you) getPreviousOpcode(address): Returns the address of the previous opcode (this is just an estimated guess) По работе со сканером памяти можно самый простой сканер по поиску адресов по сигнатурам байткода вида "FFxxxxFFAA....". Сканирование в один этап без отсеивания. Эта функция может возвращать список из адресов.
  17. Основные плюсы: 1) Программа имеет приятный интерфейс. Кнопки, панельки, иконки. Здорово. Меню настроек хорошо. Впрочем это было и в прошлых версиях GodGame. 2) Поддержка GUI для трейнеров на первый взгляд лучше чем у Cheat Engine. И я сужу не по этом скриншоту, а по тому что можно писать в коде. Поддержка GUI или VCL более широкая и наверно все функции работают. У CE проблемы со свойствами цветов похоже для всех визуальных компонентов и присутствуют многие другие косяки с VCL. 3) Весьма удобна всплывающая справочная информация когда пишем скрипт. Чего у Cheat Egnine Lua_Engine не хватает так это именно этого. Данный код примера мне понравился.
  18. Ну, какие ещё способы могут быть Учи отладку и программирование и ты будешь видеть пути решения. public class SomeGun(){ .... void Fire(){ ..... } void UpdateInput(){ if (Unput.Mause(0)){ if(!timerStart){ timerStart = true; lastTime = 0; } else{ lastTime += Time.delta; if (lastTime > shotDelay){ // делаешь инъекцию кода "если оружие принадлежит твоему герою, то стрелять сразу" Fire(); timerStart = false; } } } } } Напиши программу на языке программирования под Windows выстрелов с задержкой - простое окно со строкой патронов. Как мышкой стреляешь, то у выстрелов задержка. Затем компилируешь в бинарник и отлаживаешь с Cheat Engine и учишься искать нужный участок кода, а лучше это делать с IDA. Мой совет в отличии от большинства - не искать задержку в структурах, потому что вероятнее всего её быстрее найти в отладке. Как найти участок кода выстрелов я кратко описывал здесь.
  19. Что касается задачи темы например для игры Crimsonland в которой довольно много монстров наседают со всех сторон. Функцию типа "если вижу объект А, то двигаться к нему" можно попробовать позаимствовать у ботов - существ, которые как только видят главного героя, то двигаются к нему. Для этого хорошо бы изучить код, который читает координаты героя именно для того чтобы боты двигались к ним... Затем изучить найденную функцию или участок в ней и возможно модифицировать в новую функцию в которой мы не двигаемся к объекту, а стреляем в него. Для начала, если будет даже выстрел не обязательно в ближайшего монстра, то это будет неплохо.
  20. Символ "_" это условное обозначение того, что переменная закрыта и объявлена внутри класса, а не внутри функции. Такой стиль используют многие программисты C#.
  21. Вот пример. trainerActivated.wav помещаем в ресурсы. using System; using System.Media; using System.Windows.Forms; namespace PlaySound { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private readonly SoundPlayer _soundPlayer = new SoundPlayer(); private void Button1Click(object sender, EventArgs e) { _soundPlayer.Stream = Properties.Resources.trainerActivated; _soundPlayer.Play(); } } }
  22. Вряд ли это можно сделать с помощью Артмани для любых игр. В современных играх под Windows замена модели персонажа возможна, но не всегда это сделать просто. В некоторой игре можно распаковать ресурсы, изменить их, запаковать обратно. Изменение может ограничиться редактированием скриптов, а может и нет. Это был простой случай. Другой случай довольно сложный, который я пока не делал. Проанализировать в отладчике машинный код, когда он создаёт модели персонажей. Ну и соответственно попытаться что-то сделать, чтобы решить поставленную задачу.
  23. ZOCKIR, ну ещё можно было бы доработать чтобы код смотрелся удобнее. Чтобы не приходилось часто в аргумент функции передавать имя процесса, а также чтобы не приходилось для каждого чексбокса писать обработчик. И лучше работать с массивом структур : "адрес, значение, размер в байтах "... Также создать класс по работе с процессом игры в котором бы инкапсулировалась работа по записи адресов через SystemProcess.WriteMemoryData(....) Да, и лучше чуть-чуть переписать SystemProcess сделав его не статичным классом, а с конструктором запоминания имени процесса.
  24. Пока не знаю, какие преимущества у этого варианта трейнера. Получается аналогия с *.CETRAINER, только в виде самостоятельной программы, а не ввиде разметки xml. Если ты имеешь ввиду как сделать так, чтобы не таскать за собой CE, то получишь скорее всего тот же автономный трейнер не меньше 3 Мб. Когда была CE 5.6 мне удалось уменьшить размер автономного трейнера до ~420 Кб где-то. Но не факт что такой размер можно сделать на CE 6.2. Как бы там не было по поводу танцев с размерами трейнеров. Я уверен, что один из лучших вариантов это существующий вариант с .CETRAINER. При запуске формата этих скриптов, автоматически скрывается CE и запускается Lua-скрипт. При чем вероятно, то что отрабатывает Lua скрипт будет работать не только на платформе Windows, но и на Mac и других...
×
×
  • Создать...

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

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