Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 19.09.2013, 01:40   #1
Местный
 
Аватар для goodvin1709
 
Регистрация: 13.02.2011
Сообщений: 506
Сказал Спасибо: 121
Имеет 100 спасибок в 83 сообщенях
goodvin1709 пока неопределено
По умолчанию Перехват из Engine.dll

Вот уже много времени мучаюсь над тем что пытаюсь написать что то подобие перехватчика,уже и пробовал перейти на С++ но в основном сижу на делфи.
Вот проблема состоит в том что бы каким то образом перехватить любую вызывающуюся функцию из Engine.dll.
Я получил их названия под свой клиент:
Расшифрована:
int UGameEngine::OnDie(struct User *,class L2ParamStack &)
Зашифрована:
?OnDie@UGameEngine@@UAEHPAUUser@@AAVL2ParamStack@@ @Z
Но как прехватить, я вобще не понимаю, посмотрел кучу исходником.
Может найдется тот человек который разжует все, и покажет исходник как именно это осуществить.
P.S Да в принципе пофиг какая функция и какая библиотека,хоть Core.dll хоть Engine.dll
Помогите добрые люди пожалуйста.
__________________
---------------------------__--------__-----
---____- ___--____--- ___/'- /__ ___-(__)-____
--/-___-/-__-\/-__--\ /-__--'/--|-/--//---//--__--\
-/-/_/ -/-/_/--/-/_/--/-/_/--/|--|/--'//---//--/-/--/
-\___-/\____/\____/\____/-|____//__'//_'/-/__/
/_-__/
goodvin1709 вне форума   Ответить с цитированием
Старый 19.09.2013, 10:06   #2
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Под Delphi есть готовая библиотека advApiHook.pas вроде есть в исходниках пакетхака.

Там есть функция

function HookProc(lpModuleName, lpProcName: PChar; NewProc: pointer; var OldProc: pointer): boolean;

PHP код:

var
  
OnDieOriginal: function (lpLibFileNamePAnsiChar): integer;


function 
NewFuncinteger;
begin

//код



  
Result:= OnDieOriginal;//вызов оригинальной функции
end;



HookProc('Engine.dll''OnDie', @NewFunc, @OnDieOriginal); 
Но в таком виде прокатит только если перехватываемая функция идет без параметров, так как в Delphi в функции параметры передаются как stdCall, а в клиенте l2 fastcall. Нужно лепить специальный переходник. Xсor где то выкладывал на форуме.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)

Последний раз редактировалось Yegor, 19.09.2013 в 10:31.
Yegor вне форума   Ответить с цитированием
Старый 19.09.2013, 14:36   #3
Местный
 
Аватар для goodvin1709
 
Регистрация: 13.02.2011
Сообщений: 506
Сказал Спасибо: 121
Имеет 100 спасибок в 83 сообщенях
goodvin1709 пока неопределено
По умолчанию

Да это уже сам перехват,а до этого что вобще нужно сделатЬ?
Каким фигом оно будет HookProc('Engine.dll', ... искать именно эту библиотеку? lpProcName: PChar; это параметр закодированого или открытого
названия функции?*
?OnDie@UGameEngine@@UAEHPAUUser@@AAVL2ParamStack@@ @Z
Вот этот параметр?

Добавлено через 7 минут
Можешь дать свой скайп что бы чуть чуть обьяснить?

Добавлено через 7 минут
Нашел сам файл advApiHook.pas
http://l2ph.coderx.ru/svn/l2phx3/3.6...advApiHook.pas
он вот тут.
Когда именно делать этот хук?

Добавлено через 24 минуты
OnDieOriginal: function (lpLibFileName: PAnsiChar): integer; Откуда ее взять?

Добавлено через 2 минуты
Оффтоп
Будет ли работать так?
__________________
---------------------------__--------__-----
---____- ___--____--- ___/'- /__ ___-(__)-____
--/-___-/-__-\/-__--\ /-__--'/--|-/--//---//--__--\
-/-/_/ -/-/_/--/-/_/--/-/_/--/|--|/--'//---//--/-/--/
-\___-/\____/\____/\____/-|____//__'//_'/-/__/
/_-__/

Последний раз редактировалось goodvin1709, 19.09.2013 в 14:36. Причина: Добавлено сообщение
goodvin1709 вне форума   Ответить с цитированием
Старый 20.09.2013, 01:39   #4
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Да, все правильно надо передавать закодированное название функции.

Перед тем как хукать нужно подгрузить в процесс l2 свою dll, а уже в ней осуществлять перехват.
В advApiHook есть функции внедрения своей dll в чужой процесс.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 20.09.2013, 18:23   #5
Местный
 
Аватар для goodvin1709
 
Регистрация: 13.02.2011
Сообщений: 506
Сказал Спасибо: 121
Имеет 100 спасибок в 83 сообщенях
goodvin1709 пока неопределено
По умолчанию

А так это не юнит,а library писать нужно?
__________________
---------------------------__--------__-----
---____- ___--____--- ___/'- /__ ___-(__)-____
--/-___-/-__-\/-__--\ /-__--'/--|-/--//---//--__--\
-/-/_/ -/-/_/--/-/_/--/-/_/--/|--|/--'//---//--/-/--/
-\___-/\____/\____/\____/-|____//__'//_'/-/__/
/_-__/
goodvin1709 вне форума   Ответить с цитированием
Старый 20.09.2013, 21:26   #6
Местный
 
Аватар для St1mul
 
Регистрация: 03.12.2011
Сообщений: 133
Сказал Спасибо: 63
Имеет 19 спасибок в 16 сообщенях
St1mul пока неопределено
По умолчанию

Самое главное если стоит LameGuard подгружать dll нужно вручную, не добавляй ее в список автоматом загружаемых dll или у тебя дальше выбора сервера не дойдет.
Если поищешь на этом форуме есть исходники l2cc вот их могу объяснить, но там не используется хукпроцедура, там другой метод.
St1mul вне форума   Ответить с цитированием
Старый 21.09.2013, 02:46   #7
Местный
 
Аватар для goodvin1709
 
Регистрация: 13.02.2011
Сообщений: 506
Сказал Спасибо: 121
Имеет 100 спасибок в 83 сообщенях
goodvin1709 пока неопределено
По умолчанию

Хотел бы с тобой пообщаться,может даш скайп или как с тобой связаться для быстрой переписки,видел l2cc

Добавлено через 4 часа 35 минут
Поковырялся,и подумал посидел, в итоге у меня что то получилось.
Взял тотал командер, через F3 вытянул названия из Engine.dll, т.е названия функций.Так как у меня Interlude клиент был под рукой,взял самую мне необходимую.
?RequestBypassToServer@UNetworkHandler@@UAEHAAVL2P aramStack@@@Z
И начал ковырять.
Написал код библиотеки:
Оффтоп
Взял WinInject 1.7b и прииньектил к L2.exe мою скомпилированую dll.
Все заработало.
Подхожу к NPC и нажимаю любой диалог, сразу ще выскакивает сообщение "Функция RequesBypassToServer была вызвана."
Вроде все не так уж и плохо.Но в игре действия не происходит,так как не возвращается результат.
Дальше я изменил функцию свою на :
function RequestBypassToServer_New: Integer;
begin
MessageDlg('Функция RequesBypassToServer была вызвана.',mtError, [mbOk],0);
result:=RequestBypassToServer_Old('Engine.dll');
end;
И сразу же выскакивает критом,я понял что результат не возвращается.
Теперь у меня задача,получать параметры от функций а так же их грамотно отправлять.
Помогите с этим.
__________________
---------------------------__--------__-----
---____- ___--____--- ___/'- /__ ___-(__)-____
--/-___-/-__-\/-__--\ /-__--'/--|-/--//---//--__--\
-/-/_/ -/-/_/--/-/_/--/-/_/--/|--|/--'//---//--/-/--/
-\___-/\____/\____/\____/-|____//__'//_'/-/__/
/_-__/

Последний раз редактировалось goodvin1709, 21.09.2013 в 02:49. Причина: Добавлено сообщение
goodvin1709 вне форума   Ответить с цитированием
Старый 21.09.2013, 03:07   #8
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Вот тут Xcor привел пример как сделать переходник для перехвата из Delphi

http://coderx.ru/showpost.php?p=50250&postcount=36
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 21.09.2013, 03:23   #9
Местный
 
Аватар для goodvin1709
 
Регистрация: 13.02.2011
Сообщений: 506
Сказал Спасибо: 121
Имеет 100 спасибок в 83 сообщенях
goodvin1709 пока неопределено
По умолчанию

Можешь сделать пример полегче,что то у меня нечего не получилось, я не понял с переходами,и откуда взять этот чертов параметр.
или даже пример как с моим перехватом Bypass,
еще очень запутался че к чему,если поподробней обьяснить.
__________________
---------------------------__--------__-----
---____- ___--____--- ___/'- /__ ___-(__)-____
--/-___-/-__-\/-__--\ /-__--'/--|-/--//---//--__--\
-/-/_/ -/-/_/--/-/_/--/-/_/--/|--|/--'//---//--/-/--/
-\___-/\____/\____/\____/-|____//__'//_'/-/__/
/_-__/

Последний раз редактировалось goodvin1709, 21.09.2013 в 10:10.
goodvin1709 вне форума   Ответить с цитированием
Старый 21.09.2013, 12:36   #10
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Мне самому надо в это вникать. Вникну напишу
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)

Последний раз редактировалось Yegor, 24.09.2013 в 01:04.
Yegor вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг


Опции темы
Опции просмотра

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

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


Часовой пояс GMT +4, время: 22:40.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!