powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как перехватить событие из компьютерной игры
17 сообщений из 42, страница 2 из 2
Как перехватить событие из компьютерной игры
    #37696076
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, зачем же так... меня тоже зацепило, но не напрягло ведь... ну, быстро отвечал человек
а так:
авторесли решаешь задачу, не завязанную на конкретные технологии, которые плохо поддерживаются хаскелем... то хаскель - хороший выбор
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696078
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMWhite Owl, зачем же так... меня тоже зацепило, но не напрягло ведь... ну, быстро отвечал человек
а так:
авторесли решаешь задачу, не завязанную на конкретные технологии, которые плохо поддерживаются хаскелем... то хаскель - хороший выбор
нет. тут ты не прав. не хаскелем, а библиотеками.
язык - удобен для любой задачи. но если либа кривая, то не лучше ли взять более плохой язык, но с более хорошей либой.
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696085
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNWhite Owlпропущено...
Мне нравится эта фраза.
это правда.
большинство либ на хакадже - сырые.
кто-то пишет для своего проекта - и выкладывает.
и больше никто не тестирует и не допиливает (
вернее я немного не правильно выбрал акцент на глчности.
не либы в основном не глючные, но есть фатальный недостаток: "нет документации"

если для дотнета или жавы я что-угодно нагуглю за 5 мин, то в хаскеле придется изучать исходники либы и экспериментировать, придется обращаться на слешдот.
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696113
alekseiryzhakov26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... Опять недопонимание моего вопроса или я не так выражаю свои мысли. Почему-то заместо реальной помощи, меня упрекают в попытке взломать многопользовательские сервера игр или тому подобное. Как уже было сказано ранее я не занимаюсь взломом или жульничеством в сетевых, многопользовательских играх. Меня интересует сама возможность взаимодействия с ними, то есть в данном случаи, я просто хотел спросить как написать такую программу, которая будет определять изменения жизней и как ни будь реагировать на это. Если говоря еще проще, то играю я в "Unreal Tournament" или "Star Wars BattleFront", получаю урон, в последствии чего отнимается энное количество игровых жизней, а моя программа определяет это событие и дает мне знать об этом. Если тема совсем гиблая, то в таком случаи обращаюсь к модераторам данного раздела закрыть ее или подскажите хотя бы где мне смогут помочь в моей проблеме?
Проведя небольшое время в самостоятельных работ за отладчиком и ArtMoney, я вроде бы нашел то самое значение которое отвечает за игровые жизни. Теперь как бы мне это в своей программе определить?
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696123
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну долго еще объяснять-то?
Сетевые игры (даже если клиент у вас на локальной машине установлен) - не реагируют на любые ваши локальные изменения... Анализируйте трафик...
Charles изучите, хотя бы, раз начинающий в этом вопросе...
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696155
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNmaytonбеда в том что задач нету пот этот специфичный язык.
заблуждение.
если не учитывать "недоделанность" хаскельных библиотек, то это язык общего назначения.

если решаешь задачу не завязанную на конкретные технологии, которые плохо поддерживаются хаскелем, то хаскель хороший выбор.
Я неверно выразился. У меня лично нет пока задач. А так вобщем-то cool )))
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696160
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekseiryzhakov26Проведя небольшое время в самостоятельных работ за отладчиком и ArtMoney, я вроде бы нашел то самое значение которое отвечает за игровые жизни. Теперь как бы мне это в своей программе определить?
Или ты слишком мало провёл времени за отладчиком или не
понимаешь своей-же постановки. Что ты хочешь сделать
за "свою программу" ? Какой функционал в ней должен
быть?

Не спеши с ответом. Подумай. Правильная постановка
это на 50% решённая задача.
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696166
alekseiryzhakov26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это уже становится страшно интересно, то есть меня пугает данная ситуация. Опять не понимание. Повторюсь что не кто кроме вас и других ответивших не говорил о перехвате событий посланных с сервера. Хотя в чем-то вы и правы, меня и интересует полученная информация. Возьмем к примеру, "Unreal Tournament", в одиночном режиме или в сетевом на экране отображается информация касательно количеству жизней у моего персонажа. Вот эта информация меня и интересует, то есть если на экране интерфейса показано 100 жизней, программа простаивает. Но если отнимется энное количество жизней, то в таком случаи программа это запишет в свое окно. Ну, как бы оно не было мне удалось с помощью, "ArtMoney" найти значение отвечающее за игровые жизни. Подскажите мне хотя бы как мне теперь отловить и среагировать на это событие в своей программе? Буду очень благодарен!
По сути тема не такая уж и сложная, но результаты ее выполнения меня пугают, все же меньше чем то что меня не как не кто не может понять.
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696171
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экий ты настырный читер. Давай так. Ты напиши софт. И приходи с исходником. Обсудим.
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696205
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekseiryzhakov26,

уже посоветовали - учи албанскейХацкель.
а то ZyK_BotaN (без 5 мин. модератор) тебе банца выпишет, и усё, "не поминайте лихом"
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37696294
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekseiryzhakov26... просто я интересуюсь программированием для сетевых шутеров. И ищу различные способы взаимодействия с ними.Тогда, наверное, надо начать с изучения C, C++, потом алгоритмы компюьтерной графики - линии, плоскоси, полигоны в пространстве, потом написать свой маленький движок для игры, ну и т.д.
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37697064
alekseiryzhakov26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И снова здравствуйте! Потихоньку продвигаясь в данной области удалось набросать несложный программный код, тот же как раз и делает что мне нужно. Почти... Но, поясню все детальнее. Я взял для эксперимента компьютерную игру, "Unreal Tournament 2004". Пропустив ее через, "ArtMoney" я нашел якобы нужное мне значение и его адрес, то что отвечает за счетчик жизней в игре. Извлекаю адрес самого значения, далее пишу простой код для поиска и прочтения этого значения в запущенной игре. Собственно вот предполагаемый адрес нежного значение: 05F7AC74, само же оно равно 4 Байтам. А вот и сам код который я использую для подключения к процессу и прочтению нужного мне значения:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var
  GameScreen, ActiveWindow: HWND;
  Buffer: Byte;
  ProcessIdentifier, ProcessHandle, Temp: Cardinal;
begin
  GameScreen := FindWindow(nil, PChar('Unreal Tournament 2004'));
  if GameScreen <> 0 then
  begin
    //Так как информацию отображаем в всплывающем сообщении, нет нужны проверять фокус на окне игры
    {ActiveWindow := GetForegroundWindow;
    if ActiveWindow = GameScreen then
    begin}
      GetWindowThreadProcessId(GameScreen, @ProcessIdentifier);
      ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessIdentifier);
      ReadProcessMemory(ProcessHandle, Ptr($05F7AC74), @Buffer, 1, Temp);  //Считываем нужное значение по указанному адресу
      ShowMessage(IntToStr(Buffer));  //Собственно отображаем нужную информацию
    {end;}
  end
  else
  begin
    ShowMessage('Окно игры не найдено');
  end;
end;


Теперь о плохом, первое и самое неприятное это то, что как я понял при каждом новом запуске игры адрес значения меняется. По этому поиск нужного значение по его адресу сильно затрудняется. Второе, есть еще один неприятный момент, когда в игре наступает полная потеря жизней, то в данном значении за место 0 прописывается на половину случайное десятизначное число, на половину так как не меняется первый кусок числа, 42949672** крайнее две цифры как я понял разные время от времени. И еще после этого события значение так и остается равным этому десятизначному числу. Даже прочесывая игру через, "OllyDbg" результат неутешительный. Хм... Может быть я конечно что-то путаю, поправьте! Хотя сейчас у меня есть мысли что все же я нахожу не то что нужно. Значит есть еще один адрес и значение в памяти игры который отвечает за отображение информации касательно счетчика жизней.
Все же как я уже начинаю понимать, довольна проблематично и сложно получить информацию касательно игровых жизней.
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37697082
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekseiryzhakov26,

почитай про защищенный режим. таненбаума например
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37697093
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNalekseiryzhakov26,

почитай про защищенный режим. таненбаума например
это я на счет изменения адреса.

а по поводу "42949672**", тут ничего удивительного, просто старшие биты выставляются в 1(наверное 3 байта)
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37697097
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNZyK_BotaNalekseiryzhakov26,

почитай про защищенный режим. таненбаума например
это я на счет изменения адреса.

а по поводу "42949672**", тут ничего удивительного, просто старшие биты выставляются в 1(наверное 3 байта)
или, как вариант, делается отрицательным.
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37705658
alekseiryzhakov26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так немного разобрался в сложности ситуации, то есть иными словами есть зацепки. Касательно смены адреса значения я разобрался, суть в следующем... Во первых, я обращал внимание не та тот адрес, искомая для меня информация хранилась сразу по трюм адресам, которые в свою очередь также при каждом новом запуске игры меняются. Для примера приведу один из них, вот: 05843D00. Тут все довольно просто, сам адрес состоит из восьми символов, из которых изменяются только четыре символа. Для простоты усвоения делим адрес на три части, 0 5843 D00. Первая часть состоит из одного символа, то есть всегда равна нулю. Вторая часть все время видоизменяется, то есть как уже было сказано при каждом новом запуске происходят изменение/замена символов, собственно это и есть полиморфный геморрой! Ну, а третья часть состоит из трем символов, которые подобной первой части некогда не меняются. Так вот отталкиваясь от этих проверенных предположений, можно в каком-то смысле облегчить себе задачу. То есть, как я понимаю надо сделать что-то вроде поиска в памяти запущенного процесса, где искать будем нужный адрес, отталкиваясь от штатных начальных и конечных символов. Но вот тут, то собственно и встает вопрос, касательно поиска. Ведь функции FindProcessMemory нет! А считывать весь регион виртуальной памяти очень проблематично и затратно касательно ресурсов самой системы, что и еще в последствии может привести к краху.
Я вот тут настрочил небольшой код для проверки проверки, определения является ли тот или иной адрес искомым или нет. Сам код ниже. Но вот как искать в памяти в момент работы программы, вот тут я застрял.
Проверка на валидность, на примеры работы с обычным текстом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
var
  Pattern: string;
  BlockA, BlockB, BlockC: Integer;
begin
  Pattern := Edit1.Text;
  //Проверка размера, хотя она скорее всего необязательна...
  if Length(Pattern) = 8 then
  begin
    BlockA := Pattern[1];  //Первое часть, всегда равна 0
    BlockB := Copy(Pattern, 2, 4);  //Вторая часть, случайный порядок
    BlockC := Copy(Pattern, 6, 3);  //Третья часть, всегда равна D00
    //Сверяемся со штатными символами
    if (BlockA = '0') and (BlockC = 'E24') then
    begin
      ShowMessage(Pattern + ' Сходится');
    end
    else
    begin
      ShowMessage(Pattern + ' Не сходится');
    end;
  end
  else
  begin
    ShowMessage('Расхождения в размере');
  end;
end;


Вы описанный программный код работает безупречно, но чем его дополнить что бы можно было искать адреса в памяти. Хотя, не правильно сказал, как реализовать поиск в памяти запущенного процесса?
...
Рейтинг: 0 / 0
Как перехватить событие из компьютерной игры
    #37713658
alekseiryzhakov26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все же как же считать значение если его адрес является динамическим? Поискав по просторам всемирной паутины я наткнулся на небольшую статью, в ней описывался метод написания тренера для компьютерной игры. Ознакомившись с данной документацией я решил попробовать этот метод... Скачал утилиту, TSearch нашел с ее помощью динамические адреса указывающие на счетчик жизней, как уже я говорил ранее их всего три. Так вот Делаю все как по инструкции, в верхнем меню TSearch я выбираем раздел Auto Hack - Enable debugger, далее выбираю AutoHack window, в открывшемся окне в верхнем меню выбираем Set Breack Point, где в поле Address вписываю один из найденных адресов, 0B47AE24, устанавливаю Read/Write, и жму на кнопке Set. Далее, возвращаемся в игру изменяем количество игровых жизней и сворачиваю игру, возвращаемся в окошко AutoHack window наблюдаю сделующее:
автор10156AEC: mov ecx,[eax]
10126F43: mov [eax],ecx
Собственно тут я и застрял, то есть если отталкиваться от указанной ниже статьи, в регистр eax функцией mov должно помещаться какое-то значение... Но у моем случаи я не чего не наблюдаю или я что-то не правильно делаю? В таком случаи поправьте.
Ссылка на статью: http://www.gamenarod.ru/showthread.php?t=103
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как перехватить событие из компьютерной игры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]