Russian Qt Forum
Октябрь 01, 2024, 18:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: WinAPI запуск файла с памяти и перехват API  (Прочитано 15719 раз)
bixbit
Гость
« Ответ #15 : Апрель 18, 2012, 19:42 »

Хмм.. ну критиковать легко, спрашивать "а как же звучит задание" и.т.п. - долгие разборки но (как правило) без всякого полезного результата.

Хорошо, а если зайти с др стороны - повесить "фильтр/хук" просто на чтение файла?  Мои познания в WinAPI давно устарели, но, по идее, это "должно быть". Вызывающий наш - делаем напр хоr (получаем хорошие данные) иначе нет.
В общих чертах задание звучит: "На любую манипуляцию файла спросить пароль. При открытии из-под другой ОС "каша" а не файл."
Такой вопрос какой самый простой вариант внедрения хука?
Начни с статьи: "Ms-Rem - Перехват API функций в Windows NT (часть 1). Основы перехвата. ": http://wasm.ru/article.php?article=apihook_1
Полезная статья
еще пригодилась http://www.rsdn.ru/article/baseserv/apicallsintercepting.xml

Возник такой вопрос
Какие функции нужно перехватывать для работы с файлом (запуск, копирование, переименование, перемещение)
А то я пробовал перхватывать для проверки CreateDirectory.
Для примера созданого мной перехват проходит, а для екслорера нет
Записан
V1KT0P
Гость
« Ответ #16 : Апрель 18, 2012, 20:27 »

Хмм.. ну критиковать легко, спрашивать "а как же звучит задание" и.т.п. - долгие разборки но (как правило) без всякого полезного результата.

Хорошо, а если зайти с др стороны - повесить "фильтр/хук" просто на чтение файла?  Мои познания в WinAPI давно устарели, но, по идее, это "должно быть". Вызывающий наш - делаем напр хоr (получаем хорошие данные) иначе нет.
В общих чертах задание звучит: "На любую манипуляцию файла спросить пароль. При открытии из-под другой ОС "каша" а не файл."
Такой вопрос какой самый простой вариант внедрения хука?
Начни с статьи: "Ms-Rem - Перехват API функций в Windows NT (часть 1). Основы перехвата. ": http://wasm.ru/article.php?article=apihook_1
Полезная статья
еще пригодилась http://www.rsdn.ru/article/baseserv/apicallsintercepting.xml

Возник такой вопрос
Какие функции нужно перехватывать для работы с файлом (запуск, копирование, переименование, перемещение)
А то я пробовал перхватывать для проверки CreateDirectory.
Для примера созданого мной перехват проходит, а для екслорера нет
Читай справку микрософта, там все расписано. Для начала начни с: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364407%28v=vs.85%29.aspx
Вот например функции для работы с директориями: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363950%28v=vs.85%29.aspx
А вот для файлов: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364232%28v=vs.85%29.aspx
Записан
bixbit
Гость
« Ответ #17 : Апрель 21, 2012, 01:19 »

Хмм.. ну критиковать легко, спрашивать "а как же звучит задание" и.т.п. - долгие разборки но (как правило) без всякого полезного результата.

Хорошо, а если зайти с др стороны - повесить "фильтр/хук" просто на чтение файла?  Мои познания в WinAPI давно устарели, но, по идее, это "должно быть". Вызывающий наш - делаем напр хоr (получаем хорошие данные) иначе нет.
В общих чертах задание звучит: "На любую манипуляцию файла спросить пароль. При открытии из-под другой ОС "каша" а не файл."
Такой вопрос какой самый простой вариант внедрения хука?
Начни с статьи: "Ms-Rem - Перехват API функций в Windows NT (часть 1). Основы перехвата. ": http://wasm.ru/article.php?article=apihook_1
Полезная статья
еще пригодилась http://www.rsdn.ru/article/baseserv/apicallsintercepting.xml

Возник такой вопрос
Какие функции нужно перехватывать для работы с файлом (запуск, копирование, переименование, перемещение)
А то я пробовал перхватывать для проверки CreateDirectory.
Для примера созданого мной перехват проходит, а для екслорера нет
Читай справку микрософта, там все расписано. Для начала начни с: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364407%28v=vs.85%29.aspx
Вот например функции для работы с директориями: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363950%28v=vs.85%29.aspx
А вот для файлов: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364232%28v=vs.85%29.aspx
Перехватил все функии для копирования файлов, но експлорер не реагирует на перехват  (в far перехватывает CopyFileA)
В чём проблема?
И еще для какой функции нужно делать перехват при запуску асоциированой программой?
Записан
V1KT0P
Гость
« Ответ #18 : Апрель 21, 2012, 13:10 »

Перехватил все функии для копирования файлов, но експлорер не реагирует на перехват  (в far перехватывает CopyFileA)
В чём проблема?
И еще для какой функции нужно делать перехват при запуску асоциированой программой?
Если точно уверен что перехватываешь все, то смотри в сторону недокументированных функций. Там много интересного, и возможно експлорер через них и получает информацию.
Записан
bixbit
Гость
« Ответ #19 : Апрель 21, 2012, 14:05 »

Перехватил все функии для копирования файлов, но експлорер не реагирует на перехват  (в far перехватывает CopyFileA)
В чём проблема?
И еще для какой функции нужно делать перехват при запуску асоциированой программой?
Если точно уверен что перехватываешь все, то смотри в сторону недокументированных функций. Там много интересного, и возможно експлорер через них и получает информацию.
Нашёл программу мониторинга функий.
Теперь я не могу понять как експолрер такое проворачивает?
Копирование файла readme.txt
Записан
V1KT0P
Гость
« Ответ #20 : Апрель 21, 2012, 21:41 »

Перехватил все функии для копирования файлов, но експлорер не реагирует на перехват  (в far перехватывает CopyFileA)
В чём проблема?
И еще для какой функции нужно делать перехват при запуску асоциированой программой?
Если точно уверен что перехватываешь все, то смотри в сторону недокументированных функций. Там много интересного, и возможно експлорер через них и получает информацию.
Нашёл программу мониторинга функий.
Теперь я не могу понять как експолрер такое проворачивает?
Копирование файла readme.txt

Вроде как есплорер тупо прочитал данные, а затем записал в новый файл. Если я все правильно понял.
Я не пойму в чем у тебя проблема. Сделай фейковый файл и возвращай размер который необходим. А затем если его считывает программа которой не разрешен доступ отдавай нули или вообще не давай читать. А если та которой разрешили то отдавай настоящие данные. В итоге реальные данные находятся только в оперативке а на диске пустой файл.
Записан
bixbit
Гость
« Ответ #21 : Апрель 21, 2012, 23:00 »

Вроде как есплорер тупо прочитал данные, а затем записал в новый файл. Если я все правильно понял.
Я не пойму в чем у тебя проблема. Сделай фейковый файл и возвращай размер который необходим. А затем если его считывает программа которой не разрешен доступ отдавай нули или вообще не давай читать. А если та которой разрешили то отдавай настоящие данные. В итоге реальные данные находятся только в оперативке а на диске пустой файл.
Тут другая проблема появилась.
Такой код вылетает. Именно через if насколько я понимаю. Но в чём причина?
Код:
HANDLE
WINAPI
My_CreateFileA(
    __in     LPCSTR lpFileName,
    __in     DWORD dwDesiredAccess,
    __in     DWORD dwShareMode,
    __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    __in     DWORD dwCreationDisposition,
    __in     DWORD dwFlagsAndAttributes,
    __in_opt HANDLE hTemplateFile
){
if(dwDesiredAccess==FILE_SHARE_READ)
{
MessageBoxA(NULL,"","",0);

}
return ((HANDLE (__stdcall*)(
LPCSTR ,
    DWORD ,
    DWORD ,
    LPSECURITY_ATTRIBUTES ,
    DWORD ,
    DWORD ,
    HANDLE ))adr_CreateFileA)(
lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile
);
}
Записан
V1KT0P
Гость
« Ответ #22 : Апрель 21, 2012, 23:08 »

Тут другая проблема появилась.
Такой код вылетает. Именно через if насколько я понимаю. Но в чём причина?
Код:
HANDLE
WINAPI
My_CreateFileA(
    __in     LPCSTR lpFileName,
    __in     DWORD dwDesiredAccess,
    __in     DWORD dwShareMode,
    __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    __in     DWORD dwCreationDisposition,
    __in     DWORD dwFlagsAndAttributes,
    __in_opt HANDLE hTemplateFile
){
if(dwDesiredAccess==FILE_SHARE_READ)
{
MessageBoxA(NULL,"","",0);

}
return ((HANDLE (__stdcall*)(
LPCSTR ,
    DWORD ,
    DWORD ,
    LPSECURITY_ATTRIBUTES ,
    DWORD ,
    DWORD ,
    HANDLE ))adr_CreateFileA)(
lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile
);
}
И как ты себе такой хук представляешь? Как только ОС или программа начинает читать по идее начнут бешено появляться сообщения и тем самым подвесят. Лучше в файл записывай. Вообще хуки принято делать так, чтоб они выполнялись максимально быстро а не подвешивали все подряд.
Записан
bixbit
Гость
« Ответ #23 : Апрель 21, 2012, 23:16 »

Тут другая проблема появилась.
Такой код вылетает. Именно через if насколько я понимаю. Но в чём причина?
Код:
HANDLE
WINAPI
My_CreateFileA(
    __in     LPCSTR lpFileName,
    __in     DWORD dwDesiredAccess,
    __in     DWORD dwShareMode,
    __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    __in     DWORD dwCreationDisposition,
    __in     DWORD dwFlagsAndAttributes,
    __in_opt HANDLE hTemplateFile
){
if(dwDesiredAccess==FILE_SHARE_READ)
{
MessageBoxA(NULL,"","",0);

}
return ((HANDLE (__stdcall*)(
LPCSTR ,
    DWORD ,
    DWORD ,
    LPSECURITY_ATTRIBUTES ,
    DWORD ,
    DWORD ,
    HANDLE ))adr_CreateFileA)(
lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile
);
}
И как ты себе такой хук представляешь? Как только ОС или программа начинает читать по идее начнут бешено появляться сообщения и тем самым подвесят. Лучше в файл записывай. Вообще хуки принято делать так, чтоб они выполнялись максимально быстро а не подвешивали все подряд.
Ну я на локальном перехвате пробовал
В глобалном здесь  вместо
Код:
if(dwDesiredAccess==FILE_SHARE_READ)

Код:
if(lpFileName==L"C:\\Users\\User\\Desktop\\readme.txt")
Так дело в том что при первом что при втором программа вылетает
Записан
V1KT0P
Гость
« Ответ #24 : Апрель 21, 2012, 23:23 »

Так дело в том что при первом что при втором программа вылетает
Если MessageBox заменить на запись в другой файл то тоже вылетает?
Записан
bixbit
Гость
« Ответ #25 : Апрель 21, 2012, 23:28 »

Так дело в том что при первом что при втором программа вылетает
Если MessageBox заменить на запись в другой файл то тоже вылетает?
Если ты имееш ввиду
Код:
if(lpFileName==L"C:\\Users\\User\\Desktop\\readme.txt")
{
        lpFileName=L"F:\\go.txt";
}
то да также вылетает
« Последнее редактирование: Апрель 22, 2012, 05:27 от bixbit » Записан
bixbit
Гость
« Ответ #26 : Апрель 22, 2012, 23:00 »

Так дело в том что при первом что при втором программа вылетает
Если MessageBox заменить на запись в другой файл то тоже вылетает?
Если ты имееш ввиду
Код:
if(lpFileName==L"C:\\Users\\User\\Desktop\\readme.txt")
{
        lpFileName=L"F:\\go.txt";
}
то да также вылетает

Причины пробемы так и не нашёл.
Пересобрал проект с нуля и все работает Улыбающийся
Заметил одну особенность
Код:
		LPCSTR rez="C:\\Users\\User\\Desktop\\readme.txt";
if(memcmp(lpFileName,rez,strlen(rez))==0)
{
MessageBoxA(NULL,lpFileName,"My_CreateFileA memcmp",0);
}
if(lpFileName==rez)
{
MessageBoxA(NULL,lpFileName,"My_CreateFileA if",0);
}
почему проверка через memcmp проходит, а через == нет?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Апрель 23, 2012, 10:24 »

почему проверка через memcmp проходит, а через == нет?
Потому что == сравнивает адреса, а memcmp содержимое.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.177 секунд. Запросов: 23.