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

roma912

Пользователи+
  • Постов

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

  • Посещение

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

    7

Сообщения, опубликованные roma912

  1. Ну мне пришел в голову такой вариант - написать свой парсер и на его основе уже использовать функции рисования.

    Если хочешь сделать разметку для текста вроде HTML, то придется написать тебе обработчик данной строки.
    Допустим, ты передаешь в свою функцию следующее (Ну соотв. класс для всего этого)

    CustomGDIDraw->DrawTextbyHTML("<fontColor:#ff0000> January 30, 2011\n </fontColor><fontColor:#ff0010> Feb 1, 1999\n </fontColor><fontColor:#ff0050> Feb 2, 1970\n </fontColor>")

    Первый твой этап - сделать парсинг, который ты уже будешь обрабатывать по своей логике. Сначала определять текст, потом цвет, потом символы переноса и т.д.
    Самый простой вариант - регулярка (кликабельно)
     

    Совпадения по группам, это будет то, что тебе нужно в данном случае.
    Группа 1 - выдаст тебе hex цвета. Далее уже сам преобразуешь
    Группа 2 - выдаст тебе текст, который нужен для отображения. Далее уже сам обработаешь перенос строки.

    Ну и по итогу получишь то, что хотел.

    Минус только в том, что тебе придется на совершенно любой текст ставить данные кастомные теги. В целом теги можно сделать и попроще, чтобы и сама регулярка была проще. Ну тут уже как хочешь, тебе решать.


    По поводу переноса текста - берешь начальные координаты отрисовки, и высчитываешь от этой координаты вниз некоторое количество пикселей (Допустим шрифт 14 + отступ текста 8 = 22). Примерно такая логика для переноса текста. Ну а далее стандартная отрисовка по координатам.

    Идею для реализации я тебе описал, дальше все за тобой.
     

  2. Еще есть другой вариант.
    1. Ставишь хук на нужную точку или функцию
    2. При срабатывании хука запоминаешь нужные тебе регистры
    3. Выписываешь все в файл
    4. Возвращаешь управление игровой функции

  3. 1 час назад, maximil сказал:

    Понимаю, но на данном этапе подскажите пожалуйста какую из команд участка кода (mov, push, call или ещё какую) лучше заменить NOPом чтобы заблокировать вычитание средств со счёта ибо заморозка не работает... я пока что способен только на такое)

    Поэтому тебя и направили изучать основы ассемблера. Изучишь основы, тогда поймешь что нопнуть

  4. Насколько я понял никакого виртуального метода у данного объекта нет, т.к. тут _thiscall и передается указатель на EC_LoginUIMan
    Если существуют какие-то варианты вызова метода без поиска данного указателя EC_LoginUIMan или установки хука, то готов прочитать пару статей об этом.
    image.thumb.png.cb39ecd47c03f861b20ab49566a893e5.png

     

  5. 2 часа назад, Xipho сказал:

    Но может быть причина в другом, надо конкретно смотреть...

    Вот для конкретности. Есть базовый класс AUIManager, в котором virtual PAUIDIALOG GetDialog(const char *pszName); - Метод для получения окна по имени, он точно реализован.
    Ставлю точку на вызов метода с нужным именем окна, нахожу указатель на класс из Ecx и Reclass уже подсказывает что это CECLoginUIMan, где базовый класс AUIManager

    Спойлер

    image.thumb.png.7296572c208b63775e762294929909f2.png

    image.thumb.png.2cb024c238d3ef2d300cef562fa46aad.png

     


    Логично предположить, что этот метод будет и в CECLoginUIMan, однако указатель на нее найти не получается
    Если предположение не точное, то возможно ли выйти на базовый класс (AUIManager) через  (CECLoginUIMan) и взять его указатель? А потом еще глубже в нем найти указатель через VTable на метод GetDialog?

     

      

  6. 36 минут назад, Xipho сказал:

    Среди них  ты с большой вероятностью найдешь все публичные методы класса (имея указатель на его экземпляр)

    В том и проблема, что виртуальный метод в исходном коде есть, а в самом VTable AUIManager его не имеется...
    Ну и если взять указатель на этот класс, то внутри него также не имеется указателя на данный метод

    Спойлер

    image.thumb.png.b5b05def12f44a8907ab622a2f02ba69.png


     

  7. У меня вопрос насчёт устройства методов, которые существуют внутри объекта (в памяти)
    Допустим с виртуальными все понятно, и вызываются они через vtable. 
    А возможно ли найти обычную функцию внутри объекта? (в памяти) Т.е лежат ли там указатели на все методы класса? Или для _thiscall конвенции это так не работает?

  8. 2 часа назад, Sergey99 сказал:

    Или же ты имеешь ввиду вызывать через движк Lua в Cheat Engine или Auto Assembler? Просто конкретно как вызывать методы через Auto Assembler не знаю, а вот документацию по CE Lua успел почитать.

    Ну это уже слишком...
    Хотя тоже имеет право на жизнь
    Мне проще написать dll на с++ которая вызовет просто эту функцию по адресу и все. Тем более все аргументы ты уже знаешь через декомпилятор .net

  9. 49 минут назад, Sergey99 сказал:

    Решил через Mono попробовать, как раз нашёл метод класса Camera -> Camera.WorldToScreenPoint, который как раз таки должен использовать видовую матрицу для преобразования координат из 3D в 2D, вот только как найти эту самую матрицу, которую использует эта функция.

    Не обязательно находить матрицу из этой функции. Можно просто использовать саму функцию, вызывать ее для перевода.

  10. 2 минуты назад, Sergey99 сказал:

    А может быть такое что байты видовой матрица перевёрнуты? то есть порядок столбцов тот же, а вот строки снизу вверх?

    Ну... Я с видовыми матрицами работал совсем немного
    Но перевернутых никаких мне не встречалось.
    Да и если посмотреть как формируется н-мерный массив, то он останется таким же и в памяти.
    Т.е. как он был записан в коде, так должен и выглядеть в памяти. Разве что в CE выбрать неправильное отображение (Оно и может наверное запутать)

  11. 15 минут назад, Sergey99 сказал:

    Да, идея хорошая, учитывая то что игра на Unity с использование скриптинга на C#, но не каждая же игра написана на таких общедоступных движках, к примеру CoD:MW2 была написана на C++ и "IW Engine" (движок разработчиков - они сами его написали и сами же модернизировали).

    Ну если игра не на юнити, то тогда и нужно искать видовую матрицу
    Для юнити довольно просто все писать. Берешь саму dll, которая Assembly-csharp из папки manage.
    Это считай твоя "основная библиотека классов" для модификаций чего угодно. После написания инжектируешь как mono библиотеку

  12. Ну наверняка структура до каменя примерно такая
    pPlayer->CInventory[N]->CItem-> (И вот тут уже вариации)
    В любом случае нужно искать указатель на инвентарь, а далее искать указатель на каждую вещь в инвентаре
    Иначе врятли ты найдешь сразу камешек который тебе нужен
    Ну а для возвращения его в слот, нужно найти функцию которая ставит / вынимает его, если это невозможно записью указателя в память

  13. Можешь словить запрос на авторизацию, потом просто слушать этот сокет, самый классный вариант как по мне
    Но не факт что рабочий, т.к. наверняка что-то может помешать
    Проблема по сути в том, что во флеш игру ты не сделаешь никакого хука
     

  14. Ну смотри. На скриншоте есть даже пост запрос
    Я бы начал с него. Посмотреть вообще насколько часто игра ими общается
    А посмотреть очень просто любым сниффером

  15. А еще можно найти указатель на хп и выставить банку на клавишу
    Потом читать хп и если оно меньше твоего установленного %, отправлять игре Sendmassage c нажатием клавиши на которой установлена банка
    Это самый просто вариант, максимально простой

  16. Думаю ты можешь выйти на инструкции которые перебирают в цикле указатели на персонажей 
    А потом уже просто читать их прямо оттуда
    Те которые уже не будут использоваться сразу отпадают, т.к иначе игра бы просто пыталась читать пустой / неправильный указатель

  17. 3 часа назад, edx сказал:

    И еще вопрос:) Это нормально сделать вот так? :

    Можешь при каждой отработке функции просто обновлять указатель на объект а потом пользоваться функциями
    Примерно также как у меня и сделано

  18. Смотри
    1. Тот урок, что от Кенга бородатых времен вполне подходит для css v34 
    Принцип вообще не поменялся никак
    2. Без базы знаний c++ ты толком ничего и не напишешь без полного копипаста готового исходника
    Да хотя даже для копипаста кода надо знать как он работает, ну и соответственно знать синтаксис языка для исправления ошибок

     

×
×
  • Создать...

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

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