L2 PTS - Страница 2 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Другие игры / Other games

Другие игры / Other games
Прочие онлайн игры и эмуляторы их серверов. Other online games and emulators.

Ответ
Опции темы
Непрочитано 19.08.2016, 16:54   #11
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: L2 PTS

Возник вопрос о работе на 64 бит приложениях
В 32бит приложении вызов хукнулся и все окей, а в 64бит приложении все через попу..
Как видно на скрине в коде появляется несуществующий адрес, который не относится к моей dll
Есть у кого мысли по этому поводу?

Код:
Свернуть ↑Развернуть ↓
Sojang вне форума Ответить с цитированием
Непрочитано 19.08.2016, 17:26   #12
Аватар для n3k0nation
Antihero

По умолчанию Re: L2 PTS

У x64 адреса длиннее.
Попробуйте чето типа этого:
Код:
;если надо, то делаем lea rax,[adr_param] вместо мува
mov rax,0x100500
jmp rax
Код:
48 b8 //mov rax
00 00 00 00 00 00 00 00 //наш_адрес_на_8_байт
ff e0 //jmp rax
Ну и конечно же, это все займет 12 байт, а не 5, как в x86. А вообще, не забываем о релатив адресации.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Непрочитано 19.08.2016, 17:38   #13
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: L2 PTS

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
У x64 адреса длиннее.
Попробуйте чето типа этого:
Код:
;если надо, то делаем lea rax,[adr_param] вместо мува
mov rax,0x100500
jmp rax
Код:
48 b8 //mov rax
00 00 00 00 00 00 00 00 //наш_адрес_на_8_байт
ff e0 //jmp rax
Ну и конечно же, это все займет 12 байт, а не 5, как в x86.
Длиннее то длиннее, однако вот тут
Цитата:
Сообщение от Vavilon Посмотреть сообщение
Или вот экстендер с гф до эпалога https://bitbucket.org/l2shrine/extender-public/src
реализовано так же как у меня, а это судя по всему длл под 64 бит..
UDP: Беру слова назад. То что по ссылке это не 64 бит длл. Однако как тогда реализовать это на плюсах?На си++ никогда не кодил и вот ток ща опыта набираюсь
Sojang вне форума Ответить с цитированием
Непрочитано 19.08.2016, 22:10   #14
Аватар для n3k0nation
Antihero

По умолчанию Re: L2 PTS

Цитата:
Сообщение от Sojang Посмотреть сообщение
Однако как тогда реализовать это на плюсах?На си++ никогда не кодил и вот ток ща опыта набираюсь
Почти так же, как и для х86, но с кодом, как я показал выше. И да, на MSVC x64 нет inline asm, поэтому компилим кусок кода на АСМе и берем оттуда "готовый" код, который будет выполнять роль нашего трамплина.
Если не нравится метод через jmp, то можно через возврат:
Код:
push adr
ret
Уже в сишной программе просто вставляем нужный адрес, не забывая его рассчитать.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 20.08.2016, 14:22   #15
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: L2 PTS

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
Почти так же, как и для х86, но с кодом, как я показал выше. И да, на MSVC x64 нет inline asm, поэтому компилим кусок кода на АСМе и берем оттуда "готовый" код, который будет выполнять роль нашего трамплина.
Если не нравится метод через jmp, то можно через возврат:
Код:
push adr
ret
Уже в сишной программе просто вставляем нужный адрес, не забывая его рассчитать.
Блин, что то не доходит до меня
asm:
Свернуть ↑Развернуть ↓

Как можно заюзать это из с++?
Sojang вне форума Ответить с цитированием
Непрочитано 20.08.2016, 17:03   #16
Аватар для Zubastic
ZG troll squad

По умолчанию Re: L2 PTS

Вот так:
	__asm
	{
		push adr
		ret
	}
Code: C++
__________________
Zubastic вне форума Ответить с цитированием
Непрочитано 20.08.2016, 17:17   #17
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: L2 PTS

Цитата:
Сообщение от Zubastic Посмотреть сообщение
Вот так:
	__asm
	{
		push adr
		ret
	}
Code: C++
так выше же написали что инлайн вставок в 64бит нету
Sojang вне форума Ответить с цитированием
Непрочитано 20.08.2016, 22:02   #18
Аватар для n3k0nation
Antihero

По умолчанию Re: L2 PTS

Цитата:
Сообщение от Sojang Посмотреть сообщение
Блин, что то не доходит до меня
asm:
Свернуть ↑Развернуть ↓

Как можно заюзать это из с++?
А нафига Вы компилите под 386й?)

Качаете, например, fasm и пишите чето типа этого:
Код:
use64
push 0x7fffffff
ret
Компилите это:
Код:
fasm tramp.asm tramp.bin
Открываете в хексе аутпут и видите чето типа этого:


Берем эти замечательные байты и пихаем в сишную прогу. Должно получится чето типа:
Код:
unsigned char trampTemplate[ ] = {
0x68, //push
0x00, 0x00, 0x00, 0x00 //address
0xc3 //ret
};
Адрес кодируется, как беззнаковое 4х байтовое слово. В общем, через костыль и жопу, грубо говоря (вместо того, чтобы дать нормальную поддержку push 8bytes). Пляшем с бубном, вычисляем наш адрес.
Готовим трамплин (псевдокод):
Код:
unsigned char* tramp = new unsigned char[6];
memcpy(tramp, trampTemplate, 6);
((DWORD*)(&tramp[1]))* = adr;
А далее, как обычно, даем через VirtualProtect права на запись куска памяти, где будем переписывать код и пишем наш трамплин туда.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 20.08.2016, 23:37   #19
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: L2 PTS

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
А нафига Вы компилите под 386й?)

Качаете, например, fasm и пишите чето типа этого:
Код:
use64
push 0x7fffffff
ret
Компилите это:
Код:
fasm tramp.asm tramp.bin
Открываете в хексе аутпут и видите чето типа этого:


Берем эти замечательные байты и пихаем в сишную прогу. Должно получится чето типа:
Код:
unsigned char trampTemplate[ ] = {
0x68, //push
0x00, 0x00, 0x00, 0x00 //address
0xc3 //ret
};
Адрес кодируется, как беззнаковое 4х байтовое слово. В общем, через костыль и жопу, грубо говоря (вместо того, чтобы дать нормальную поддержку push 8bytes). Пляшем с бубном, вычисляем наш адрес.
Готовим трамплин (псевдокод):
Код:
unsigned char* tramp = new unsigned char[6];
memcpy(tramp, trampTemplate, 6);
((DWORD*)(&tramp[1]))* = adr;
А далее, как обычно, даем через VirtualProtect права на запись куска памяти, где будем переписывать код и пишем наш трамплин туда.
спасибо за развернутый ответ
но чет я кажись кривой и он пишет в память не push адрес ret а бред полный

код:
Свернуть ↑Развернуть ↓
Sojang вне форума Ответить с цитированием
Непрочитано 21.08.2016, 22:56   #20
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: L2 PTS

все еще актуально..........
Sojang вне форума Ответить с цитированием
Ответ


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

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

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

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


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

Вверх