Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Скрыть папку под FAT32 в Delphi

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Stalker01

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как можно программно скрыть папку под FAT32? При чем папка должна быть невидема даже если включено отображение скрытых файлов, т.е. просто установить ей свойство hidden нельзя.

Всего записей: 7 | Зарегистр. 10-02-2005 | Отправлено: 02:28 13-04-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Stalker01
Используется переопределение работы функций FindFirstFile FindNextFile И если в качестве пути возвращаемого этими функциями идет твоя папка, то ставится заглушка. Как переопределить работу функций почитай статью http://www.rsdn.ru/article/baseserv/IntercetionAPI.xml

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:16 13-04-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Чудненько. Версию для Delphi никто не желает отладить?

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 08:56 13-04-2005
Stalker01

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за статью! Может у кого нибудь есть версия под Delphi?

Всего записей: 7 | Зарегистр. 10-02-2005 | Отправлено: 12:32 13-04-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Stalker01

Цитата:
Спасибо за статью! Может у кого нибудь есть версия под Delphi?

Там чистое АПИ возьми и портируй под Дельфи. Просто за тебя это никто делать не будет.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:46 14-04-2005
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Действительно интересно. Спасибо

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 08:49 14-04-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Там чистое АПИ возьми и портируй под Дельфи. Просто за тебя это никто делать не будет.

Ну кто то за нас Си сделал, почему бы и Делфи не сделать. Похоже уже сделано, надо только источник найти по лучше. Мне кажется лучше искать в сторону JCL/JVCL. Там дофига всякого....
Например в JclSysUtils я уже вижу WriteProcessMemory и VirtualProtect.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 10:14 14-04-2005
Stalker01

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробую, ещё раз спасибо!

Всего записей: 7 | Зарегистр. 10-02-2005 | Отправлено: 16:46 14-04-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Смотрел JCL/JVCL. Алгоритма (IntercetionAPI), таков как он представлен в статье нету. Однако все строительные блоки, необходимые для кода совместимого с Delphi5 по Delphi2005, присутствуют и в IDE Delphi имеется пункт Insert JCL Debug data. Это означает что или они не весь MSDN на дельфи перевели или у них своё понимание чем следует пользоваться. Во всяком случае воспроизводство этого алгоритма с последующей публикацией у них - это тема.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 10:48 15-04-2005
c0r0ner



злобный доктор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pinocchio
JCL/examples/ApiHookDemoMain.dpr - Пример позволяющий производить "Перехват API через таблицу импорта".

Всего записей: 742 | Зарегистр. 09-12-2001 | Отправлено: 10:55 15-04-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
c0r0ner
Thank, нашёл, у меня jcl\examples\vcl\peimage\ApiHookExample.dpr
Вообще jcl самая отвязная тулзина.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 12:08 15-04-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Кстати, такая фигня. В WinXP sp1 перехват работает, а WinXP sp2 почему-то неработает.
Очень приятная штука - они на диалоговое окно открытия файла в Delphi навешивают
чекбокс Favoures(в смысле избранное). Вот код отвечающий за подмену:

Код:
 
var
  OldGetOpenFileName: TGetOpenFileName;
....
procedure TFavOpenDialog.HookDialogs;
var
  Pe: TJclPeImage;
  I: Integer;
 
  procedure HookImportsForModule(ModuleBase: Pointer);
  const
    comdlg32 = 'comdlg32.dll';
  begin
    if ModuleBase <> nil then
    begin
      FHooks.HookImport(ModuleBase, comdlg32, 'GetOpenFileNameA',
         @NewGetOpenFileName, @OldGetOpenFileName);
      FHooks.HookImport(ModuleBase, comdlg32, 'GetSaveFileNameA',
         @NewGetSaveFileName, @OldGetSaveFileName);
    end;
  end;
 

 
А вот место до которого можно добраться:

Код:
 
function NewGetOpenFileName(var OpenFile: TOpenFilename): Bool; stdcall;
begin
  InitOpenFileStruct(OpenFile);
  //ShowMessage('Добрались до сюда.');
  Result := OldGetOpenFileName(OpenFile); // В этом месте ничего не происходит
end;
 

 
Я думаю может какие-то опции компилятору были потеряны, следовательно машинный код получен не такой. Вообщем не всегда этими штуками можно воспользоваться.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 11:39 18-04-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pinocchio

Цитата:
Очень приятная штука - они на диалоговое окно открытия файла в Delphi навешивают  
чекбокс Favoures(в смысле избранное). Вот код отвечающий за подмену:

Вообще-то для добавления каких либо контролов на стандартные диалоги открытия, сохранения вообще не надо ничего подменять. Просто при вызове данных диалогов указывается шаблон, который надо будет вставить в этот контрол, callback функция которая будет отслеживать изменения контролов и хук, если надо что то еще отследить (не помню надо в хелпе смотреть), а вот нафига ее подменять в вызове? Это скорее всего, чтобы при вызове любого диалога открытия сохранения в системе появились эти контролы на этих диалогах, единственное разумное объяснение.  

Цитата:
 В этом месте ничего не происходит

Возможно потому что данный код должен быть в библиотеке, тогда приложение будет знать откуда его грузить, причем библиотека должна быть внедрена в адресное пространство процесса, вызывающего данный кусок, иначе указатель на функцию (новую или старую, надо смотреть) будет указывать неизвестно куда.
 
Добавлено:
Замечательно работающий проект на читстом Дельфи. Перехватывает и переопределяет MessageBox (только под NT надо вместо MessageBoxA вызывать MessageBoxW)
http://www.nethack.com.ru/progr/hooks_2.shtml по умолчанию сообщения подменяются только в блокноте, но если убрать проверку то хучится будут все мессагбоксы. Хм у меня не получилось во всех окнах Но если надо то доделаете.
type PPointer = ^Pointer; это у кого его нет в описании (как у меня)

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:56 19-04-2005
Ke



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Stalker01

Цитата:
Как можно программно скрыть папку под FAT32? При чем папка должна быть невидема даже если включено отображение скрытых файлов, т.е. просто установить ей свойство hidden нельзя.  

Скажи мне, зачем это, если не для написания вируса ?

Всего записей: 970 | Зарегистр. 29-11-2004 | Отправлено: 06:22 19-04-2005
c0r0ner



злобный доктор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Хм у меня не получилось во всех окнах Но если надо то доделаете.  

дело в том что могут быть следующие грабли: нужно внедрится в адресное пространство системы, например winlogon.  
 

Цитата:
Скажи мне, зачем это, если не для написания вируса ?  

Судя по вопросу, оно тебе не нужно. А такие продукты как FolderGuard думаешь на воздухе работают?

Всего записей: 742 | Зарегистр. 09-12-2001 | Отправлено: 10:08 19-04-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
а вот нафига ее подменять в вызове?

1)Ну если не похабить бинарь Delphi, то единственный способ сделать что либо при вызове окна открытия файла, так это перехват.
2)Что нужно сделать? Заполнить выпадающий список значениями из INI файла.
 

Цитата:
иначе указатель на функцию (новую или старую, надо смотреть) будет указывать неизвестно куда.  

Тогда наверное я бы поймал там экцепт или увидел бы что OldGetOpenFileName = nil.
Думаю биде в опциях или влияние сервиспака2. А может нарушено GExpert-ом.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 13:57 19-04-2005
Ke



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
c0r0ner

Цитата:
Судя по вопросу, оно тебе не нужно.  

Это не ответ.

Всего записей: 970 | Зарегистр. 29-11-2004 | Отправлено: 05:31 20-04-2005
Stalker01

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем спасибо за информацию!  

Цитата:
Скажи мне, зачем это, если не для написания вируса ?

Есть небольшой проект, полностью рассказывать долго, но в общих чертах это программа для ограничения доступа к компьютеру.

Всего записей: 7 | Зарегистр. 10-02-2005 | Отправлено: 03:54 22-04-2005
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Скрыть папку под FAT32 в Delphi


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru