Проблемы с извлечением dll из exe.

Тема в разделе "WASM.BEGINNERS", создана пользователем AndjellaArtavazdovna, 29 янв 2011.

  1. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Всем доброго дня. Пишу что-то вроде юзермодного руткита. Схема простая - загрузчик пишет дллку на диск,прописывает соответствующие ключи реестра. При перезагрузке компа загрузчик удаляется,а дллка скрывает ключи и сама себя.
    Порядок действии по извлечению dll:
    1)При помощи вот этой программки "C:\MASM32\BINTODB.EXE" получаю дамп дллки.
    2)Переношу полученный массив в VisualStudio2005.
    3)Пишу на диск следующим образом:
    Код (Text):
    1. void Extract (void)
    2. {
    3.    
    4.     //Create  dll file:
    5.     LPCWSTR NameOfDll = L"C:\\mydll.dll";
    6.     HANDLE HandleOfDll = CreateFile((LPCWSTR)NameOfDll,  
    7.                                           GENERIC_READ | GENERIC_WRITE,
    8.                           0,
    9.                           NULL,
    10.                           CREATE_ALWAYS,
    11.                           FILE_ATTRIBUTE_NORMAL,
    12.                           NULL);
    13.     //Writing data in this file:
    14.         if(HandleOfDll != INVALID_HANDLE_VALUE)
    15.         {
    16.     DWORD BytesWritten = 0;
    17.     if(!WriteFile(HandleOfDll,(LPCVOID)DllDump,2560,&BytesWritten,NULL))//DllDump - указатель на полученный с пом. BINTODB.EXE //массив
    18.     {
    19.         printf("WriteFile failed with error %d\n",GetLastError());
    20.         _getch();
    21.        
    22.     }
    23.     CloseHandle(HandleOfTrojanDll);
    24.         }
    25. }
    Результат :
    При загрузке этой дллки получаем ERROR_BAD_EXE_FORMAT. В чем может быть причина?
     
  2. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    1. Открываем исходную и полученную записью на диск дллки
    2. Сравниваем
    3. Ищем разницу

    Не вариант?
     
  3. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Kaimi
    Ну и что дальше с этой разницей? Может в WinHex прописать предложите?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    если проблема в bintodb - пишите свою подобную утилиту... много ума для этого не надо... если проблема в записи - отлаживайте код, тоже много ума для этого не надо... если не разберетесь с этим, то просто кладете dll в ресурсы... так почти все малварщики делают)))

    что-то маленькая dll, вам не кажется?...
     
  5. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Rel
    в bintodb проблем быть не должно,писать самому что-то подобное не хочется т.к. не факт что прокатит хотя
    ,зато надо время.
    Вот поэтому в ресурсы и не хочу.
    Это просто каркас - она ничего не умеет. Сначала загружу,а потом ее дописывать буду.
     
  6. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    В том что по ней можно понять есть ли проблемы на данном этапе. Может файлы идентичны и проблема в том, как ты её загрузить пытаешься.
     
  7. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Kaimi
    Дампы полученные из исходной длл и записанной моей программой различны - видно даже на глаз. Если не писать дллку из загрузчика,
    а положить оригинал на диск ручками никаких проблем с загрузкой через реестр не возникает. А вот почему массивы байт,исходный и записанный в длл,различны я ума не приложу . В текстовые файлы всегда писал без проблем,а почему с длл такая хрень непонятно.
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    в чем разница? покажи, как выглядит DllDump... проблема может быть в выравнивании например... чему равно BytesWritten?
     
  9. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Rel
    Дампы очевидно разные:
    Исходный(Приведены различающиеся участки):
    Код (Text):
    1.  db 77,90,144,0,3,0,0,0,4,0,0,0,255,255,0,0
    2. db 184,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0
    3. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    4. db 0,0,0,0,0,0,0,0,0,0,0,0,176,0,0,0
    5. db 14,31,186,14,0,180,9,205,33,184,1,76,205,33,84,104
    6. db 105,115,32,112,114,111,103,114,97,109,32,99,97,110,110,111
    7. db 116,32,98,101,32,114,117,110,32,105,110,32,68,79,83,32
    8. db 109,111,100,101,46,13,13,10,36,0,0,0,0,0,0,0
    9. db 157,6,185,217,217,103,215,138,217,103,215,138,217,103,215,138
    10. db 37,71,197,138,216,103,215,138,87,120,196,138,220,103,215,138
    11. db 82,105,99,104,217,103,215,138,0,0,0,0,0,0,0,0
    12. db 80,69,0,0,76,1,4,0,247,60,242,76,0,0,0,0
    13. db 0,0,0,0,224,0,14,33,11,1,5,12,0,2,0,0
    Полученный :
    Код (Text):
    1. 77,90,144,0,3,0,0,0,4,0,0,0,255,255,0,0
    2. db 184,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0
    3. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    4. db 0,0,0,0,0,0,0,0,0,0,0,0,232,0,0,0
    5. db 14,31,186,14,0,180,9,205,33,184,1,76,205,33,84,104
    6. db 105,115,32,112,114,111,103,114,97,109,32,99,97,110,110,111
    7. db 116,32,98,101,32,114,117,110,32,105,110,32,68,79,83,32
    8. db 109,111,100,101,46,13,13,10,36,0,0,0,0,0,0,0
    9. db 181,112,252,61,241,17,146,110,241,17,146,110,241,17,146,110
    10. db 214,215,233,110,242,17,146,110,214,215,239,110,240,17,146,110
    11. db 214,215,252,110,243,17,146,110,214,215,255,110,253,17,146,110
    12. db 50,30,207,110,243,17,146,110,241,17,147,110,239,17,146,110
    13. db 214,215,224,110,240,17,146,110,214,215,234,110,240,17,146,110
    14. db 82,105,99,104,241,17,146,110,0,0,0,0,0,0,0,0
    15. db 0,0,0,0,0,0,0,0,80,69,0,0,76,1,5,0
    Add:
    На счет BytesWritten - размеры одинаковы.
     
  10. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    AndjellaArtavazdovna
    Кажется тут наброски твоего руткита, только на фасме.
    Ну с этого поста и дальше.
    Там в конце треда рабочий вариант.

    Там EXE - производит exe, но подставить ей dll - не трудно.

    http://wasm.ru/forum/viewtopic.php?id=39419&p=5


    Или
    ... это принципиально ?
     
  11. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Rel
    Добавил #pragma pack(push,1)/#pragma pack(pop) - тоже самое.
    _sheva740
    Если MASM32 и студия по разному выравнивают байты,то возможно да.
     
  12. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    AndjellaArtavazdovna
    Можно еще свою dll из ресурсов выгрузить.
    А то пока с выравниванием разбираться, так и интерес пропадет ))
    вот by (с)Connor Douthat пример
    Код (Text):
    1. void DumpResource(char *resource, char *filepath, HMODULE module = NULL)
    2. {
    3.     HRSRC res = FindResource(module, resource, "BINARY");
    4.     if(res)
    5.     {
    6.         HGLOBAL res_loaded = LoadResource(module, res);
    7.         if(res_loaded)
    8.         {
    9.             LPVOID res_data = LockResource(res_loaded);
    10.             if(res_data)
    11.             {
    12.                                 int res_size = SizeofResource(module, res);
    13.                 HANDLE file = CreateFile(filepath, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL);
    14.                 if(file != INVALID_HANDLE_VALUE)
    15.                 {
    16.                                   DWORD written;
    17.                                   WriteFile(file, res_data, res_size, &written, NULL);
    18.                                   SetEndOfFile(file);
    19.                                   CloseHandle(file);
    20.                 }
    21.             }
    22.         }
    23.     }
    24. }
    )
     
  13. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Всем спасибо. Ошибку нашел,какую говорить не буду - стыдно. Ошибка в работе с памятью.
     
  14. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    AndjellaArtavazdovna
    Лучше сравни дампы исходной длл и скомпилированного файла exe по смещению DllDump.
    Мне кажется что проблема возникает еще на стадии компиляции, а сама запись скорее всего происходит верно.

    p.s. опоздал я с постом )