![]() |
eXeL@B —› Программирование —› Функции из ntdll для настройки статического TLS.Есть вопросы. |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 16 августа 2011 18:21 · Поправил: Yotsi · Личное сообщение · #1 Скачал сорцы win2k,смотрю в ldrinit.c ,и меня терзает смутное ощущение что чего то нехватает... 1.Я правильно понимаю что весь апи системного загрузчика находится в ntdll ? 2.Функция LdrpInitializeProcess готовит только адресное пространство для процесса?Или еще настраивает образ экзешника этого самого будущего процесса? 3.Функции LdrpInitializeTls(для длл) и LdrpAllocateTls(для потоков процесса) выделяют память под TLS переменные в ап процесса,и копируют туда содержимое этих переменных? 4.А для чего тогда LdrpCallTlsInitializers ? 5.И мне совсе непонятно какой код приводит изначальные "адреса" TLS переменных в коде образа экзешника,к VA которые были выделенны LdrpInitializeTls и LdrpAllocateTls ![]() ЗЫ:надеюсь найдется добрый человек который хоть частично в направлении истины направит ) ![]() |
|
Создано: 16 августа 2011 18:33 · Поправил: PE_Kill · Личное сообщение · #2 Yotsi пишет: А для чего тогда LdrpCallTlsInitializers Это по моему для дерганья TLS Callbacks. Yotsi пишет: И мне совсе непонятно какой код приводит изначальные "адреса" TLS переменных в коде образа экзешника,к VA которые были выделенны Плохо смотришь. Я когда эмулировал TLS полностью весь механизм смотрел в сорсах win2k. Только там с потоками настоящая жопа, мне в итоге проще стало TLS отдать загрузчику, чем эмулировать весь процесс самому. Если приложение однопоточное, то вот такого кода будет вполне достаточно: Code:
----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 16 августа 2011 19:13 · Личное сообщение · #3 |
|
Создано: 16 августа 2011 20:02 · Личное сообщение · #4 |
|
Создано: 16 августа 2011 20:50 · Поправил: Yotsi · Личное сообщение · #5 |
|
Создано: 16 августа 2011 21:26 · Личное сообщение · #6 |
|
Создано: 17 августа 2011 02:55 · Поправил: bowrouco · Личное сообщение · #7 Есть семпл, но требует большого движка, посему скажу ищите по референсу на строки: "LDR: Tls Found in %wZ at %p",LF LdrpInitializeTls "LDR: TlsVector %x Index %d = %x copied from %x to %x",LF LdrpAllocateTls "LDR: Tls Callbacks Found. Imagebase %p Tls %p CallBacks %p",LF,"" "LDR: Calling Tls Callback Imagebase %p Function %p",LF,"" LdrpCallTlsInitializers ![]() |
|
Создано: 17 августа 2011 18:07 · Личное сообщение · #8 |
|
Создано: 17 августа 2011 20:12 · Личное сообщение · #9 |
|
Создано: 18 августа 2011 00:18 · Личное сообщение · #10 |
|
Создано: 18 августа 2011 00:33 · Личное сообщение · #11 |
|
Создано: 18 августа 2011 07:31 · Личное сообщение · #12 |
|
Создано: 18 августа 2011 08:07 · Личное сообщение · #13 |
|
Создано: 18 августа 2011 08:58 · Поправил: PE_Kill · Личное сообщение · #14 DLL main в смысле хукать битхаком? Такой вариант не подходит, ибо проблемы с AV и похожим софтом. PS По мне так проще при заполнении IAT нового образа вписать вместо потоковых API и GetProcAddress свои обертки, но это не будет 100% работоспособность, особенно с засранчегами. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 18 августа 2011 14:15 · Личное сообщение · #15 |
|
Создано: 18 августа 2011 16:34 · Личное сообщение · #16 |
|
Создано: 18 августа 2011 20:23 · Поправил: Модератор · Личное сообщение · #17 PE_Kill > DLL main в смысле хукать битхаком? Такой вариант не подходит, ибо проблемы с AV и похожим софтом. Не вижу проблем переписать ссылку в лдр на ентрипоинт нтдлл. Вообще в ... вас, бред какойто пишите. От модератора: вас тоже, пока на сутки, ведите себя прилично Yotsi Можно конечно, но это более сложно чем вбить в скрипт одно имя виньапи.) ![]() |
|
Создано: 19 августа 2011 09:32 · Личное сообщение · #18 bowrouco пишет: Не вижу проблем переписать ссылку в лдр на ентрипоинт нтдлл Ага, про это я как то подзабыл, спасибо что напомнил. bowrouco пишет: бред какойто пишите Почему бред? Вроде всё логично. Yotsi пишет: В юзер моде нельзя ловить обращения к определенным VA в своем ап? Механизмы: KiUserExcaptionDispatcher, Vectored Exception Handling Методы: Hardware Breakpoints, Page Guard, Page Access Но это дерьмовое решение. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 19 августа 2011 21:19 · Поправил: Yotsi · Личное сообщение · #19 |
|
Создано: 19 августа 2011 22:35 · Личное сообщение · #20 |
|
Создано: 21 августа 2011 18:14 · Личное сообщение · #21 |
|
Создано: 21 августа 2011 18:51 · Личное сообщение · #22 Yotsi извини писал на экранной клавиатуре. Вот код, о котором идет речь: Code:
----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 22 августа 2011 07:38 · Поправил: bowrouco · Личное сообщение · #23 |
|
Создано: 22 августа 2011 10:23 · Личное сообщение · #24 |
|
Создано: 22 августа 2011 18:17 · Личное сообщение · #25 |
|
Создано: 22 августа 2011 18:37 · Поправил: PE_Kill · Личное сообщение · #26 |
|
Создано: 22 августа 2011 18:50 · Поправил: bowrouco · Личное сообщение · #27 PE_Kill > ИМХО если мы не инжектимся, а получаем управление от загрузчика, то зачем лочить? Всякая операция с загрузчиком должна быть атомарной, иначе пока один тред там чтото изменяет, другой тоже изменяет или читает, что в конце концов приведёт к не определённым последствиям. > Это для чего, есть теория? Для динамически подключаемых модулей может быть запрещена нотификация(LdrDisableThreadsLibraryCalls(), тоесть взведён этот флаг). Так как линк переписывается(у вас в семпле произвольны адрес), то следует разрешить её доставку. Хотите узнать больше - rootkits.su ![]() ![]() |
|
Создано: 22 августа 2011 19:18 · Личное сообщение · #28 |
|
Создано: 22 августа 2011 20:58 · Личное сообщение · #29 |
|
Создано: 22 августа 2011 21:42 · Поправил: Yotsi · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Программирование —› Функции из ntdll для настройки статического TLS.Есть вопросы. |