информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Сетевые кракеры и правда о деле ЛевинаСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Не проходите мимо! Помогите новичку в перехвате даных от DLL. 14.09.02 11:30  Число просмотров: 1068
Автор: Xemax Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Нашел ошибку но правда не знаю что с ней делать. Загрузка останавливается из-за того что то процесс с лже-Advapi32.dll использует процессор почти 100%. Кто сталкивался с таким? Help???????????????
<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: 1 s   Design: Vadim Derkach