Патчинг L2.exe - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 18.06.2017, 22:01   #1
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Патчинг L2.exe

Собственно решил перенести свои правки из хексинга в свою DLL, но словил ряд странных вещей: некоторые из адресов я почему-то не могу перезаписать. Пробовал по-разному:
Код:
WriteProcessMemory(GetCurrentProcess(), dest, &src, countBytes, nullptr);
И так
Код:
	DWORD dwProtect = PAGE_READWRITE;
	VirtualProtect(dest, countBytes, dwProtect, &dwProtect);
	*((BYTE *)(dest)) = src;
	VirtualProtect(dest, countBytes, dwProtect, &dwProtect);
В итоге из 28 адресов, которые я патчу, 13 возвращают ошибку. Причем какой-либо закономерности я обнаружить не смог. WriteProcessMemory возвращает 1, но данные не меняет

Есть какие-либо идеи?

Добавлено через 11 минут
И еще кое что: если я изменяю память через Ollydbg, то все меняется нормально. Интересно в чем проблема...
__________________

Последний раз редактировалось Zubastic; 18.06.2017 в 22:13. Причина: Добавлено сообщение
Zubastic вне форума Ответить с цитированием
Непрочитано 19.06.2017, 02:06   #2
Аватар для n3k0nation
Antihero

По умолчанию Re: Патчинг L2.exe

FlushInstructionCache?
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Непрочитано 19.06.2017, 02:44   #3
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Re: Патчинг L2.exe

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
FlushInstructionCache?
Неа, остальные байтики рядом меняет, а один нет
Т.е. меняю 10 байтов на 0x01, в итоге вижу такую картину:
0х01 0х01 0х01 0х01 0х01 0хFF 0х01 0х01 0х01 0х01

Кстати как переаттачил дллку от l2.exe к nwindow.dll, то проблема пропала
__________________
Zubastic вне форума Ответить с цитированием
Непрочитано 19.06.2017, 12:36   #4
Пользователь

По умолчанию Re: Патчинг L2.exe

Цитата:
Сообщение от Zubastic Посмотреть сообщение
Неа, остальные байтики рядом меняет, а один нет
Т.е. меняю 10 байтов на 0x01, в итоге вижу такую картину:
0х01 0х01 0х01 0х01 0х01 0хFF 0х01 0х01 0х01 0х01

Кстати как переаттачил дллку от l2.exe к nwindow.dll, то проблема пропала
мистика и нечего больее
nn03 вне форума Ответить с цитированием
Непрочитано 19.06.2017, 13:20   #5
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Re: Патчинг L2.exe

Цитата:
Сообщение от nn03 Посмотреть сообщение
мистика и нечего больее
Это к адептам темной магии, мы так не работаем
__________________
Zubastic вне форума Ответить с цитированием
Непрочитано 23.06.2017, 01:30   #6
Пользователь

По умолчанию Re: Патчинг L2.exe

Как вариант что-то использует эту область памяти... Есть ли возможность прицепить "железный" on-write breakpoint на этот участок памяти и попробовать поймать кто его изменяет после патчинга?

https://github.com/mmorearty/hardware-breakpoints
__________________
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Aquanox вне форума Ответить с цитированием
Непрочитано 23.06.2017, 04:15   #7
Пользователь

По умолчанию Re: Патчинг L2.exe

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
FlushInstructionCache?
Бесполезно на X86 (по крайней мере, пока модифицируемый код имеет тот же виртуальный адрес, что и при исполнении):

Цитата:
11.6 SELF-MODIFYING CODE

A write to a memory location in a code segment that is currently cached in the processor causes the associated cache line (or lines) to be invalidated.
(https://www.intel.com/content/www/us...-1-manual.html)

Последний раз редактировалось doesitmatter; 23.06.2017 в 19:56.
doesitmatter вне форума Ответить с цитированием
Непрочитано 24.06.2017, 22:52   #8
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Re: Патчинг L2.exe

Цитата:
Сообщение от Aquanox Посмотреть сообщение
Как вариант что-то использует эту область памяти... Есть ли возможность прицепить "железный" on-write breakpoint на этот участок памяти и попробовать поймать кто его изменяет после патчинга?

https://github.com/mmorearty/hardware-breakpoints
Ничто ее не использовало. Почему так получается не знаю. Сейчас аттачусь к nwindow.dll и проблем не знаю
__________________
Zubastic вне форума Ответить с цитированием
Непрочитано 24.06.2017, 23:32   #9
Аватар для n3k0nation
Antihero

По умолчанию Re: Патчинг L2.exe

Цитата:
Сообщение от doesitmatter Посмотреть сообщение
Бесполезно на X86 (по крайней мере, пока модифицируемый код имеет тот же виртуальный адрес, что и при исполнении):



(https://www.intel.com/content/www/us...-1-manual.html)
Цитата:
11.6 SELF-MODIFYING CODE

A write to a memory location in a code segment that is currently cached in the processor causes the associated cache line (or lines) to be invalidated.
Code segment != virt adr
Патчинг кода из дллки или RemoteThread это иной сегмент кода, нежели ранинг уже пропатченого куска кода на клиенте. И вообще, в рамках одного модуля (PE) - сегменты могут различаться.
С учетом размера кешей современных процов - туда влезает далеко не один сегмент. Ну и многопоточностьмногоядерность не забываем.

Цитата:
Particularly on x86 my guess that simple JMP just wont do it, since on modern processors there are branch predictors and optimizers that would "see" the code that your jump would target. Another scenario is when multiple CPU's are in play, and instruction cache has to be flushed from
both chips.
branch predictors -- в данном случае prefetch queue
Особенно актуально для RemoteThread.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Непрочитано 25.06.2017, 07:36   #10
Пользователь

По умолчанию Re: Патчинг L2.exe

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
Code segment != virt adr
Конечно, это вообще разные понятия, но что это доказывает?

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
Патчинг кода из дллки или RemoteThread это иной сегмент кода, нежели ранинг уже пропатченого куска кода на клиенте.
Не понял смысла этого предложения. "Патчинг это иной сегмент"?

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
Ну и многопоточностьмногоядерность не забываем.
Не забываем: кэши мультипроцессорной системе инвалидейтятся, конкретно у интел это вариация MESI: https://en.wikipedia.org/wiki/MESI_protocol

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
branch predictors -- в данном случае prefetch queue
Особенно актуально для RemoteThread.
Intel Volume 3a, section 11.6, “Self Modifying Code”:

Цитата:
In addition, the P6 family and Pentium processors check whether a write to a code segment may modify an instruction that has been prefetched for execution. If the write affects a prefetched instruction, the prefetch queue is invalidated. This latter check is based on the linear address of the instruction.
Возможный вариант рассинхронизации, оттуда же:
Цитата:
Systems software, such as
a debugger, that might possibly modify an instruction using a different linear address
than that used to fetch the instruction, will execute a serializing operation, such as a
CPUID instruction, before the modified instruction is executed, which will automatically
resynchronize the instruction cache and prefetch queue.
Другой сценарий, в котором я могу представить проблемы: когда один процессор (ядро) модифицирует код, который уже исполняется другим процессором.

Небольшое исследование по теме с цитатами из 3a: http://blog.onlinedisassembler.com/blog/?p=133

Я, конечно, допускаю, что дело может быть в синхронизации, но зная X86 – вряд ли…
doesitmatter вне форума Ответить с цитированием
Сказали спасибо:
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таути создание персонажа\патчинг система nikitawasa Игровой клиент 2 12.03.2013 15:02
Патчинг в Eclipse mego4el Lineage II 0 23.02.2011 17:56


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 23:15. Часовой пояс GMT +3.

Вверх