Конференция "Игры" » Как получить данные из игрового окна? [C++ Builder, Windows]
 
  • _romm (11.02.09 15:27) [0]
    В игровом окошке есть панелька, на которой отображаются данные персонажа(жизнь, мана и броня). Хочу узнать эти цифры.
    Каким способом это можно осуществить?

    У меня пока одна нормальная идея - графически определять текст(правда не знаю как^^).
    Еще есть мысль - если можно каким то образом получить адреса памяти, где хранятся эти данные, то будет вообще шикарно, но боюсь что адреса выделяются динамически, и их невозможно будет узнать.

    У кого есть опыт подобной работы, или просто пожелания -
    буду очень рад любым советам.

    Заранее спасибо.
  • @!!ex © (11.02.09 22:30) [1]
    Есть идеи. Но только после того, как узнаю ЗАЧЕМ?
  • Сергей М. © (12.02.09 11:56) [2]
    На дворе кризис, а им все бирюльки)
  • _romm (12.02.09 15:18) [3]
    2ex, делаю автокликер для игры. действие должно выполнится при достижении параметрами определенного уровня(например при падении жизни < 50% пьется элексир жизни)
  • _romm (13.02.09 11:41) [4]
    Можно ли получить хандл этой менюшки, впринципе не знания никакой информации о ней(только положение на экране)?
  • Сергей М. © (13.02.09 12:21) [5]

    > Можно ли получить хандл


    А кто тебе сказал, что эта "менюшка" является объектом опер.системы и посему обязана иметь хэндл ?
  • _romm (13.02.09 12:27) [6]
    Да вот беда что никто не говорил)
    Я просто наивно перебераю все возможные варианты)
  • Сергей М. © (13.02.09 13:01) [7]

    > жизнь, мана и броня


    Стесняюсь спросить, "мана" - это, наверно, запас манной каши ?)
  • _romm (13.02.09 13:47) [8]
    не важно :) пусть будет так :)

    Сергей, у вас есть какая-нибудь мысль по моей проблеме?)
  • Сергей М. © (13.02.09 14:02) [9]

    > _romm   (13.02.09 13:47) [8]


    Мысль я уже в [2] изложил)

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

    Быстрота и сложность достижения результата напрямую зависит и от сложности/скрытности внутренней организации "жертвы" и от знаний/умений в пользовании вышеупомянутых средств.
  • Asteroid (13.02.09 14:32) [10]
    Если игра сетевая, то порой проще перехватывать пакеты и анализировать их, но навыки, описанные в [9] лишними не будут :)
  • _romm (13.02.09 14:46) [11]
    игра сетевая, с пакетами я работать не умею :)
  • @!!ex © (13.02.09 14:46) [12]
    > [3] _romm   (12.02.09 15:18)

    Так и знал, что читерство.


    > [10] Asteroid   (13.02.09 14:32)

    Не получится. в MMORPG крутятс ябольшие бабки, поэтому канал нехило шифруется.
  • _romm (13.02.09 15:54) [13]
    ex, не читерство, а автоматизация :)
    выкладывай свою идею :)
  • @!!ex © (13.02.09 17:22) [14]
    Есть два реализуемых способа:
    1) С помощью некой утилиты(АrtMoney, например, которую здесь уже упоминали) ищется адрес переменной. Минус в том, что при перезапуске адрес скорее всего переместится и заморачиваться придется по ноаой. Плюс в том, что любой идиот справится.
    2) С помощь дизасемблера, отладчика и внедрения своих дллек ищем переменную в коде. Если даже по коду не удастся узнать где она будет располагаться в памяти, скорее всего это значение в каком то виде передается во внешние длл(простой пример: жизнь рисуется квадом. соответственно по размеру квада мы можем узнать количество жизни. Выясняем момент, когда рисуется квад(с помощью дизассемблера, отладчика и экспериментов), перехватываем координаты и получаем значение жизни.)
  • _romm (13.02.09 17:52) [15]
    по второму способу не подскажешь литературу?
  • _romm (13.02.09 19:07) [16]
    Побаловался с АртМаней,
    выяснил, что жизни хранятся в неком адресе хххххххх.
    после перезапуска игры, адрес оказался тот же, что порадовало :)

    Всем спасибо за советы, пока попробую прочитать оттуда данные...
    ЗЫ тему не закрывайте, не может все так просто оказаться :)
  • @!!ex © (13.02.09 20:37) [17]
    > ЗЫ тему не закрывайте, не может все так просто оказаться
    > :)

    Почему не может? Если статик переменная, но у ней адрес фиксированный в пределах билда.
  • Asteroid (13.02.09 23:28) [18]

    > Не получится. в MMORPG крутятс ябольшие бабки, поэтому канал
    > нехило шифруется.

    Вот тут-то и пойдут в дело инструменты обратного "инженеринга" :)

    Но раз адреса в памяти хватило, то тем проще :)
  • _romm (15.02.09 16:12) [19]

    > адрес оказался тот же

    пф, видимо совпадение, адрес все же меняется :(
    из той же артмани узнал указатель на структуру(не уверен что это структура, но указатель на текущие жизни, и максимальные жизни одинаковый).

    Подскажите как теперь используя этот указатель узнать адрес конкретного значения
  • Asteroid (15.02.09 18:54) [20]
    Значение в структуре лежит по адресу (адрес структуры + смещение). Если не знаешь структуру, то смещение придется угадывать (а структура может быть весьма большой).

    В случае, если все же откопаешь адрес самой структуры, поищи его через артмани. Может повезти в том, что он [адрес структуры с жизнью] хранится по некоторому фиксированному адресу в памяти. Или адрес структуры, содержащей адрес структуры с жизнью хранится в фиксированному адресу. Или (...повторять до вывиха мозга).
  • _romm (15.02.09 19:37) [21]
    Ну эт логично :)
    Допустим смешение для жизней будет "х".
    Для функции чтения из памяти в качестве адреса требуется переменная типа DWORD.
    Если адрес статический то DWORD a = 0xFFFFFF
    а как быть с указателем, т.е. как узнать на что он ссылается? чтобы получить адрес структуры вида DWORD a = 0xFFFFFF
  • @!!ex © (15.02.09 21:10) [22]
    > [21] _romm   (15.02.09 19:37)

    Указатель хранит в себе адрес. :)
  • _romm (15.02.09 21:50) [23]
    Я жутко туплю :)
  • Владик (08.06.13 13:47) [24]
    я заметил что 4 года назад но всеровно, не проще Uopilot использовать?
  • zewwer © (11.09.13 12:04) [25]
    я просто не понимаю почему так люди обожают эти игры?)

    ___________
    http://migcredit.ru/srochnyj-zajm-deneg/
  • имя (20.10.15 17:18) [26]
    Удалено модератором
  • имя (20.10.15 20:12) [27]
    Удалено модератором
  • имя (20.10.15 20:15) [28]
    Удалено модератором
 
Конференция "Игры" » Как получить данные из игрового окна? [C++ Builder, Windows]
Есть новые Нет новых   [134427   +26][b:0][p:0.001]