информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Не проходите мимо! Помогите новичку в перехвате даных от DLL. 11.09.02 17:57  Число просмотров: 1135
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> Насчет отладочной инфы, библиотека создает файл с помощью
> CreateFile ну и пытается писать туда разную инфу о том как
> работает лже DLL. Ну только пытается, функция WriteFile
> почемуто не работает.

С NT опыта у меня нет, а в 98 я бы сделал (и делал) так:
- либо в сайсе ставишь условный бряк на CreateFile (if (ESP->4...== Имя твоего лог-файла)), причем в сайс я попадал ДО загрузки виндов - и там ставил этот бряк и пускал винду, тем самым ты попадешь в свой код, который тока-тока собрался вызвать CreateFile - ну и поглядишь, как и почему он не может сделать WriteFile;
- либо пытаешься ставить beep-ы разные (в 98 можно в порты звуковые писать, в NT вроде тоже) - вроде если бип был, то ты что-то выполнил...
<programming>
[C++] Не проходите мимо! Помогите новичку в перехвате даных от DLL. 09.09.02 20:04  
Автор: Xemax Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Заранее благодарю за то что не прошли мимо.

Я читал в инете несколько статей про то как можно перехватывать данные от DLL создав DLL которая
будет экспортировать те же функции что и настящая DLL. Так вот сделал вроде все а библиотека не
работает загрузка XP завершается черным экраном. Я могу выслать код этой DLL по почте может быть
кто-нибудь делал уже подобные вещи с перехватом и поможет найти ошибку?
[C++] Не проходите мимо! Помогите новичку в перехвате даных от DLL. 14.09.02 11:30  
Автор: Xemax Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Нашел ошибку но правда не знаю что с ней делать. Загрузка останавливается из-за того что то процесс с лже-Advapi32.dll использует процессор почти 100%. Кто сталкивался с таким? Help???????????????
[C++] Не проходите мимо! Помогите новичку в перехвате даных от DLL. 10.09.02 17:20  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> Заранее благодарю за то что не прошли мимо.
> <...>
> выслать код этой DLL по почте может быть
> кто-нибудь делал уже подобные вещи с перехватом и поможет
> найти ошибку?

А нельзя как-то понять, доходит ли управление к тебе (к твоим лже-функциям), к какой именно - если доходит, и где умирает ? (В отладчике или вывести "отладочный сообщений") ?
[C++] Не проходите мимо! Помогите новичку в перехвате даных от DLL. 11.09.02 15:55  
Автор: Xemax Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Заранее благодарю за то что не прошли мимо.
> > <...>
> > выслать код этой DLL по почте может быть
> > кто-нибудь делал уже подобные вещи с перехватом и
> поможет
> > найти ошибку?
>
> А нельзя как-то понять, доходит ли управление к тебе (к
> твоим лже-функциям), к какой именно - если доходит, и где
> умирает ? (В отладчике или вывести "отладочный сообщений")
> ?

Насчет отладочной инфы, библиотека создает файл с помощью CreateFile ну и пытается писать туда разную инфу о том как работает лже DLL. Ну только пытается, функция WriteFile почемуто не работает.
[C++] Не проходите мимо! Помогите новичку в перехвате даных от DLL. 11.09.02 17:57  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> Насчет отладочной инфы, библиотека создает файл с помощью
> CreateFile ну и пытается писать туда разную инфу о том как
> работает лже DLL. Ну только пытается, функция WriteFile
> почемуто не работает.

С NT опыта у меня нет, а в 98 я бы сделал (и делал) так:
- либо в сайсе ставишь условный бряк на CreateFile (if (ESP->4...== Имя твоего лог-файла)), причем в сайс я попадал ДО загрузки виндов - и там ставил этот бряк и пускал винду, тем самым ты попадешь в свой код, который тока-тока собрался вызвать CreateFile - ну и поглядишь, как и почему он не может сделать WriteFile;
- либо пытаешься ставить beep-ы разные (в 98 можно в порты звуковые писать, в NT вроде тоже) - вроде если бип был, то ты что-то выполнил...
[Win32] может стоит попробовать более безопасные методы 09.09.02 22:22  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
как-то хуки к примеру - система не упадет, да и ты много интересного для себя почерпнешь.

Внедрение DLL с помощью ловушек
[Win32] может стоит попробовать более безопасные методы 10.09.02 15:25  
Автор: Xemax Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> как-то хуки к примеру - система не упадет, да и ты много
> интересного для себя почерпнешь.

Спасибо за предложение но я знаю что такое хуки и как с ними работать. Меня интересует перехваты по существеннее и посерьезней, чем просто перехват нажатой клавы или сообщений.
[Win32] может стоит попробовать более безопасные методы 10.09.02 16:51  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
нутогда вот тебе справка по "взрослому перехвату"

Перехват вызовов функций
[Win32] может стоит попробовать более безопасные методы 11.09.02 10:01  
Автор: IgorR <Igor Razin> Статус: Member
<"чистая" ссылка>
> нутогда вот тебе справка по "взрослому перехвату"
Ну не такой уж он и "взрослый". Рихтер, к примеру, его очень не рекомендует. Хотя можно, конечно.
[Win32] иногда решения нужно принимать самому 11.09.02 17:41  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
> > нутогда вот тебе справка по "взрослому перехвату"
> Ну не такой уж он и "взрослый". Рихтер, к примеру, его
> очень не рекомендует. Хотя можно, конечно.
Рихтер к примеру рекомендует использовать зеленые презервативы и микросовтовские фаерволы - самые безопасные фаерволы в мире
А что за DLL? Ты зря так просто сразу полез в системные, потренируйся "на кошках" сперва ;-) 09.09.02 21:21  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Между прочим, это довольно неблагодарный труд создавать Wrapper для dll в виде подстановочной с таким же именем. Нужно один к одному воссоздать весь API, что они экспортируют. А тем более системные DLL, там они часто вообще (функции) без имени (по порядковым номерам), много недокументированных функций, от версии к версии они меняются ;-(
Если нужно отслеживать толко один процесс, то лучше работать только с этим процессом и перехватывать вызова в нём. Или вообще, залезть в Kernel Mode и почувствовать себя если не полубогом, то уж Самим Билли Гейтсом точно ;-)). Ты не задумывался, к примеру, почему RegMon или FileMon от Winternals не стали делать Wrapper для advapi32 или kernel32 ;-))))))) Хотя на самом деле постановка проблемы такая же — перехватить функции записи/чтения реестра или файловой системы. Но они делают это посредством драйвера режима ядра.
Так что такие вот дела.
А что за DLL? Ты зря так просто сразу полез в системные, потренируйся "на кошках" сперва ;-) 10.09.02 15:08  
Автор: Xemax Статус: Незарегистрированный пользователь
Отредактировано 10.09.02 15:18  Количество правок: 2
<"чистая" ссылка>
> Между прочим, это довольно неблагодарный труд создавать
> Wrapper для dll в виде подстановочной с таким же именем.
> Нужно один к одному воссоздать весь API, что они
> экспортируют. А тем более системные DLL, там они часто
> вообще (функции) без имени (по порядковым номерам), много
> недокументированных функций, от версии к версии они
> меняются ;-(
> Если нужно отслеживать толко один процесс, то лучше
> работать только с этим процессом и перехватывать вызова в
> нём. Или вообще, залезть в Kernel Mode и почувствовать себя
> если не полубогом, то уж Самим Билли Гейтсом точно ;-)). Ты
> не задумывался, к примеру, почему RegMon или FileMon от
> Winternals не стали делать Wrapper для advapi32 или
> kernel32 ;-))))))) Хотя на самом деле постановка проблемы
> такая же — перехватить функции записи/чтения реестра или
> файловой системы. Но они делают это посредством драйвера
> режима ядра.
> Так что такие вот дела.

Я знаю что можно с помощью драйвера. Но мои познания в этой области равны почти NULL. А теперь насчет кода я непонимая просто почему он не работает.
Я читал в инете статью про то как сделать поддельную User32.dll и что то по приведеному способу в этой статье у меня не получается. Передавать управление на
настоящую функцию через команду ассемблера jmp. Привиду кусок кода из DLL. Кстати перехватывается Advapi32.dll.

/*упрощаем библитеку. Поддельная библиотека не будет использовать run-time library и другие библиотеки крому
kernel32.dll*/
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:DllMain")
#pragma comment(linker,"/NODEFAULTLIB")

/*Объявление переменых которые будут хранить адресса функций из настоящей Advapi.dll*/

FARPROC g_pfnA_SHAFinal;
FARPROC g_pfnA_SHAInit;
FARPROC g_pfnA_SHAUpdate;
FARPROC g_pfnAbortSystemShutdownA;
FARPROC g_pfnAbortSystemShutdownW;
FARPROC g_pfnAccessCheck;
FARPROC g_pfnAccessCheckAndAuditAlarmA;
FARPROC g_pfnAccessCheckAndAuditAlarmW;
FARPROC g_pfnAccessCheckByType;

/*объявление других переменых которые будут хранить адресса функций из настоящей Advapi.dll*/
.......

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
char szRealWININET[ MAX_PATH ];
HMODULE hModUser;

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
DisableThreadLibraryCalls(GetModuleHandle(0));

GetSystemDirectory( szRealWININET, sizeof(szRealWININET) );
lstrcat( szRealWININET, "\\OLDAPI.DLL" );

hModUser = LoadLibrary( szRealWININET );
if(hModUser == INVALID_HANDLE_VALUE)
{
return FALSE;
}
g_pfnA_SHAFinal = GetProcAddress( hModUser, "A_SHAFinal");
g_pfnA_SHAInit = GetProcAddress( hModUser, "A_SHAInit");
g_pfnA_SHAUpdate = GetProcAddress( hModUser, "A_SHAUpdate" );
g_pfnAbortSystemShutdownA = GetProcAddress( hModUser, "AbortSystemShutdownA" );
//и так далее для всех функций
}

bool EnableAllCalls = true;

inline CallsControl(){ /*if(!EnableAllCalls)return 0;*/}

/*******************************************88
/*Дальше идет ключивой момент нам не нужны прототипы всех функций
мы просто с помощью jmp передаем управлене на настоящуюю функцию,
обрабытывать будем только избранные функции реестра и LogonUseA, LogonUserW ;-))
*/
/*С помощью этого макроса будет передаваться управление на нужную функцию.*/

#define JMP( pfn ) \
__asm jmp far dword ptr [pfn]

__declspec ( naked ) void A_SHAFinal(){ CallsControl(); JMP( g_pfnA_SHAFinal ) }
__declspec ( naked ) void A_SHAInit(){ CallsControl(); JMP( g_pfnA_SHAInit ) }
__declspec ( naked ) void A_SHAUpdate(){ CallsControl(); JMP( g_pfnA_SHAUpdate ) }
__declspec ( naked ) void AbortSystemShutdownA(){ CallsControl(); JMP( g_pfnAbortSystemShutdownA ) }
__declspec ( naked ) void AbortSystemShutdownW(){ CallsControl(); JMP( g_pfnAbortSystemShutdownW ) }
__declspec ( naked ) void AccessCheck(){ CallsControl(); JMP( g_pfnAccessCheck ) }
__declspec ( naked ) void AccessCheckAndAuditAlarmA(){ CallsControl(); JMP( g_pfnAccessCheckAndAuditAlarmA ) }
__declspec ( naked ) void AccessCheckAndAuditAlarmW(){ CallsControl(); JMP( g_pfnAccessCheckAndAuditAlarmW ) }
__declspec ( naked ) void AccessCheckByType(){ CallsControl(); JMP( g_pfnAccessCheckByType ) }
__declspec ( naked ) void AccessCheckByTypeAndAuditAlarmA(){ CallsControl(); JMP( g_pfnAccessCheckByTypeAndAuditAlarmA ) }
__declspec ( naked ) void AccessCheckByTypeAndAuditAlarmW(){ CallsControl(); JMP( g_pfnAccessCheckByTypeAndAuditAlarmW ) }

....
// и так далле объявление всех функций
//конец кода

Дизассемблированые функции выглядят так

Exported fn(): RegOpenKeyW - Ord:0239h

* Reference To: ADVAPI32.RegOpenKeyW, Ord:0174h
|
:10004F20 FF25AC150010 Jmp dword ptr [100015AC]

Exported fn(): RegOverridePredefKey - Ord:023Ah

* Reference To: ADVAPI32.RegOverridePredefKey, Ord:0175h
|
:10004F26 FF25B0150010 Jmp dword ptr [100015B0]

Exported fn(): RegQueryInfoKeyA - Ord:023Bh

* Reference To: ADVAPI32.RegQueryInfoKeyA, Ord:0176h
|
:10004F2C FF25B4150010 Jmp dword ptr [100015B4]

т.е. они просто передают управление и ничего больше. Незнаю ну
помойму библиотека упрощена на столько что странно почему в ней ничего не работает.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach