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

MasterGH

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

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

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

    129

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

  1. 1. Почему ты считаешь что это "объект", а не структура? Какие отличия объекта от структуры? (каверзный вопрос с прицелом на второй) 2. У тебя есть утверждение из цитаты выше: Как ты узнаёшь что функция является членом класса? Точнее как ты пришёл к такому выводу? Если ты определял это по тому что функция работает с ecx ведь это ещё не значит что эта функция член класса (кстати о каком классе идёт речь, да и потом может быть там класса вообще нет а ecx указатель на структуру)... ...Другое дело писать псевдокод по метаданным (правда я эту часть не исследовал, знаю что эти метаданные вшиваются компилятором). Просто подразумевается что ты по каким-то соображением построил псевдокод "Game::AddResources" void Game::AddResources (...) Но про метаданные ты ничего не упоминаешь и никто не понимает как ты пришёл к выводу что функция является членом класса. Что ты работаешь именно с объектом... На С++ можно написать функции которые никак не связаны с классом и экземпляром класса и эти функции без метаданных нельзя относить к членам класса. Если я не прав, прошу поправить
  2. От него Дарк Байт отказался лишь в силу того что CE портировался на новый компилятора free Pascal. Я не знаю какие там проблемы были - скорее нужен был срочный реализ на Январь, а трейнерогенератор подключить не успели. Сейчас у нас на форуме "Реализи CE" доступны ссылки на альфа версии CE 6.1( там есть даже IDE для трейнера). Трейнер может быть как привязкой к CE 6.1 так и работать автономно, т.е. "exe файл". Но его размер будет около 3 мегабайт. Почему такой размер большой можно догадаться... Поэтому я агетирую пользоваться файлами скриптами, а не автономными трейнерами. Это наиболее простой вариант. Есть ещё один вариант - мой C# в связке с C++ (лаучнер.exe, dll-модуль внедряемый в игру из БД модулей, модуль функций). Каждый модуль из БД модулей написан на C++ специально для каждой игры содержит файлы ресурсов и собственный код. Да, но в этом случае придётся писать свой ассемблер/дизассемблер для ~70 распространённых инструкций ассемблера. Короче вариант с CE самый лучший для меня в плане затрат труда и времени. t=readBytes(0x00B307E4,10) в этом примере выведет только один байт. Если надо больше, то можно добавлять переменные до равенства b1 b2 b3 b4 b5 b6 =readBytes(0x00B307E4,10) Теперь можно работать с отдельными байтами. Если тебе нужно работать с массивом байт просто используй цикл и чтение в промежутке адресов памяти. CE 6.1 Альфа 8 содержит новые LUA функции и исправления, так что лучше пользоваться ей и сравнивать с предыдущими версиям. На какой версии лучше генерировать трейнеры пока не знаю. Но раньше мы это делали без LUA поддержки на версии CE 5.6. Это делать весьма просто. Если требуется у нас на главном сайте есть русская версия CE 5.6 которую нужно поставить поверх английской. На форуме куча примеров от наших пользователей по скриптам автоассемблера. А вот когда реализ CE 6.1 появится тогда можно будет насладится новыми возможностями LUA поддержки и публиковать скрипты запечатнные в файле .ct.
  3. bortolomeo (новый пользователь с багажом сильных знаний, уже не простой пользователь ) Добро пожаловать в группу Разработчики! +30 За присутствие практического опыта и теоретической базы (честно говоря, лично я дал бы больше, но я учитываю оценку администраторского состава (возможно я слишком разбрасываюсь баллами)) +10 За 2 статьи
  4. Этот вопрос поднимал SER[G]ANT на форуме CE. Ответ - "только вручную"! Придётся перейти в дизассемблер (и не раз переходить по разным адресам) выделить инструкции и нажать на CTRL+C. Вылезет окно с выбором что копировать (отдельно или вместе): адреса, байты, инструкции. Если интересно моё мнение, то можно пояснить почему лучше так не делать (т.е. копировать вручную байты и использовать их далее). Даже если бы и выводились байты как у TMK чтобы написать свой трейнер например на C++, то всё это в итоге занимает лишнее время, т.к. удобнее использовать скрипты CE и сам CE. К этому выводу судя по всему пришёл SER[G]ANT и я считаю что он пришёл к удобному решению несмотря на такие недостатки как размер генерируемого трейнера в ~800кб (и более) на версиях до CE 6.0. Для человека, который уже писал кучу трейнеров на Дельфи/С++/MASM/FASM... в первую очередь важно удобство и приемлемая скорость работы его программы. CE позволяет работать только с кодом инъекции описанной на скриптах. Это очень удобно. Наверно, я уже навязываю это "удобство", так что я более этого делать не буду.
  5. Может быть таскать и не обязательно по каким-то соображениям. Но CE поддерживает LUA функции дизассемблера, ассемблера, отладки , различные методы обхода защит... И это уже написано, и это обновляется и фиксится. И это можно очень умело использовать при создании автоматических инъекций в новых патчах одной и той же игры. Можно, конечно не "таскать" CE, а использовать его исходники с каждым обновлением вырезая их из проекта SVN. Можно вообще не использовать функции диз/ассемблера и отладки и делать трейнеры под каждую игру, под каждый новый патч. У каждого человека свои взгляды на то что может уметь его трейнер. По вопросам с LUA подсказать пока не могу. Ибо с LUA мало опыта. Точнее разобраться я могу, но позже.
  6. Публикация трейнеров за март и по 20 число апреля 2011 Grom-Skynet +15 За публикацию своих трейнеров. ZOCKIR +10 За публикацию своих трейнеров. aliast +4 За публикацию своих трейнеров.
  7. Форум уже существует уже второй год и где-то уже обсуждалось применении aobscan. Интересующиеся могут воспользоваться поиском. Эта функция появилась в CE 5.6. В новых версиях она осталась, а также у неё появились новые параметры в LUA-engine в версии CE 6.1 (пока официального реализа не было) Об этой функции. Эта функция сканирует память процесса. Если использовать в Автоассемблере версии больше 6.0, то сканирует ВСЮ память процесса. Если использовать в предыдущих версиях, то сканирует память тип которой указан в настройках. Это не всегда удобно, т.к. в настройках обычно не указано искать память executed и приходится лезть частенько в настройки и менять тип сканируемой памяти, чтобы поиск шёл быстрее когда executed сканировать не требуется. Как я уже писал в LUA-engine в CE 6.1 версии aobscan может иметь настройки сканируемой памяти и сканирование будет значительно быстрее. Но сейчас рассматриваем aobscan в автоассемблере.
  8. Если будите писать статью, то пишите лучше отдельной темой, а не в этой. В будущем я создам подфорум "Программирование трейнеров на Delphi" и в нём будут темы из постов этой темы, а также отдельные темы. Кстати DefWindowProc правильно располагать в конце WindowProc(), а не в начале как в вашем коде. То что вы трейнеры умеете писать на WinAPI это весьма похвально. Если стремиться к маниакальному размеру трейнера, то Вы сами можете увидеть в дизассемблере, что каждый Ваш трейнер будет иметь схожую информацию с другими трейнерами. Само содержание файла .exe будет повторяться и т.п. Это наводит на мысль иметь один исполняемый .exe файл который обрабатывал бы сверх компактные "скрипты-сценарии" + файл ресурсов. Именно это умеет делать LUA-engine в Cheat Engine 6.1 (которая пока ещё официально не отреализина). Т.е. то же что вы пишите на Дельфи, можно написать с успехом на LUA... Так что имейте в виду, что Ваши трудовые ресурсы которые вы вкладываете в свой трейнер на Дельфи WinAPI больше и трейнер ваш не такой компактный, если он будет не один, а их будет больше ~100. Наличие Cheat Engine это единственный недостаток для малых скриптовых-трейнеров... Успехов!
  9. Повышения за перевод CE 6.1 альфа 8: SER[G]ANT +40 (за наиболее полный перевод) ZOCKIR +10 (за труды своего перевода) aliast +7 (за дополнения к переводу SER[G]ANT-а) Осталось дело за немногим: написать руководство для русскоязычных пользователей и отправить файл разработчику CE.
  10. "уж больно увесистый и некомпактный трейнер"... Это Вы похвастаться хотите?! Ну пусть будет так. Вы можете создать свой пост с содержанием того как может выглядеть первый пост этой темы. Если всё будет ок, то я изменю свой первый пост должным образом.
  11. Если это поможет, то первое и второе задание так будет выглядеть на C#:
  12. А, я понял для чего эта функция. Она ищет в коде процесса игры функции которые что-то генерируют "случайное". Ну например, из колоды в пять карт берётся рандом от 1 до 5. Так вот выключив рандом будет например всегда браться первая карта, ну или что-то в этом роде.
  13. Для желающих Задание на работу с текстом (когда-то я его делал, только на Дельфи) Найдите 1 том романа "Война и мир" в формате .txt. Напишите программу которая выполнила: 1) подсчитать сколько раз повторяется буква "А" без учёта регистра; 2) найти букву, которая повторяется большее число раз среди всех без учёта регистра 3) подсчитать количество слов в романе 4) подсчитать сколько раз какое слово существует без учёта регистра 5) сохранить информацию о результате пунктов 1-4 в новом текстовом фале Всё
  14. Хорошо, я могу подкидывать задания от простых до средне-простых, которые более вероятно могут пригодится. Задание 1 (технология WindowsForms, пользовательские параметры)
  15. Думаю, что нет, но точно не могу сказать. В MSDN я не нашёл информации.
  16. Хочу написать о высокоточном измерении времени в C# и тестировании циклов Прочтение этой информации позволит вам с высокой точностью определить время выполнения участка кода. Впрочем эта же информация лежит в закромах MSDN. Всем известно, что .net программы работают медленнее C++. Напомню, что CIL-код .net приложения при первом запуске компилируется JIT компилятором в машинный код, т.е. в тот же код который мы привыкли видеть в дизассемблерах под WIndows. Но оптимизация самого CIL-кода по всему приложению и затем оптимизация с компиляцией в машинный код происходит не так хорошо как это делает компилятор C++. В связи с этим будет очень полезно раз и навсегда уяснить как мерить производительность. Сегодня ради эксперимента я измерю производительность трёх циклов: for, foreach и цикл foreach функционального выражения. Все эти элементы будут делать схожие вещи.
  17. Версия 3.X. Игру запустил под эмуляцией в даймон тулс с простым отключением физического привода, с включением расширенной эмуляцией и миним образом точной топологии с ключём диска (это сделал только ради исследования игру потом сразу удалю т.к. я в игры уже давно не играю). Когда в игре ставишь аппаратный бряк на доступ к коду. Игра тут же замораживается. А после начинает работать с частотой один кадр в пять-10 секунд. Слышен звук игры. А после происходит остановка звука, а затем и анимации. Если снять бряк игра работает как и работала. Если описанное выше делать часто, то рано или поздно игра зависнет. При чем бряк ставил на коде в dll-ке и код там явно CPU-шный. Dll-ка ничем не запротокчена по свединям пейда. Пытался же ставить бряк на чтение самого кода, тот же эффект - игра тут же морозится без прерывания. Ставил разные режимы скрытности отладчика CE. Всё бестолку. Но под Olly я ещё не запускал... у ней есть различные плагины - надо попробовать. Но Олька конечно отладчик третьего ринго, на неё надежды очень мало в том чтобы понять из-за каких конкретных причин невозможна отладка... Тут можно ещё долго всего писать. Да что мучиться с отладчиком и так понятно, что не работает. Второй версией я заниматься не буду. На это не желания. Попробую в первой версии найти цепочки указателей предположительно меньше 4-х уровней. С этим вопросы. 1) В первой версии где на панели пилота посмотреть сколько осталось ракет-ловушек? Желательно скриншот привести. 2) Возможно ли увеличить количество топлива в игре - как происходит заправка и как её сделать?
  18. В общем полазил я по этой игре... СтрарФорс своей "звёздной силой" не позволяет ставить брейкпоинты на выполнение кода в функции (видимо, в игре в агонии рассинхронизируются потоки и синхронизировать их как надо не представляется возможным): int __thiscall AFM__JetEngine__getFuelConsumption(void *this, int a2) { int result; void *v3; void *v4; v4 = this; if ( a2 ) { v3 = v4; *(_DWORD *)a2 = *((_DWORD *)v4 + 68); result = *((_DWORD *)v3 + 69); *(_DWORD *)(a2 + 4) = result; } return result; // возврат расхода топлива } При чем все равно какой режим скрытности ставить в CE в опциях отладчика. Также рядом есть и функция установки расхода топлива. Но из-за невозможности подключить отладчик исследовать их не представляется возможным. Пока самый простой выход искать и далее использовать многоуровневые указатели на адрес топлива и на адрес тепловых ракет - ловушек....
  19. Даже если я дам ответы на твои вопросы это мало поможет решению проблемы. Мне проще самому посмотреть. Надеюсь это будет не долго. Объясни как ты отсеивал значение в игре... я пока поставлю игру на закачку ------------------ Добавление1: Ладно пока ты спишь или завтра будешь писать. Я напишу, что все твои вопросы сейчас не очень важны. Инструкция которую ты увидел в логах пишет "флаг" из eax по адресу [ecx+ b0]. Поскольку игра аварийно завершилась, то невозможно посмотреть значения регистров, а также не возможно посмотреть близлежащие инструкции рядом с mov [ecx+b0]. Однако, теперь если игра вылетать больше не будет (надо выяснить почему она вылетает, об этом позже), то тебе возможно не придётся искать вновь твой флаг. Ты уже знаешь что эта инструкция работает с адресом "флага". Тебе надо запустить вновь игру. Подключиться к её процессу и перейти в дизассемблер на инструкцию на скриншоте: 0x3a3c14d. Если там будет такая же инструкция к mov [ecx+b0], то тебе повезло. Вызови меню ПКМ и вызови функцию "Определить адреса на инструкции". Иди в игру измени в игре "флаг". Возвращайся в CE в окно определившихся адресов и ты должен увидеть адрес флага или несколько адресов. Если адрес один, то пиши скрипт инъекции на автоассемблере по записи в [ecx+b0] постоянного значения флага. Если много, то будут проблемы с написанием скрипта. Если игра опять рухнула иди в настройки CE и включи "скрытый отладчик" и "режим ядра" (точные названия опций я не помню). Попробуй всё снова как описано выше. Если игра опять рухнула установи последнюю альфа версию CE 6.1 из форума "Реализы CE-> Тестирование CE 6.1". Зайди в настройки и попробуй эти опции: Попробуй всё снова как описано выше. Игра после этого не должна аварийно завершаться. Если не знаешь как скрипт написать, то посмотри примеры наших пользователей в разделе скриптов. Если будут затруднения, то пиши.
  20. У тебя лишний ноп был и он всё портил. Думаю так должно работать без ошибок: [ENABLE] alloc(newmem,2048) label(returnhere) newmem: mov eax,05F5E0FF mov [ecx],eax ret 0004 jmp returnhere 013D9485: jmp newmem returnhere: [DISABLE] 013D9485: mov [ecx],eax ret 0004 dealloc(newmem)
  21. Я не знаю точно, но обычно это делается либо через какие-то дополнительные установленные компоненты, либо в работе с формой и слоями прозрачности. Также можешь сам там поискать компоненты размещения картинок и опции установки прозрачности для компонентов картинок и формы программы. Если статей по этому делу нет, то ты можешь найти похожие по Delphi или другим языкам. А на их примере сориентироваться в инструменте PHP Devel Studio
  22. Моя вина. Исправил. Ссылки все убрал. Тема возвращена из корзины туда куда надо.
  23. 5 апреля вышла 8 Альфа версия CE 6.1 (скачать) В неё включены исправления выше. А также следующие:
  24. Экселя у меня нет сейчас - я за ПК на котором его нет. Устанавливать его нет желания В Карте процессов может не указываться имя модуля или процесса игры. Если же указано имя модуля, тогда использовать "имя модуля + смещение" Если в Артмани не получается найти указатель, то надо использовать другие способы описанные выше. Через это многие проходили. В том числе и я около 6 лет назад. Теперь Артмани я почти никогда не использую, если только не приходится искать разные типы данных. Я никогда не ищу в Артмани указателей - трата времени. А TMK - уже давно себя изжил. Альтернатива ему Cheat Engine.
  25. Поставь игру на паузу или сверни её. Посмотри в дизассемблер как выглядят инструкции перед и после деактивации.
×
×
  • Создать...

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

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