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

MasterGH

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

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

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

    129

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

  1. На первом курсе учёбы я учил ТурбоПаскаль по книге Меженного от корки до корки. Полезно было понимание фактических и формальных параметров (аргументов) передаваемых в функцию. Хороший пример ближе к концу книги про рисование с ООП: инкапсуляции, наследованием и полиморфизмом. Потом мы изучали язык C по курсу программы, но в него что-то не въезжал "хоть убей или лбом об стенку"... Я принялся за Дельфи и нажал на ООП в Дельфи. Давалось трудно, но тупиков не было. Потом как-то случайно начал читать книжку Шилдта Справочник по C++ и я стал понимать вещи, которые раньше не понимал, наконец C++ мне стал нравится. Потом я узнал про C# и ощутил его преимущества перед C++. C# и его поддержка VS2010 просто созданы для того чтобы выполнять задачи по работе с информацией на удобном языке. Такую работу как работу с текстовой информацией, с файлами и папками, с базой данных в XML или ином формате... там очень много областей применений. Больше всего эмоций доставляет программирование графики будь то 2D или 3D. Например, можно сделать так чтобы на области рисования передвигался круг когда мы нажимаем кнопки на клавиатуре влево, вправо, вверх и вниз. Это приложение можно сделать на любом языке программирования под Winodws. Потом я решил подтянуть знания по Win API и опять принялся за C++. В первую очередь обратил внимание на цикл работы основной программы... Дальше писать не буду что было, основное уже написал. ------------------- Но мне кажется, что удобнее чем C# по работе с информацией пока нет ничего подобного. Хотя может быть я ошибаюсь, не все возможные языки я знаю. Но у C# хорошая справочная поддержка MSDN. Лично тебе советую изучить C# по работе с созданием форм без Visual Studio. Это тему освещал Эндрю Троелсен в своих толстых книжках от версии нет 3.5. Я приведу пару примеров. После изучения простых примеров далее установить Visual Studio и обязательно Resharper, он будет помогать использовать определённый стиль. Все это дело бесплатное на 30 дней для некоммерческого использования. Есть свободная лицензия на Express версию VS. Здесь будем работать с проектами Windows Forms или консольными приложениями. Также есть другие среды разработок такие как MonoDeveloper на котором я сейчас работаю. Эта среда разработки "встроена" в Unity3D. После того как надоест Windows Forms можно рискнуть попробовать WPF. Но чтобы нормально писать на WPF мне пришлось довольно много времени потратить на изучение, не думаю что это будет легкой задачей. По поводу этой программы советую обратить внимание на примеры с интерфейсом пользователя. Вот один из них. Повторюсь интересны примеры при работе с графикой. Хотя бы взять этот пример.
  2. Попробуй так: using System; using System.Linq; using System.Runtime.InteropServices; using System.Windows.Forms; namespace SimpleTrainer { public partial class TrainerForm : Form { public TrainerForm() { InitializeComponent(); } const string ProcessName = "winmine"; // изменить на имя другого процесса private void Button1Click(object sender, EventArgs e) { // Изменить на нужный адрес SystemProcess.WriteMemoryData(ProcessName, (IntPtr)0x010056A4, new uint[] { 0xFFFFF }, 4); } public static class SystemProcess { [DllImport("kernel32.dll")] public static extern Int32 CloseHandle(IntPtr hObject); [DllImport("kernel32.dll")] public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId); [DllImport("kernel32.dll")] public static extern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, uint[] lpBuffer, UInt32 nSize, IntPtr lpNumberOfBytesWritten); public static void WriteMemoryData(string processName, IntPtr address, uint[] writeData, uint sizeData) { var idProcess = (UInt32)System.Diagnostics.Process.GetProcessesByName(processName).First().Id; var hProcess = OpenProcess(0x1F0FFF, 0, idProcess); WriteProcessMemory(hProcess, address, writeData, sizeData, (IntPtr)0); CloseHandle(hProcess); } } } }
  3. Cheat Engine 6.2 Alpha 2 Link What's new: Some bugfixes. (Try and find out which ones are fixed and which ones are not. Tell me to confirm. It's a fun game!) Added feature to automatically fill in pointers in structures Rightclicking registers in memview while debugging for show in disview/hexview While single stepping, and changing eip, will change the selected address if eip is the currently selected line... Appease the autoassembler NOP haters by just using the biggest instruction instead of filling with nops The addresslist now has a lua function to return the selected records Add address/change address should now support custom types (known bug: Editing an address with custom type doesn't set the typename) Report any bug and you find and gui suggestions, even if you think I already know about it
  4. На 100% я не знаю что делает "Lock mouse", т.к. в CE ещё не проверил, но обычно функция "Lock mouse" это принуждении курсора всегда быть по центру при чем курсор может не отображаться. Если это так, то у этой функции есть как минимум одно полезное применение. Когда в игре используешь InGameMenu, то блокировку курсора надо снять. Да, но когда меню надо закрыть курсор же надо так же "вернуть обратно" - зафиксировать его по центру, и продолжать играть как играли. Вот тут и пригодится эта функция.
  5. C# как и любой другой язык программирования имеет техническую справочную документацию. Чтобы освоить язык на минимуме и применять его в таких простых вопросах сначала изучают назначения основных сборок, пространств имен в этой документации. Затем идём по классам. И находим класс Keyboard System.Windows - пространства имен System.Windows.Input Keyboard - класс Keyboard - методы AddGotKeyboardFocusHandler - метод AddKeyboardInputProviderAcquireFocusHandler - метод AddKeyDownHandler - метод AddKeyUpHandler - метод AddLostKeyboardFocusHandler - метод AddPreviewGotKeyboardFocusHandler - метод AddPreviewKeyboardInputProviderAcquireFocusHandler - метод AddPreviewKeyDownHandler - метод AddPreviewKeyUpHandler - метод AddPreviewLostKeyboardFocusHandler - метод ClearFocus - метод Focus - метод GetKeyStates - метод IsKeyDown - метод --- > вот что тебе надо //.... Перейди по ссылке на которой найдёшь описание нужного примера. Вот ещё пример: //... if (Keyboard.IsKeyDown(Key.A)) return true; //...
  6. CheatEngine62Alpha1 Link What's new: New tutorial step D3DHook and lua extensions (mainly for creating gui's inside games) Rewrote the dissect data window from scratch (needs thorough testing) Merged Add Address and Change Address in one window redesigned from scratch Native threads for lua Some graphical functions have been exported to lua LuaCall AA command Some disassembler fixes Bunch of other bugfixes Still some stuff to add, but it got enough to test/play with. Know/reported bugs: custom types can not be set in the new Change Address window (yet) Report any bug and you find and gui suggestions, even if you think I already know about it
  7. keng, я думаю что не пять, а более. В моих целях применять ассемблер и диззассемблер во время работы трейнера используя CE Lua-engine - скрипты для создания автоматически формируемых инъекции по неизвестным дизассемблерными инструкциям по адресам внедрения нового кода с условиями в виде правил. Возможно твои цели менее глобальны и сканер на MASM-е тебя вполне устроит. Например, я желаю, чтобы программа нашла адрес сигнатуры кода и независимо от того какой именной машинный код там будет произойдёт внедрение постоянного условия - чтобы значение на текущей инструкции соответствовало правилу "Постоянное значение 500". Т.е. если у нас там будет mov eax, ebx, то сформируется АА-скрипт по записи в ebx числа 555, записи в eax значения из ebx и прыжок обратно в игровую рутину. Суть в том, что нужен не только сканер сигнатур, а дизассемблер и ассемблер и всё это во время уже запущенного трейнера. Пока я эту фишку с автоматически формируемыми инъекциями на CE Lua-Engine не реализовал. Зато сделал на Дельфи (где-то больше года назад что ли) для самых распространённых инструкций: mov, add, sub.... Исходники лежат в закрытом подфоруме, но видны Разработчикам..
  8. Как раз здесь не нужен этот модуль . И здесь код хаотичный, т.к. аналогично - без инкапсуляции данных. Без инкапсуляции приходится читать код в 2-3 раза медленнее. Суть такова. Есть чексбокс. Когда в нём ставим галку то, происходит заморозка по таймеру. Очевидно что нужно создать статический класс Трейнера и из обработчиков класса формы использовать методы класса трейнера. В C# нельзя обратиться к API функциям без объявления их импорта, типа этого. [DllImport("kernel32.dll", EntryPoint = "ReadProcessMemory")] private static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, [Out] int lpNumberOfBytesRead); Если писать на VC++, то с этим меньше гемора, т.к. там все эти функции используются через windows.h. А вообще как я сказал код без классов смотрится как "каша" или как бордак на рабочем столе как у меня сейчас. Куча ярылков, все некогда разгрести. Если сравнивать C# и С++ для создания трейнеров, то есть свои плюсы и минусы, которые зависят от того, какой трейнер нужен Разработчику. В качестве интерфейса C# нагляднее для новичков в программировании. А вообще на Visual Studio можно создавать два вида форм. Windows Forms и WPF. Последняя технология более смахивает на программирование по html разметке, только там разметка называется XAML. Я на ней уже не кодил почти два месяца, а раньше в захлёб писал только на WPF + C# каждый день в течении года, но когда я нашёл работу по Unity3D, то пришлось о Visual Studio пока забыть и писать на MonoDevelop. В данный момент вожусь с импортом и оптимизацией под Андроид, а затем под IPAD и Web-плеер в качестве плагина. Вообще я не жалею, что столько времени угрохал на GUI Windows и перешёл на GUI в Unity3D. Не жалею что сейчас работаю с .NET2.0, когда привык к .NET4.0 к Linq-выражениям.... Ладно, что-то я от темы отклонился. Короче, советую писать трейнеры на Cheat Engine. Есть прекрасное направление -> создание АА-скрипта по дизассемблерному коду, когда вы заранее не знаете, какая инструкция будет по адресу сигнатуры, но вы знаете первый байт. Адрес1: mov "вы не знаете что здесь","вы не знаете что здесь" *Адрес1 находим по сигнатуре На Lua-engine можно написать небольшой парсер для основных инструкций mov [reg1], reg2 mov reg1, [reg2] mov reg1,reg2 И если по адресу1, есть какой-то известный шаблон из трёх выше, то можно сделать генерацию АА-скрипта по шаблону и правилу. Например, правило "постоянное значение". В результате сгенерировать АА-скрипт с постоянным значением... Большинство трейнеров на языках программирования под Windows не обладают той потенциальной мощью, которую предоставляет Cheat Engine + Lua. Если эта мощь не нужна и хочется делать трйенеры для каждой версии игры, где каждый трейнеры весит от 16 кб (хороший трейнер на С++ или Дельфи без VCL или на MASM) до размера трейнера в 3 Мб сгенерированного на CE, то конечно это предпочтение каждого.
  9. VAMemory.dll как один из вариантов должна быть рядом. Второй вариант включить в ресурсы и извлекать из них. Третий вариант, написать свою обвёртку по работе Api Windows. Есть и другие. Делать трейнеры на C# как и на любом другом языке программирования круто до поры до времени. Потом можно понять, что придётся прикручивать что-то типа автоассемблера из Cheat Engine, потом в конце поймёшь зачем прикручивать, когда можно пользоваться CE и когда последний периодически обновляется с новыми идеями и возможностями.
  10. 1) Да исключения хорошо было бы обрабатывать, если они возникают хотя бы два: нет процесса, нет доступа к адресу. 2) По поводу вновь создаваемого VAM = new VAMemory("Need for Speed Underground 2"); Так можно писать и возможно даже нужно в данном случае, т.к. нет кода поиска процесса или его запуска и подразумевается, что трейнер будет работать, если игра будет открыта и закрыта несколько раз (типа подстраховки, чтобы не запускать трейнер вновь). Помним, что сборщик мусора следит за "мусором в памяти" и можно писать new в случаях, когда он не очень часто применяется. 3) Ну и наконец неплохо бы использовать такой метод как инкапсуляция и по возможности не писать код в одну строчку. using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Windows.Forms; namespace Trainer { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { label2.Text = GameNFS.GetMoney(); } private void button2_Click(object sender, EventArgs e) { var newMoneyValue = textBox1.Text.ToString(); GameNFS.SetMoney(newMoneyValue); } } public static class GameNFS { const _processName = "Need for Speed Underground 2"; const _addressMoney = 0x00861E74; public static string GetMoney() { var VAM = new VAMemory(_processName); var moneyValue = VAM.ReadUlong((IntPtr)_addressMoney); return Convert.ToString(moneyValue); } public string void SetMoney(string newMoneyValue) { var VAM = new VAMemory(_processName); var uintMoneyValue = uint.Parse(newMoneyValue) VAM.WriteByte((IntPtr)0x00861E74, uintMoneyValue); } } } На ошибки я не проверял...
  11. В группу добавлен. При публикация нужно писать версию игры. На счёт трейнера. Я рекомендую использовать MasterGHLuaTrainerSource_V1.lua и использовать Cheat Engine6.2 в качестве исполняемой программы для скриптов .CETRAINER.
  12. Класс VAMemory должен иметь методы чтения не только ReadByte, но и других. Соответственно Byte заменить на нужный тип. По аналогии Byte.Parse, так нужно заменить на нужный тип. Да и почти все ответы можно найти в MSDN.
  13. Если своей работы ноль и вопросы общего характера, то и ответы на эти вопросы не могут быть подробнее и также относятся к ответам общего характера. << Еще вопрос как взломать звездочки? << И как сделать так, что бы стрелять без перезарядки? Ответ. Берете сканер памяти, отладчик/дизассемблер и исследуете машинный код который работает с адресом количества звёздочек и машинный код который работает с логикой перезарядки. Затем меняете код на тот, который даёт нужный результат.
  14. Создание повторной темы. Оформление не соответствует образцу.
  15. Вот на текущий момент опубликованная не по правилам тема. Kvaz этой темой не занимался к примеру. Один из лучших модераторов для форума "Трейнеры, скрипты, модули (PC, Windows)" этот тот человек который постоянно и чаще всех находится в этом форуме. Но это моё ИМХО. Что касается меня я, например, устал следить за порядком и читать одну за другой создаваемые темы.
  16. Пока никто никому не обещает дать права модератора. Посмотрим. Если кого-то назначат, тому сообщат.
  17. Да, по правилам публикуется одна тема для одной игры. В этой теме писать скрипты, трейнеры, модули... для одной игры. Хочу предложить кандидатуры Grom-Skynet, ZOCKIR на доступ к модераторским функциям в форуме "Трейнеры, скрипты, модули (PC, Windows)". Если вы оба согласны, а также согласны Xipho, Kvazimado, то почему бы и нет. Никто ничего не путает. Публикация файлов на форуме это временная мера. На сколько я знаю Xipho писал, что делал или делает поддержку публикации трейнеров. Так что ждём. Я в php и в настройках доступа не очень шарю.
  18. Версию эту искать я не буду. Версии которыми я пользуюсь можно было увидеть по ссылке которая опубликована мной в соответствующей теме. Там есть более новые версии. Но я так понял проблема в этих ошибках. frmStringMapUnit.pas(31,26) Error: Identifier not found "TREGExprEngine" frmStringMapUnit.pas(31,26) Error: Error in type definition frmStringMapUnit.pas(41,146) Error: Identifier not found "TREGExprEngine" frmStringMapUnit.pas(69,26) Error: Identifier not found "TRegExprEngine" frmStringMapUnit.pas(69,26) Error: Error in type definition frmStringMapUnit.pas(85,1) Fatal: There were 5 errors compiling module, stopping Т.е здесь ошибка в отсутсвии класса TREGExprEngine. Этот класс нужен для вычисления регулярных выражений. Он находится в модуле RegExpr версии от 2008 года (C:\lazarus32\fpc\2.5.1\source\packages\regexpr\src\regexpr.pp). Также нужно иметь regex.pp(C:\lazarus32\fpc\2.5.1\source\packages\regexpr\src\regex.pp) Как можно было заметить со сборкой с сайта снапшотов(ссылку на него я давал в теме комплияции CE) с lazarus32 всё пучком, а с lazaruz64 указанные файлы regexpr.ppи RegExpr.pp старые вроде аж от 2002 (или 2004) года. Раньше в ревизиях CE класс TREGExprEngine не использовался. Выход в данном случае, видимо, установить/обновить новый пакадж(или пакет) или заменить вручную старые файлы на новые. Пока эту проблему я тоже не решил и компилирую CE 32-разрядным lazarus-ом с сайта снапшотов.
  19. Внимание Я что забыл написать. На форуме control_onClick(btnAboutExit, OnMusicStopAndExit) там где красная буковка надо исправить на заглавную. Иначе у вас скрипт будет выдавать ошибку. Дело в том что форум автоматически исправляет букву "C" на букву нижнего регистра для защиты от XSS. btnAboutExit = createButton(formInfo) control_setCaption(btnAboutExit,"Exit") btnAboutExitWidth, btnAboutExitHeight = control_getSize(btnAboutExit) control_setPosition(btnAboutExit, formInfoWidth - 3 - btnAboutExitWidth, formInfoHeight - 3 - btnAboutExitHeight) control_onСlick(btnAboutExit, OnMusicStopAndExit) // здесь исправить!
  20. function timerGUIAboutLabel() if deltaAboutY < -50*15 then formInfoWidth, formInfoHeight = control_getSize(formInfo) deltaAboutY = formInfoHeight + 10 else deltaAboutY = deltaAboutY - 1 end control_setPosition(AboutLbl, 40, deltaAboutY) -- вот эта команда устанавливает позицию длинной строки титров с фиксированной шириной end Прежде всего на скорость влияет: timer_setInterval(timerGUIAbout, 20) Здесь 20 это интервал таймера, чем он больше, тем медленнее. Ещё скорость можно увеличить перемещая строку не на одну позицию, а более: function timerGUIAboutLabel() if deltaAboutY < -50*15 then formInfoWidth, formInfoHeight = control_getSize(formInfo) deltaAboutY = formInfoHeight + 10 else deltaAboutY = deltaAboutY - 1 -- если изменить 1 на большее значение, то текст будет двигаться менее плавно, но быстрее end control_setPosition(AboutLbl, 40, deltaAboutY) end
  21. Не забудьте указать свой путь к треку с музыкой
  22. Ramil, это надо писать Дарк Байту на английском. на его форуме. Ошибка похоже связана с тем что не хватает где-то места для записи 753 МБ. Происходит исключительная ситуация и исключение это заведомо не обрабатывается так чтобы продолжить сканирование, а просто как видим выдаётся сообщение.
  23. Такого предназначения в MSDN не указано. И вообще формулировки о том, что это сообщение предназначено для чего-то нет. Есть описание в связи с чем это сообщение появляется. И появляется по клику по не рабочей клиентской области и это не только заголовок. Никакой речи не может быть чтобы рекомендовалось или только использовалось WM_NCLBUTTONDOWN с HTCAPTION. Есть только одна рекомендация, где-то я её видел. Использовать только документированные функции и константы. В примере который я привёл одна из "переменных" не документирована в winuser.h.
  24. Это для тех кто заходит в первый раз и для тех кто выключает какиезы.
×
×
  • Создать...

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

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