Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
[Win32] может стоит попробовать более безопасные методы 10.09.02 16:51 Число просмотров: 1175
Автор: beetle <beetle> Статус: Member
|
нутогда вот тебе справка по "взрослому перехвату"
Перехват вызовов функций
|
<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]
т.е. они просто передают управление и ничего больше. Незнаю ну
помойму библиотека упрощена на столько что странно почему в ней ничего не работает.
|
|
|