Не совсем понял, а произвести инъекцию dll во время выполнения приложения, или, например, прописать ее в секции импорта исследуемого процесса было неприемлимо?
Хорошие у вас чиновники, у меня все никак руки не дойдут написать что-нибудь эдакое.
По существу: если EnumFunc является функцией обратного вызова для EnumWindows, и единственное что делает — пытается блокировать ALt-tab (я правильно вас понял?), то почему не отключить вызов EnumWindows?
Скачал, значит, это кино. Смотрю и не пойму, почему все разработчики которые в нем выступают — выглядят как дауны. Может, думаю, отпечаток профессии. Типа хикки, в реальной жизни не общаются, а тут сидят — слова подбирают. Оказалось что я колесиком на плеере дернул и оно на скорости 0.67x показывает. А минут двадцать пролетело, не заметил и как.
Это я к чему… Фильм отличный. Даже в таком виде смотрится так, что не оторваться прямо.
вы уверены что смотрели видео/код в видео показано как код
mov cx, [eax+edx*2] меняют на код mov ecx, 0xFF
Тут был еще список по каким адресам какие значения записывать, так в нем явно опкоды менялись. Переменные абсолютно не при чем.
О! И почему минусуют. Я бы минусовал за то, что статья которая, видимо, задумывалась как техническая, по обыкновению превратилась в холивар об аморальности мошенничества в играх.
Не стоит так бурно реагировать. Если подобный чит (а его, как показал автор, при должном желании, может реализовать практически каждый, не имея особо больших знаний либо умений), может нарушить основную механику игры, то есть большое подозрение, что проблемы или с механикой, или с ее реализацией. И массовое применение читов является своеобразным индикатором этого. Задуматься над причинами, по которым возможно подобное мошенничество всяко полезнее, чем угрожать СБ или переломом пальцев (что вообще свинство, как по мне).
Но, наверное, вы правы в одном: публиковать результаты исследований многопользовательских игр, не совсем честно по отношению к другим игрокам. Куда как безобиднее и не менее интересно, было бы рассказывать о том же самом, только в однопользовательских играх.
Ну как же структуры, если именно что код? вот например здесь показано как запись в регистр значения из памяти заменяют на запись константы. www.youtube.com/watch?v=OxU5XpC5hWM&t=196s
Ну и все остальные адреса — из секции кода game.dll
А вам не кажется что код патчить как-то не очень круто, и что лучше сделать подобно тому, как вы делали в статье про CS: изучить структуры данных, найти где они обрабатываются, произвести туда инъекцию DLL и вносить изменения уже в данные. И уж совсем, наверное, вредно патчить код по абсолютным адресам.
И непонятно, что такое микро сбой? Точка останова с условием? Видео смотрел, оттуда непонятно.
Использую что-то подобное для одного достаточно часто (раз в две недели) обновляемого приложения. Шаблон менять не надо, проблемы, в основном, возникают со структурами данных. То vftable поменялся, добавили функцию. То поле добавили, такое, в общем. Код меняется редко. Хотя, конечно, это зависит от того какие разработчики вносят изменения. Еще очень помогает в автоматическом поиске дизассемблерный движок, чтобы пройтись по коду от места которое можно однозначно найти.
Каким образом формируются запросы в TestReqest? Перебираются все адреса устройств или шлют запросы на определенный адрес (например 1)? Я бы предложил сделать функцию полностью автоматического опроса.
Предусмотрена возможность получения текущих значений каналов другой программой?
Может было бы лучше сделать выбор плагина в TestReqest не диалоговым окном открытия файла, а из списка, как это сделано в редакторе?
В ридере было бы здорово сделать выбор базы данных их GUI. И я почему-то не добился чтобы у меня отображались тех. имена каналов, которые я задал в редакторе.
Не совсем понял, а произвести инъекцию dll во время выполнения приложения, или, например, прописать ее в секции импорта исследуемого процесса было неприемлимо?
.text:0044D19E push edx; lParam
.text:0044D19F push offset EnumFunc; lpEnumFunc
.text:0044D1B0 call ds:EnumWindows
.text:0047E804 push edx; lParam
.text:0047E805 push offset EnumFunc; lpEnumFunc
.text:0047E816 call ds:EnumWindows
ведь когда мы исправляем инструкцию and edx, 0FFh на or edx, 0FFh, то всё равно продолжаем лезть к чужим окнам, хоть это и не так сильно проявляется
видимо не такой и грязный, просто рассчитано на ранние версии Windows
По существу: если EnumFunc является функцией обратного вызова для EnumWindows, и единственное что делает — пытается блокировать ALt-tab (я правильно вас понял?), то почему не отключить вызов EnumWindows?
Это я к чему… Фильм отличный. Даже в таком виде смотрится так, что не оторваться прямо.
mov cx, [eax+edx*2] меняют на код mov ecx, 0xFF
Тут был еще список по каким адресам какие значения записывать, так в нем явно опкоды менялись. Переменные абсолютно не при чем.
Но, наверное, вы правы в одном: публиковать результаты исследований многопользовательских игр, не совсем честно по отношению к другим игрокам. Куда как безобиднее и не менее интересно, было бы рассказывать о том же самом, только в однопользовательских играх.
www.youtube.com/watch?v=OxU5XpC5hWM&t=196s
Ну и все остальные адреса — из секции кода game.dll
Или я вас не правильно понял?
И непонятно, что такое микро сбой? Точка останова с условием? Видео смотрел, оттуда непонятно.
Предусмотрена возможность получения текущих значений каналов другой программой?
Может было бы лучше сделать выбор плагина в TestReqest не диалоговым окном открытия файла, а из списка, как это сделано в редакторе?
В ридере было бы здорово сделать выбор базы данных их GUI. И я почему-то не добился чтобы у меня отображались тех. имена каналов, которые я задал в редакторе.