Как сделать, чтобы копия kernel32.dll юзала копию ntdll ?

Тема в разделе "WASM.WIN32", создана пользователем Rustem, 27 ноя 2008.

  1. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    В общем сабж.
    Имеется копия kernel32, надо использовала копию ntdll
    Все осложняет что многие функции перенаправлены в ntdll
    Как сделать?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    самому импорты настраивать наверное. только я не свосем понял что за копии
     
  3. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Rustem
    Ну как вариант (может не понял поставленой задачи) пропатч в импорте кернела32 имя ntdll.dll на имя копии ntdl1.dll и тогда кернел будет использовать копию.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Rustem
    Необходимо изменить 4 переменных ядра(KeUser*), два указателя в разделяемой памяти, ибо ядро знает адрес загрузки нтдлл и адреса 6 точек в ней.
     
  5. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Поясню:
    Копирую kernel32.dll в свою папку, копирую ntdll.dll туда же.

    Делаю LoadLibrary("kernel32.dll") которая в моей папке, она автоматом привязывается к ntdll которая в system32
    пробовал менять название на ntdl1.dll в файле, LoadLibrary возвращает ошибку. Подозреваю что дело в форвардинге.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Rustem
    Не загрузитсо. Этот модуль существоет в виде секции "\KnownDlls\Kernel32.dll", и секция эта проецируется.
    ntdll загружает ядро.
     
  7. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Clerk
    kernel32.dll грузится моя, (адрес загрузки другой), как вариант можно заменить название

    Но если пропатчить ntdll на ntd11, перестает загружаться
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Бесполезно, ничего не выйдет.)
     
  9. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    KnownDlls кури

    П.С. Тока заметил что уже писали :)
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rustem
    Всё верно. Во-первых, нужно пропатчить, все вхождения "ntdll" на "ntd11" в самом kernel32, потом то же самое в ntd11. После этого при вызове LoadLibrary вызывается DllMain из патченой kernel32. Из DllMain вызывается CsrClientConnectToServer, которая возвращает STATUS_PORT_CONNECTION_REFUSED, т.к. csrss отвергает соединение. Тогда DllMain и возвращает ошибку.
    Вопрос, в том, какова цель. Можно пропатчить начало DllMain новой kernel32 на
    xor eax,eax
    not eax
    ret 0Ch
    Но тогда работать такая kernel32 особо не будет, зато в память подгрузится и она и новая ntd11. Ну... ExitProcess из такой kernel32 вызвать ещё можно. :)
     
  11. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    Кстати, почему именно в system32? ntdll вообще в твоей папке имеется?
     
  12. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    l_inc
    Да. так работает. kern32 юзает ntd11.dll )
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Rustem
    Освободи проецию ntdll, ведь зачем она если есть nt11 и посмотри как быстро будет снесён процесс :lol: )))
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Классный совет. Примерно как: "Выключи компьютер - ведь зачем он, если рядом стоит другой включённый - и посмотри, как быстро исчезнет картинка с дисплея первого монитора".
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    l_inc
    Не пойми меня неправильно в этот раз :)
    Сказано:
    Она юзает их две, ntdll и nt11. В таком случае зачем два модуля, которые юзаются, если изначально достаточно одного.
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Эм... именно пропатченная kern32? Что-то у меня на этот счёт бааальшие сомнения.
    ADDED
    Причём здесь это? ntd11 не юзается процессом. Процесс продолжает использовать ntdll.dll и старую kenel32.dll. А ntd11 используется только постольку поскольку... поскольку она нужна новому kern32, который собственно процессом и не юзается. По сути процесс имеет только проекцию этой библиотеки, но к его работоспособности она отношения не имеет.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    l_inc
    Можешь не сомневатсо, это так. Я уже скозал в 4-м посте, повторюсь. Ядро по прежнему передаёт управление в образ ntdll. К примеру, юзаетсо какойлибо сервис из nt11, возврат из это сервиса произойдёт в ntdll. Есчо пример - исключение начнёт обрабатывать ntdll...
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Это и так ясно. Никто и не собирался заменять оригинальную ntdll.dll. Задача состояла в том, чтобы при LoadLibrary("newkernel32.dll") подгружалась копия ntdll из своей папки. И задача в общем выполнена.
    Поэтому для всех и так очевидно, что процесс упадёт, если выгрузить оригинальную ntdll.dll. А вот для Вас явно не очевидно, что это для всех очевидно. :)
    И даже есть предложения, как это проверить/доказать?
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Докозать что
    Конечно, брякнутсо в отладчике на KiFastSystemCallRet в оригинальной ntdll.)
     
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Что новая загруженная библиотека newkernel32.dll будет использовать не только ntd11.dll, но и ntdll.dll.
    Единственное, что это докажет - это то, что оригинальная ntdll.dll используется процессом. Как я уже сказал, это и так для всех очевидно.