Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зашить драйвер в exe 
:(
    Опции темы
x8m6
Дата 17.1.2012, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



Есть приложение и отдельно лежащий драйвер .sys который это приложение юзает. Можно каким-либо способом запихнуть этот драйвер в приложение, так чтобы это был один цельный исполняемый файл? Пробовал на этапе компиляции добавлять драйвер к ресурсам приложения (студия при этом выдала диалог add custom rule - я на него забил) , но не помогло. Может из-за того что custom rule не задал? 
PM MAIL   Вверх
Fynivx
Дата 17.1.2012, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.8.2011

Репутация: нет
Всего: 1



Запихнуть в data-сегмент, а при запуске извлечь, записать в файл и заюзать. В руткитах так обычно делают.

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

Это сообщение отредактировал(а) Fynivx - 17.1.2012, 19:10
PM MAIL   Вверх
Dem_max
Дата 17.1.2012, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39





--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
xvr
Дата 18.1.2012, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Добавлю - что бы загрузить драйвер (в систему) его надо иметь в виде отдельного файла. А уж как этот файл появится - это ваше дело (можно и из ресурсов экстрагировать). Кстати, после загрузки файл можно и удалить (IMHO)

PM MAIL   Вверх
500mhz
Дата 18.1.2012, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



а что ехе себя  в виде драйвера не сможет разве загрузить?


--------------------

PM MAIL ICQ   Вверх
xvr
Дата 18.1.2012, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(500mhz @ 18.1.2012,  16:28)
а что ехе себя  в виде драйвера не сможет разве загрузить?

Тут либо exe либо драйвер - у них разные подсистемы в PE, да и по сути они разные вещи: exe это exe, а драйвер - это dll режима ядра

PM MAIL   Вверх
500mhz
  Дата 18.1.2012, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



xvr
При чем тут подсистемы? что sys что dll что ехе = РЕ формат.
Никто же не запрещает делать экспорты из ехе и потом грузить через LoadLibrary, хотя с dll там тоже подсистемы разные.

пс
шас попробую)

Это сообщение отредактировал(а) 500mhz - 18.1.2012, 20:11


--------------------

PM MAIL ICQ   Вверх
x8m6
Дата 18.1.2012, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



Делаю, как в статье, ссылку на которую предоставил тов. Dem_max
В myapp.rc добавил строчку:
Код

IDR_DRIVER_DATA         RCDATA               "drv.sys"

Прописал это в заголовке resource.h:
Код

#define IDR_DRIVER_DATA             "driver"


В проекте VS добавил drv.sys в папку Resource Files в Solution Explorer.

В коде загружаю ресурс:
Код

..
HMODULE hMod=GetModuleHandle(NULL);
HRSRC hRes=FindResource(hMod,IDR_DRIVER_DATA,RT_RCDATA);
HGLOBAL hGlob=LoadResource(hMod,hRes);
BYTE *lpbArray=(BYTE*)LockResource(hGlob); 
DWORD dwFileSize=SizeofResource(hMod,hRes);
int hFile=_open(driverPath,O_BINARY|O_CREAT|O_WRONLY,S_IWRITE);
 if(_write(hFile,lpbArray,dwFileSize)==-1) 
 _close(hFile);

 _close(hFile);
...

Но FindResource возвращает NULL. Что не так?

Цитата

что бы загрузить драйвер (в систему) его надо иметь в виде отдельного файла. 

А сразу в память нельзя? Может использовать какой-нибудь упаковщик?





PM MAIL   Вверх
Dem_max
Дата 19.1.2012, 04:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Цитата

Но FindResource возвращает NULL. Что не так?


Ну не знаю, во первых бы проверил, что в EXE действительно присутствует drv.sys в секции RCDATA

Код

HRSRC hRes=FindResource(hMod,  MAKEINTRESOURCE(IDR_DRIVER_DATA), RT_RCDATA);


Ну вот мой 100% рабочий код

Код

int SaveDataFromResourceToTemp(PTCHAR ResourceName, PTCHAR &Path, PTCHAR FileName)
{

        HRSRC hRes = FindResource(app_hInstance, ResourceName, RT_RCDATA);
        if(!hRes) return -1;

  
        HGLOBAL hGlob = LoadResource(app_hInstance, hRes);
      if(!hGlob) return -1; 


        BYTE *lpbArray = (BYTE*)LockResource(hGlob);
      if(!lpbArray) return -1;

        DWORD dwFileSize = SizeofResource(app_hInstance, hRes);
      if(!dwFileSize) return -1;

        Path = new TCHAR[MAX_PATH];  //BUFSIZE//
        if(!Path) return -1;

      // получаем директорию под временные файлы
        DWORD dwRetVal = GetTempPath(MAX_PATH, Path); 
      if(dwRetVal < MAX_PATH || dwRetVal != 0)
      {
            lstrcat(Path, FileName);
        }

        DeleteFile(Path);

      HANDLE hFile = CreateFile(Path, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
      if(hFile == INVALID_HANDLE_VALUE) return -1;

        DWORD szWritten;

        WriteFile(hFile, lpbArray, dwFileSize, &szWritten, NULL);
        HandleClose(hFile);

        FreeResource(hGlob);


    return 0;
}


и пример использования
Код

TCHAR *ReturnPath;
int ret = SaveDataFromResourceToTemp(_T("driver"), ReturnPath, _T("new_file_name.sys"));

//После использования файла
DeleteFile(ReturnPath);



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
xvr
Дата 19.1.2012, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(500mhz @  18.1.2012,  20:10 Найти цитируемый пост)
При чем тут подсистемы? что sys что dll что ехе = РЕ формат.
Никто же не запрещает делать экспорты из ехе и потом грузить через LoadLibrary, хотя с dll там тоже подсистемы разные.

Драйвер грузить система, и она откажется это делать, если в его PE (в заголовке, в поле Subsystem) не будет прописанна 1. (Для exe там стоиn 2, для dll - 1)

Мда, теоритечески dll наверное можно загрузить как драйвер, а вот exe скорее всего нет

PM MAIL   Вверх
x8m6
  Дата 19.1.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



Dem_max, попробовал и твой код, все равно FindResource возвращает NULL. В VS в resource viewer в разделе RCDATA есть drv.sys 

Цитата

во первых бы проверил, что в EXE действительно присутствует drv.sys в секции RCDATA

Как проверить?

UPD: Посмотрел через Resource Tuner. В секции RC DATA получаемой exe присутствует Portable Executable (PE type) под именем "DRIVER" с содержимым:
Код

0041E3C8 і 0081E3C8 і є ґ Н!ёLН!This program cannot be run in DOS mode.   $        і
 0041E408 і 0081E408 і                                                                  і
 0041E448 і 0081E448 і                                                                  і
 0041E488 і 0081E488 і                                                                  і
 0041E4C8 і 0081E4C8 і                                                                  і
 0041E508 і 0081E508 і                                                                  і
 0041E548 і 0081E548 і                                                                  і
 0041E588 і 0081E588 і 6фЩИr•·›r•·›r•·›{н"›p•·›r•·›p•·›r•¶›•·›±љк›w•·›±љи›p•·›{н4›R•·› і
 0041E5C8 і 0081E5C8 і {н%›s•·›{н#›s•·›{н&›s•·›Richr•·›                        PE  L  і
 0041E608 і 0081E608 і ККO        а     d  }     y¶     X    Ђ   Ђ        і
 0041E648 і 0081E648 і        ж    ¦:                        ± F   ё <    і
 0041E688 і 0081E688 і ЂГ а                  ЂЖ   АY                             і
 0041E6C8 і 0081E6C8 і а: @            X А                          .text   …R     і
 0041E708 і 0081E708 і  S                   h.rdata  ¤г   X  д   X             @  H і
 0041E748 і 0081E748 і .data    u   <  u   <             @  И.edata  F   ± Ђ   ±  і
 0041E788 і 0081E788 і             @  @INIT       ЂІ    ЂІ                в.rsrc    і
 0041E7C8 і 0081E7C8 і а  ЂГ    ЂГ             @  B.reloc    ЂЖ Ђ  ЂЖ          і
 0041E808 і 0081E808 і     @  B                                                         і
 0041E848 і 0081E848 і                                                                  і
 0041E888 і 0081E888 і                 ‹яU‹мѓмVWЗEм  Аj h` я”Y ё ђ  f‰Eьл·MьЃй  і
 0041E8C8 і 0081E8C8 і   f‰Mь·UьЃъ Ђ  ЊТ  ѓ}м „И  ·EьБаѓА™‰Eр‰Uф‹EрPh0 и¬ф   і
 0041E908 і 0081E908 і ѓДjjv‹MфQ‹UрRяњY ‰Eшѓ}ш u ёљ  Ай„  ‹Eш¶ѓщT…a  ‹Uш¶Bѓш і
 0041E948 і 0081E948 і R…Q  ‹Mш¶QѓъU…A  ‹Eш¶HѓщE…1  ‹Uш¶Bѓш…!  ‹Mш¶Qѓъ і
 0041E988 і 0081E988 і #…  ‹Eш¶HѓщE…  ‹Uш¶Bѓшf…с  ‹Mш‰Mи‹UрRh ису  ѓДjv і


Это сообщение отредактировал(а) x8m6 - 19.1.2012, 19:44
PM MAIL   Вверх
xvr
Дата 19.1.2012, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(x8m6 @  19.1.2012,  18:31 Найти цитируемый пост)
UPD: Посмотрел через Resource Tuner. В секции RC DATA получаемой exe присутствует Portable Executable (PE type) под именем "DRIVER" с содержимым:

Смущает то, что имя в капсе, а у вас в исходнике (как я понял) нет. На всякий случай попробуйте и в исходнике так же прописать.

PM MAIL   Вверх
Dem_max
Дата 20.1.2012, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Да однозначно, чтобы не мучиться в ресурсах не буквы а цифры.

а тут сделаешь так
Код

2000         RCDATA               "drv.sys"

SaveDataFromResourceToTemp(MAKEINTRESOURCE(2000), ReturnPath, _T("new_file_name.sys"));



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
x8m6
Дата 20.1.2012, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



Да, проблема была в этом. Только теперь антивирус думает что это руткит  smile 
PM MAIL   Вверх
Dem_max
Дата 21.1.2012, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



упакуй EXE каким нить пакером UPX возможно антивирус не прочюхает.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1016 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.