Упаковщик DLL. Проблема с настройкой импорта

Тема в разделе "WASM.WIN32", создана пользователем psu, 5 сен 2007.

  1. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    необходимо написать обфускатор для ддл-ки
    Основа взята из dotfix.net, статья "Пакер - это просто"
    Проблема в настройке моим загрузчиком таблицы импорта: в Olly все проходит на ура ( длл грузится, настраиваются релоки и импорты, управление передается основной DllMain, которая все корректно отрабатывает. Запускаю вне отладчика - падает. Никаких исключений в дебаггере не наблюдаю
    Попробовал такой эксперимент: копировать/ не копировать DATA_DIRECTORY[ IMPORT ]. В обоих случаях мой загрузчик настраивает таблицу импорта ( то есть я так понимаю, что в первом случае импорт настраивается дважды: системным загрузчиком и моим ). В первом случае прога работает, во втором падает
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    с исключением? открой just-in-time олькой
     
  3. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    :)
     
  4. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Great
    олли зависает и начинает плодить потоки. по статус бару вижу, что в нтдлл

    twgt
    какой наблюдательный..

    В аттаче "упакованная" ( еще не дошел до упаковки :) ) длл-ка, исходная длл ( пример номер 1 из пакета масма 9 ) и прога для теста ( просто call LoadLibraryA )
     
  5. yuzvir

    yuzvir New Member

    Публикаций:
    0
    Регистрация:
    20 май 2005
    Сообщения:
    97
    Подозреваю что в DLL обязательно должна быть таблица с релоками, и левая таблица с импортами наверное тоже
     
  6. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    psu
    У тебя глюк в процедуре, которая ищет по имени функи её адрес (типа свой GetProcAddress) Причем у меня она ищет эту функу в ntdll - неправильно определяешь базу kernel32.dll - лучше через PEB или стек. Но еще лучше делай импорты к упакованным прогам (где нормально объявлена GetProcAddress,LoadLibrary и т.д.) и юзай их для восстановления оригинальных адресов в IAT запакованной проги, а то у тебя нету у библы таблицы импорта и кстати такие проги(без импортов) на Win2000 вообще не запускаются...
     
  7. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Спасибо, ребята! Буду разбираться

    BaGiE
    Выходит, что прога типа

    Код (Text):
    1. start:
    2. ret
    под 2000 не запустится? ( там импорта нету, по крайней мере после компиляции в ХР )
    И еще. Почему в олли базу кернела находит правильно, а вне ее - нет?
     
  8. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Нет, и под Вистой тоже.
     
  9. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Добавил свою секцию импорта. Не идет, хотя PEView показывает все правильно

    З.Ы.
    Олли не хочет работать в режиме Just-in-time
    На вот такой проге виснет
    Можна ли исправить как нибудь?
     
  10. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    А может есть какая-нибудь тулза, которая проверяет PE на правильность? Возможно симулятор системного загрузчика
     
  11. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Так что, никто не знает в чем проблема? Не может быть.. :dntknw:
     
  12. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    psu
    первая проверка на валидность при вызове ntcreatesection с параметром sec_image
     
  13. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    slow
    расшифруй плз
     
  14. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    http://www.wasm.ru/forum/viewtopic.php?id=17233

    Запускаем и видим, что RawOffset + RawSize последней секции > размера файла. В чём собственно и проблема.
     
  15. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    asd
    2.dll 00860000-00860C00
    * NOTE: (pFH->Characteristics & IMAGE_FILE_DLL) > 0
    * IMAGE SIZE: 00005000/00005000
    * SectionAlignment:00001000 FileAlignment:00000200
    * CHK DataDirectory:IMAGE_DIRECTORY_ENTRY_EXPORT
    * CHK DataDirectory:IMAGE_DIRECTORY_ENTRY_IMPORT
    VALID: 00000001

    Pointer to RAW data: A00
    Size of RAW data: 200

    размер файла 3072 ( С00 )

    З.Ы. LoadLibrary возвращает 0 и ошибку 3E6, то есть исключения не генерятся
     
  16. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    psu
    аттач к #12 посту в той теме. Я тестил на длл из твоего #9 поста
     
  17. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    psu
    в ссылке asd последний пост. это про то как системный загрузчик проверяет pe на валидность
     
  18. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    asd
    В аттаче последняя версия длл ( сравнить с предыдущей не могу, почему то битый архив скачиваю )

    slow
    Имеется ввиду это?
    На 2-й странице написано, что тоже самое можно сделать при помощи CreateFileMapping? Даже если так, то ответа на вопрос "почему не работает" это все равно не даст, ведь так?
     
  19. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    psu
    ага.
     
  20. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Код (Text):
    1.     HANDLE h = CreateFile( "2.dll", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0x80, 0 );
    2.     HANDLE hmap = CreateFileMapping( h, 0, SEC_IMAGE | PAGE_READWRITE, 0, 0, 0 );
    hmap != 0
    По-моему я не правильно задаю параметр флагов. В документации написано, что вместе с SEC_IMAGE другие не могут использоваться. Но тогда возвращает 0 и ошибку 57h ( ERROR_INVALID_PARAMETER )