Сейчас на форуме: Slinger, Rio (+6 невидимых)

 eXeL@B —› Основной форум —› вызов функции внедренной длл из других длл процесса
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 августа 2006 12:49
· Личное сообщение · #1

при реинженериге одной внедряемой длл я столкнулся с тем, что эта длл как то умудряется заменить одну инструкцию вызовова в одной из родных дллек процесса инструкцию вызова одной из своих функций

я прошу объяснить можно ли расчитать адрес вызова НЕ выполняя внутри оригинальных ддлек ни какого кода аля LoadLibrary или GetProcAddress или что то меняя в заголовках?

З.Ы. у меня возникла одна идейка - домой приду проверю, но если можно поправьте сейчас:
если я выполню call $+5/ pop ebx то я получу полный адресс инструкции "pop ebx" ? могу ли я вставить этот адрес с в родную длл процесса? то есть приведет ли это к вызову инструкции "pop ebx" из этой дллки?




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 02 августа 2006 13:00
· Личное сообщение · #2

hybrid пишет:
умудряется заменить одну инструкцию вызовова в одной из родных дллек процесса инструкцию вызова одной из своих функций

Чё-та намудрил. Напииш код, что на что меняется и где.
Что подразумеывается под "оригинальной дллкой"

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 августа 2006 13:18
· Личное сообщение · #3

допустим есть процесс в который я хочу внедрить свою длл
у этого процесс в адресном прострастве есть свои дллки
пускай для определенности у него есть длл под названием original1.dll
в ней есть такой код:
;====================
;original1.dll
...
int 3
internal_function1_of_original1.dll: push ebp
mov ebp, esp
sub ebp, X
...
call internal_function2_of_original1.dll
...
ret X
int 3
...
int 3
internal_function2_of_original1.dll: push ebp
bla bla ..
ret
int 3
...
;====================


далее есть длл которая внедряется в адресное пространство процесса
//====================

static int __declspec(naked) thunk()
{
...
}

//------------------------------------------------------
int __stdcall DllMain(HINSTANCE hinst, unsigned long reason, void*)
{
switch ( reason )
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinst);
...
break;
case DLL_PROCESS_DETACH:
...
break;
}
return 1;
}
//======================

после внедрения этой длл в cпроецированном коде origina1.dll меняется вызов
"call internal_function2_of_original1.dll"
на
"call address_of_thunk"

я хочу понять как расчитывается address_of_thunk




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 02 августа 2006 16:30
· Личное сообщение · #4

addr_kuda - addr_otkuda - 5
Это будут байты прыжка. Если же функция вызывается [ADDR], тогда его надо подменть

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 02 августа 2006 19:52
· Личное сообщение · #5

Или ты не понимешь, как вычислить адрес функции-хука, которая будет получать управление при вызове апи? типа адрес thunk не можешь найти, я так понял?

-----
Недостаточно только получить знания:надо найти им приложение



 eXeL@B —› Основной форум —› вызов функции внедренной длл из других длл процесса
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати