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

MasterGH

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

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

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

    129

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

  1. >> Есть методы лучше и вернее, о них читай статьи и темы на форуме и сайте. Например, это может быть поиск процесса из списка процессов по его имени. Ещё каких-либо методов поиска процесса кроме "как по окну" или "по его имени" я не припоминаю.
  2. О плагине Привет . Короче, плагин просто необходим для сверхбыстрых манипуляций со скриптами. Плагин позволяет работать со списком файлов открываемых при помощи Cheat Engine. Это файлы преимущественно *.CT и *.CETRAINER. Есть возможность видеть и другие файлы. Давным давно меня замучило создавать и искать временные мои таблицы для Cheat Engine и открывать их через кучу действий. Этот плагин должен помочь в этой задаче. Ну, и я держу прицел на будущие задачи: создание базы данных для множества игр в сочетании с этим плагином + плагин компактного вида CE + удалённая подгрузка скриптов с нашего ресурса. Если посмотрите мой исходник, то по умолчанию берётся папка со скриптами для CE в "Моих документах" текущего пользователя, но можно указать и любую другую. local path = 'C:\\Users\\'..os.getenv("USERNAME")..'\\Documents\\My Cheat Tables\\' Версия плагина 0.2 Plagin_MainWindow_FileList.rar 1) Просмотр списка файлов в директории 2) Фильтрация списка для *.CT 3) Фильтрация списка для *.CETRAINER Плагин ещё не доделан даже до версии 1,0. Если у Вас есть свободное время, можете попытаться помочь в дописывании этого плагина. Ваша помощь будет очень полезна.
  3. 1) Найти адрес; 2) Найти инструкцию, которая с ним работает поставив на адрес брейкпоинт; 3) Написать автоассемблерный скрипт, который будет записывать по адресу постоянное значение. На форуме можно найти много примеров. Дугой вариант искать цепочку указателей. Это может оказаться довольным долгим занятием. В прочем много времени может уйти на что угодно - это зависит от конкретной игры.
  4. Я думаю, что можно использовать. Работать можно с функцией PointerWrite(IntPtr MemoryAddress, byte[] bytesToWrite, int[] Offset, out int bytesWritten) Работать можно приблизительно так: Memory memory = new Memory(); // обычное действие при работе с классами memory.ReadProcess = ; // присвой процесс (ты уже знаешь как его найти) memory.Open(); // открыть процесс IntPtr MemoryAddress = ; // вводишь базовый адрес модуля byte[] bytesToWrite = new byte[]{0xff,0xff,0xff,0xff}; // записываемые байты можешь забить вручную или через конвертер из десятичного в шестнадцатеричную форму int[] Offset = new int[]{0xff,0xff,0xff,0xff}; // вводишь нужные оффсеты со своего скирншота int bytesWritten = 0; // просто инициализация memory.PointerWrite(MemoryAddress, bytesToWrite, Offset, out bytesWritten); if(bytesRead.Length < 1){ // было ли что-то записано? //выдать ошибку в консоли } else { // выдать сообщение в косоли о том что успешно } Можешь провести различные эксперименты долго и упорно, и тогда обязательно что-нибудь получится.
  5. Это специфика языка Lua. Нужно использовать двойную косую черту. Одна косая черта это специальный символ. Пример path = "D:\\CodeCH\\Trainer OOP\\Test\\Test.exe" shellExecute(path)
  6. Тема о GHLBook перенесена мной в подфорум "Быстрая информация". Теперь её могут видеть все и скачивать только пользователи форума. >> что надо бы отредактировать сайт, дабы скачивание шло через него, а не через форум. Ничего плохого не вижу, если скачивание будет через форум. Администрации не придётся отслеживать новые изменения в теме и вносить их на сайт.
  7. ICEBURG, хорошо бы делать проверки выполнения функций (в данном случае это поиск окна, открытие процесса) с выводом результата на консоль, если это консольное приложение и мессагами(окнами сообщений), если это консоль отсутствует; А по FindWindow при создании трейнеров в Интернете должно быть очень много примеров. Слова для поиска "C++ Trainer FindWindow"
  8. Если я правильно помню, то cheat engine 5.6 в генерируемых трейнерах не поддерживает функцию изменения скорости игры. Но в CE 6.1 и 6.2 (бета-версии) можно на Lua написать поддержку изменения скорости, а далее сгенерировать *.exe трейнер. Только размер последнего будет не меньше чем 2,4 мб. Могу посоветовать использовать Lua-трейнеры как файлы формата *.CTRAINER или *.CT- таблица. Эти файлы без CE не запускаются.
  9. Я немного прошлый код переписал using System; using System.Diagnostics; namespace ModuleBase { class Program { const string processName = "tutorial-i386"; // не пишем расширение "*.exe" const string someModuleName = "ole32.dll"; static uint GetProcessBaseAddress(Process currentProcess) { return (uint)currentProcess.MainModule.BaseAddress; } static string GetProcessStringBaseAddress(Process currentProcess) { return "0x" + currentProcess.MainModule.BaseAddress.ToString("X"); } static uint GetModuleBaseAddress(Process currentProcess, string moduleName, bool ignoredCase) { var modules = currentProcess.Modules; var max = modules.Count; for (int i = 0; i < max; i++) if (String.Compare(modules[i].ModuleName, moduleName, ignoredCase) == 0) return (uint)modules[i].BaseAddress; return 0; } static string GetModuleStringBaseAddress(Process currentProcess, string moduleName, bool ignoredCase) { var modules = currentProcess.Modules; var max = modules.Count; for (int i = 0; i < max; i++) if (String.Compare(modules[i].ModuleName, moduleName, ignoredCase) == 0) return "0x" + modules[i].BaseAddress.ToString("X"); return ""; } static void Main(string[] args) { var arrayProcesses = Process.GetProcessesByName(processName); if (arrayProcesses == null || arrayProcesses.Length < 1) { Console.WriteLine("Process not found"); return; } var currentProcess = arrayProcesses[0]; // Получить строку базового адреса процесса var str1 = GetProcessStringBaseAddress(currentProcess); var line1 = String.Format("Address prosess: {0}.exe = {1}", processName, str1); Console.WriteLine(line1); // Получить строку базового адреса некотрого модуля someModuleName var str2 = GetModuleStringBaseAddress(currentProcess, someModuleName, true); var line2 = String.Format("Address module: {0} = {1}", someModuleName, str2); Console.WriteLine(line2); Console.Read(); } } } >>Да уж, и все таки как все это приляпать к трейнеру? Если сложно встроить новый код, то могу посоветовать создать новый проект можно консольный или WinForms, или WPF в зависимости от опыта и от того что попроще. Для экспериментов по чтению и записи для адресов с цепочками указателей проще работать с консольным проектом. Так вот создаёшь пустой проект. Вставляешь в него мой код. Проверяешь со своими значениями. Если всё работает, то теперь думаешь как написать код по чтению и записи значений. На нашем форуме должны быть примеры кода чтения адресов по пути указателя. Тебе нужно поискать этот самый код. Копировать и вставить в проект. Далее его нужно изменить с учётом базового адреса модуля. т.е. к базовому адресу будешь прибавлять смещения и читать адреса. Получишь конечный адрес. В этот адрес осуществишь запись. Проверяешь если всё работает, то начинается следующий этап. Открываешь предыдущий свой проект и колдуешь в функции UpdateCheatsTMR_Tick(). Именно в ней может быть проверка существования адреса по указателю и запись по нему, если этот адрес существует.
  10. Ой, моя ошибка. Надо использовать: String.Compare(modules[i].ModuleName, someModuleName, true) == 0 Эта строка возвращает истину, если строки равны без учёта регистра. А этот код возвращает немного другое modules[i].ModuleName.Contains(someModuleName) Он возвращает истину, если имя модуля содержит указанную подстроку someModuleName. И в роде с учётом регистра. Во всяком случае с учётом регистра или без решать не мне. Но, я обычно не учитываю регистр.
  11. Если я правильно понял требуется найти базовый адрес hw.dll, тогда достаточно: var someModuleName = "hw.dll"; >> может так? Можно и так. Ошибки не должно быть при выводе имени. Нам важно задать имя модуля в someModuleName. Я думаю дальше не будет сложностей с чтением адреса по цепочке указателей начиная от базового адреса модуля или начиная от базового адреса процесса. Надо просто прибавлять смещения к базовому адресу и читать адреса.
  12. Столкнулся с интересной ситуацией. Пользователь может удалить пост о прошлой версии трейнера и создать пост заново. Это хорошо, что пользователь честный и напишет, что это обновлённая версия трейнера. А если пользователь взял да и забыл написать, что версия обновлённая (при этом не понятен объём обновления). Создаётся ситуация, что Трейнермейкер создал трейнер, а репутацию за него ещё не получил. И тогда, если Администратор не будет лазить в корзину, можно репутацию получать сделав один и тот же трейнер. Я не знаю может быть запретить изменять и удалять посты из форумов создания Трейнеров и Таблиц? И насколько это будет неудобно самим Авторам трейнеров? Вот конкретный пример (последний пост). Только что ставил пользователю 24K репу и уже забыл сколько у него было ранее и непонятно какие обновления теперь. А впечатление, что репутацию как-будто и не ставили вообще.
  13. Ой, что-то я совсем не то посоветовал . "GetModuleBaseName не возвращает адрес модуля, а возвращает имя модуля по его уже известному описателю (хендлу). Один способ точно должен работать - перебирать все данные модулей для конкретного процесса. Как найдёшь нужный модуль, то извлекаешь информацию о его базовом адресе. Т.е. нужно найти этот способ перебора модулей на C# и посмотреть поле базового адреса. Вот и всё. Поскольку я посоветовал не то что нужно и наверно заставил искать в ненужном направлении, вот решение. Допустим имеем процесс с названием test.exe и модуль user32.dll. И нам нужно найти базовые адреса и того и того. using System; namespace ModuleBase { class Program { static void Main(string[] args) { var processName = "test"; // не пишем расширение "*.exe" var someModuleName = "user32.dll"; var arrayProcesses = System.Diagnostics.Process.GetProcessesByName(processName); if (arrayProcesses == null || arrayProcesses.Length < 1){ Console.WriteLine("Process not found"); return; } var currentProcess = arrayProcesses[0]; Console.WriteLine("Address prosess: " + processName + ".exe" + " = " + "0x" + currentProcess.MainModule.BaseAddress.ToString("X")); var modules = currentProcess.Modules; var max = modules.Count; for (int i = 0; i < max; i++) if ( String.Compare(modules[i].ModuleName, someModuleName, false) == 1){ Console.WriteLine("Address module: " + modules[i].ModuleName + " = " + "0x" + modules[i].BaseAddress.ToString("X")); break; } Console.Read(); } } } Вывод будет: Желаю успехов!
  14. Прекрасная тема Я оставлю на неё ссылку на главном сайте.
  15. Для получения базового адреса на C# можешь поискать код примеров в поисковике "C# GetModuleBaseName". Получишь базовый адрес, а далее прибавляешь к нему смещения какие нужные для чтения адреса и конечного значения. Если не найдёшь примеров, то поищи исходники трейнеров на C# или других языков .NET, и в них работу с GetModuleBaseName.
  16. -1 Поставил поставил Kvazimado. Я точно не знаю по какой причине Kvazimado поставил -1, но наверно это было оправдано. Я поставил +1, т.к. у меня тоже есть право голоса. Ещё один голос за Xipho остался свободным. Статья для совсем новичков я думаю подойдёт (моё предположение). Могут найтись и люди, которым проще понять перечень кратких действий на примере некоторой игры.
  17. Версия плагина 1.1 Plagin_MenuDisassembler_GenericAA.rar Добавлены:
  18. Я думаю это лишнее, потому что у обсуждения должна быть тема. Конкретную тему и обсуждают. Если на какой-то полезный вопрос ответят полезным ответом (даже во флудильне), то найти ответ может быть и будет возможным через поиск, однако отследить всю ветвь общения будет тем сложнее чем больше сообщений в этой теме будет. Если подразумевать, что в новой "особенной теме" будут совсем неполезные обсуждения "типа какая завтра погода", то в этом случае я не знаю как быть. Последнее слово за Xipho и Kvazimado.
  19. >> сделал бы кто плагин чтоб формировался АА скрипт с проверочными байтами Эта поддержка скоро появится. Возможно сегодня. Чтобы в скрипте вы видели базовый адрес как символьное имя например "game.exe + смещение:" В CE зайдите в дизассемблер и нажмите на Ctrl+M или через меню View->Show Module Addresses. После этого в ваших скриптах вы смоежете понять в dll-ке ваш код или нет. Настоятельно рекоммендую поставить эту опцию и больше её не снимать. Только в крайних случаях, когда вам нужно знать только адрес.
  20. Версия 1.0 Plagin_MainWindow_CompactView.rar Плагин добавляет новое меню, которое может делать компактным главное окно CE и отменять изменения. Код плагина можно использовать в своих *.CETAINER-ах или *.CT-таблицах. Таким образом окно Cheat Eninge превращается почти в "трейнер" в котором может быть очень много записей различной вложенности. Также записи могут быть сгруппированы, активироваться и деактивироваться по группам.
  21. Вниманию Администрации и пользователей. Мной открыт новый подфорум Lua плагины. Буду рад, если вы примите в нём участие в создании и обсуждении lua расширений для Cheat Engine.
  22. Внимание! Новые версии плагина искать в конце темы Последняя версия плагина - здесь Видео инструкция для новичков - здесь Версия плагина 1.0 Plagin_MenuDisassembler_GenericAA.rar 1. Создаёт АА-код аналогично шаблону Дарк Байта 2. Без комментариев 3. Без часто лишней метки Exit 4. Высвобождение памяти помещено в самый низ. 5. Можно выделить строку в дизассемблере и нажать на горячие клавиши "CTRL+SHIFT+A". Тут же увидите новую запись в главной таблице CE. 6. Для тех кто не хочет запоминать горячие клавиши функцию создания АА я разместил в контекстном меню с названием "* Create AA" К сожалению редактор АА-скрипта автоматически открыть через Lua нельзя. Но я написал об этой проблеме Дакр Байту, возможно он добавит эту поддержку. Как пользоваться скриптом
  23. 1. Условимся в публикации Lua расширений для версий не ниже CE 6.2. CE 6.2 пока не вышла, но к тому времени у нас уже будут какие-то плагины. Я постараюсь наполнять этот подфорум плагинами от мелочей, до чего-то более менее серьёзного. 2. Условимся в том, что плагины, т.е. файлы lua мы будем размещать в папке "autorun". Любые lua файлы в этой папке запускаются автоматически при запуске CE. Во вложенных папках не запускаются, поэтому придётся указывать путь к файлу во вложенной папке. 3. По публикациям плагинов пока никаких правил особых нет. По возможности меньше флуда и больше дела. Спасибо всем за участие и внимание.
  24. Поверь мне. Он сам прекрасно знает об этой проблеме и не хочет ей заниматься, т.к. она менее приоритетная. Поэтому я намекать ему не буду. Могу тебе посоветовать написать подгружаемую при старте системы dll-ку c хуком, которая 1) перехватывает функцию запуска приложения, 2) сверяет его имя со словами "Cheat Engine' (ну или другие слова...) 3) сверяет данные из реестра о последнем запуске CE 4) если версия запускаемой от той которая в реестре отличается, то запускаем сначала ceregreset.exe из той директории CE, которую пытаемся запустить, ждём завершения ceregreset.exe 5) возврат на оригинальный код. (т.е. теперь запускаем, тот процесс который пользователь хотел запустить без ожидания завершения) Вот и всё, если конечно ОС позволит делать хук. И будет конец, твоим мучениям.
  25. Каждый раз при такой ошибке я использую программу ceregreset.exe. Находится в директории с программой. К сожалению этот момент Дарк Байт не продумал.
×
×
  • Создать...

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

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