eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: panlik, amanimm (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Windows 10 1903 и Proxy-DLLs
<< . 1 . 2 . 3 . >>
Посл.ответ Сообщение


Ранг: 81.3 (постоянный)
Статус: Участник

Создано: 20 августа 2019 00:07 · Поправил: RAMZEZzz New!
Цитата · Личное сообщение · #1

После обновления на 1903 люди начали жаловаться что перестали работать лекарства, реализованные через прокси-дллки.
Например version.dll
Для тех кто не в теме: винда по умолчанию (раньше) ищет загружаемую прогой dll сначала в папке самой проги, если не находит, то дальше идёт в ...\system32\ .Если мы создаём dll с системным именем, как например version.dll, сделаем в ней тот же экспорт, и "проксирование" этого экспорта на настоящую системную dll. То все будет работать как раньше, но наша dll уже инжектирована в процесс, причем на самом старте, и мы можем делать с ним что угодно.

Тепрь же это не прокатывает, dll сразу грузится из system32....
Комрады, в какую сторону копать? Чую какое то обновление виновато, может какие записи в реестре появились или еще что. Кстати в Win2012 после установки обнвлений та же беда...


Ранг: 54.4 (постоянный)
Статус: Участник

Создано: 22 августа 2019 01:12 New!
Цитата · Личное сообщение · #2

RAMZEZzz пишет:
Думаю надо копать в сторону .config файла,

А если манифест?
К примеру...
Code:
  1.   <file
  2.       loadFrom="%systemroot%\system32\actionqueue.dll"
  3.       name="actionqueue.dll"
  4.       />
  5.   <file

Ранг: 131.5 (ветеран)
Статус: Участник

Создано: 22 августа 2019 06:22 New!
Цитата · Личное сообщение · #3

Ты используешь крипто апи, это тянет cryptbase.dll которая внезапно пытается прогрузится из локальной папки программы.

| Сообщение посчитали полезным: RAMZEZzz



Ранг: 81.3 (постоянный)
Статус: Участник

Создано: 22 августа 2019 06:58 · Поправил: RAMZEZzz New!
Цитата · Личное сообщение · #4

Alchemistry
Хм, спасибо, не обратил внимания.
Но все таки с cryptbase это частный случай, в проге может и свой криптоалгоритм быть прописан

Ранг: 131.5 (ветеран)
Статус: Участник

Создано: 22 августа 2019 08:56 · Поправил: Alchemistry New!
Цитата · Личное сообщение · #5

Если программа использует commctl или gdiplus (см ее манифест или просто депенденси волкером) то можно попробовать инжект через механизм dotlocal.

Ранг: 19.9 (новичок)
Статус: Участник

Создано: 22 августа 2019 21:14 New!
Цитата · Личное сообщение · #6

если кому нужны еще примеры с неработающей прокси dll в win 10 1903 - релиз MiniTool Partition Wizard v11.4 by OnlyOne --> Link <--... прога с dll просто не стартует...

Ранг: 49.5 (посетитель)
Статус: Участник

Создано: 23 августа 2019 01:11 · Поправил: Alf New!
Цитата · Личное сообщение · #7

и эта работает без проблем и предыдущая версия (там длл была пакованная) тоже работала на 1903

ЗЫ версия 11.5 тоже работает


Ранг: 54.4 (постоянный)
Статус: Участник

Создано: 23 августа 2019 07:41 New!
Цитата · Личное сообщение · #8

evggrig пишет:
если кому нужны еще примеры с неработающей прокси dll в win 10 1903 - релиз MiniTool Partition Wizard v11.4 by OnlyOne --> Link <--... прога с dll просто не стартует..

Все работает. Смотрите в сторону антивирусов.


Ранг: 81.3 (постоянный)
Статус: Участник

Создано: 23 августа 2019 19:51 New!
Цитата · Личное сообщение · #9

Пробовал переименовать в импорте дотнет приложения mscoree на mscore1 и подложить проксик с таким именем, приложение не запускается. Procmon все равно показывает загрузку оригинального mscoree.dll


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 23 августа 2019 19:53 New!
Цитата · Личное сообщение · #10

RAMZEZzz

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


Ранг: 81.3 (постоянный)
Статус: Участник

Создано: 24 августа 2019 01:09 New!
Цитата · Личное сообщение · #11

difexacaw пишет:
Включи загрузочный лог

это где и как его включить?


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 24 августа 2019 07:46 New!
Цитата · Личное сообщение · #12

IFEO.GlobalFlag -> 2.

Ранг: 64.0 (постоянный)
Статус: Участник

Создано: 11 октября 2019 14:48 · Поправил: Tolkin New!
Цитата · Личное сообщение · #13

RAMZEZzz
Проблема с автоподгрузкой version.dll для win 10 1903 актуальна для программ на дотнете, ибо именно дотнет грузит эту длл первой. Как вариант - надо ложить эту длл именно в папку к дотнету(для х64 например сюда "C:\Windows\Microsoft.NET\Framework64\v4.0.30319", и она оттуда будет подгружаться в твой софт. Соответственно она будет подгружаться и в другие проги на дотнете, поэтому в длл надо как минимум на старте проверять куда она подгрузилась и не делать лишнего где не надо. Если для нескольких прог - то тогда уж проблемно, ибо надо пихать все в одну длл, что не есть гут (ну или version.dll использовать как загрузчик только другой любой длл в нужный процесс).

| Сообщение посчитали полезным: RAMZEZzz



Ранг: 81.3 (постоянный)
Статус: Участник

Создано: 16 октября 2019 16:55 New!
Цитата · Личное сообщение · #14

Tolkin
Да, идея хорошая. Спасибо. Но тоже не всегда оттуда пытается грузить.

Вот что еще удалось выяснить:
Если в приложении нет манифеста в ресурсах (а это редко) и он лежит рядом с exe то добавив туда в секцию "assembly" такую строчку: <file name="version.dll" />
DLL начинает грузиться.

Пару суток курения MSDN не помогли заставить грузить внешний манифест вместо встроенного (хотя может кто знает как это сделать?)

Ну или искать другие dll какие дотнет программа пытается загрузить из своей папки и на основе них делать прокси (пока так и делаю). Но для каждой программы они разные. Эх а как было хорошо с "универсальной" версион...

Ранг: 131.5 (ветеран)
Статус: Участник

Создано: 16 октября 2019 18:22 · Поправил: Alchemistry New!
Цитата · Личное сообщение · #15

RAMZEZzz пишет:
Пару суток курения MSDN не помогли заставить грузить внешний манифест вместо встроенного (хотя может кто знает как это сделать?)

Внешний манифест при наличии внутреннего игнорируется. Никак.

Чем тебя не устраивает профайлер дотнет. Загрузит тебе хоть HYI32.dll хоть version128.dll. Единственное что надо будет проверять в коде а в тот ли ты процесс попал потому что это работает глобально для всех дотнет приложений.

| Сообщение посчитали полезным: RAMZEZzz



Ранг: 81.3 (постоянный)
Статус: Участник

Создано: 17 октября 2019 01:01 · Поправил: RAMZEZzz New!
Цитата · Личное сообщение · #16

Alchemistry пишет:
Чем тебя не устраивает профайлер дотнет.

Да понять бы еще что это и как им загрузить dll? Что то нахожу - читаю, но терзают смутные сомнения - что не то.

UPD:
Взял за основу: ExampleProfiler
На событие AppDomainCreationFinished повесил LoadLibrary(L".\version.dll");
на тестовой проге работает, на реальных - из 5 проверенных сработало только на одной, другие даже не грузят дллку профилера Разбираюсь дальше....

Ранг: 131.5 (ветеран)
Статус: Участник

Создано: 17 октября 2019 07:14 New!
Цитата · Личное сообщение · #17

RAMZEZzz

REG ADD "HKCU\Software\Classes\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServer32" /ve /t REG_EXPAND_SZ /d "C:\Temp\test.dll" /f
REG ADD "HKCU\Environment" /v "COR_PROFILER" /t REG_SZ /d "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" /f
REG ADD "HKCU\Environment" /v "COR_ENABLE_PROFILING" /t REG_SZ /d "1" /f
REG ADD "HKCU\Environment" /v "COR_PROFILER_PATH" /t REG_SZ /d "C:\Temp\test.dll" /f

test.dll

Code:
  1. BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
  2. {
  3.     char cmd[] = "cmd.exe";
  4.  
  5.     switch (fdwReason)
  6.     {
  7.     case DLL_PROCESS_ATTACH:
  8.         WinExec(cmd, SW_SHOWNORMAL);
  9.         ExitProcess(0);
  10.         break;
  11.     case DLL_THREAD_ATTACH:
  12.         break;
  13.     case DLL_THREAD_DETACH:
  14.         break;
  15.     case DLL_PROCESS_DETACH:
  16.         break;
  17.     }
  18.     return TRUE;
  19. }

| Сообщение посчитали полезным: freudz, Lambda


Ранг: 21.1 (новичок)
Статус: Участник

Создано: 18 октября 2019 17:32 New!
Цитата · Личное сообщение · #18

Alchemistry

Вот интересный момент, если дот-нет таргет накрыт протектором, который в последствии грузит managed код, то подобный способ не работает (

речь идет о
Alchemistry пишет:
REG ADD "HKCU\Software\Classes\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServer32" /ve /t REG_EXPAND_SZ /d "C:\Temp\test.dll" /f


Такие дела...

Ранг: 131.5 (ветеран)
Статус: Участник

Создано: 18 октября 2019 18:41 New!
Цитата · Личное сообщение · #19

Для таких ситуаций есть множество других способов, тот же верифер например.

Ранг: 21.1 (новичок)
Статус: Участник

Создано: 23 октября 2019 11:39 New!
Цитата · Личное сообщение · #20

Alchemistry пишет:
тот же верифер например.


А можно подробней чутка, если не оффтоп?..

Ранг: 131.5 (ветеран)
Статус: Участник

Создано: 23 октября 2019 14:36 New!
Цитата · Личное сообщение · #21

Пишешь свою длл в формате верифера и регаешь ее для выбранного приложение через IFEO. Приложение грузится и нтдлл грузит твою длл на ранней стадии инициализации. Инфы в гугле предостаточно вместе с готовым кодом.

| Сообщение посчитали полезным: freudz, Tolkin, Hugo Chaves, difexacaw, plutos


Ранг: 21.1 (новичок)
Статус: Участник

Создано: 23 октября 2019 14:54 New!
Цитата · Личное сообщение · #22

Alchemistry пишет:
в формате верифера


Спасибо. Собссно нужно было пару ключевых слов для гугления.
Интересный, надо скахать, подход.
Буду тестить.


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 24 октября 2019 20:19 · Поправил: difexacaw New!
Цитата · Личное сообщение · #23

Alchemistry

AVRF самый простой и хороший способ загрузки в процесс, это верно. Но это нэйтив, провайдер должен быть нэйтивным и запускается он до загрузки юзер среды, тоесть винапи и тп нельзя юзать. А тут тема про .net и прочий басик, так что врядле это им нужно и чем то поможет

Ранг: 131.5 (ветеран)
Статус: Участник

Создано: 25 октября 2019 08:49 New!
Цитата · Личное сообщение · #24

difexacaw
В принципе ничего не мешает посидеть там же на колбеке верифера и посмотреть когда загрузятся все нужные длл, потом дергать апи через gpa. Комрад freudz спросил - вот ему вариант раз так хотелось.


Ранг: 312.4 (мудрец)
Статус: Участник

Создано: 25 октября 2019 10:15 New!
Цитата · Личное сообщение · #25

Для верифера нужно только вставить код обработки ошибок, поскольку мало сейчас правильно пишут, 0xC0000008 часто вылетает. Засуньте верифер в любую популярную игру, много чего писать для обработки, чтоб он там работал нормально.

Ранг: 21.1 (новичок)
Статус: Участник

Создано: 25 октября 2019 11:58 New!
Цитата · Личное сообщение · #26

Alchemistry пишет:
В принципе ничего не мешает посидеть там же на колбеке верифера и посмотреть когда загрузятся все нужные длл, потом дергать апи через gpa


Мерси, именно в эту сторону и думал. Главное попасть в процесс.
Планирую также проверить AVRF на предмет попадания в Windows Service и последующего хука винсокета recv/send. Пока не вижу препятствий. )


Ранг: 312.4 (мудрец)
Статус: Участник

Создано: 25 октября 2019 12:17 New!
Цитата · Личное сообщение · #27

freudz пишет:
Планирую также проверить AVRF на предмет попадания в Windows Service

Да хоть services.exe, хоть smss.exe!

| Сообщение посчитали полезным: freudz



Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 26 октября 2019 04:38 · Поправил: difexacaw New!
Цитата · Личное сообщение · #28

DenCoder

> 0xC0000008 часто вылетает

Если параметр задан, но обнулён, это не значит что он не используется. Нужно задать VerifierFlags eq 0, тогда не будет включена трассировка описателей и не будет этой ошибки

Добавлено спустя 19 минут
DenCoder

> Да хоть services.exe, хоть smss.exe!

Это способ запуска дий для системных процессов. Тот же lsass запускается под визором через данный механизм. Это нужно что бы не пропустить ничего, запуск до юзер оболочки. Интересно что при взятии под визор серверного процесса система уходит в синь, не знаю почему, но происходит бсод из юзер треда.


Ранг: 312.4 (мудрец)
Статус: Участник

Создано: 26 октября 2019 11:04 · Поправил: DenCoder New!
Цитата · Личное сообщение · #29

difexacaw пишет:
Интересно что при взятии под визор серверного процесса система уходит в синь, не знаю почему, но происходит бсод из юзер треда.

Может, какая-то подсистема ещё не готова? При попытке использовать бсод. Было у меня такое 10 лет назад при инжекте в winlogon на старте системы. Решение нашёл в ожидании вызова какой-то функции из user32.dll - вызов прошёл, значит можно использовать всё остальное дальше.


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 26 октября 2019 12:24 · Поправил: difexacaw New!
Цитата · Личное сообщение · #30

DenCoder

Ядро ничего не знает про готовность". Я думал что там видел уже всё, но нет. Чудеса таки бывают:

- analyze -v

BugCheck D1, {75b14b0c, ff, 0, 70005bed}

FOLLOWUP_IP:
nt!Kei386EoiHelper+2883
804e0a9c f7457000000200 test dword ptr [ebp+70h],20000h

Code:
  1. WARNING: Stack unwind information not available. Following frames may be wrong.
  2. f749cd64 70005bed badb0d00 75b130d3 f749cd98 nt!Kei386EoiHelper+0x2883
  3. f749cddc 804ec6c9 805b241d 00000002 00000000 0x70005bed
  4. f749cde0 805b241d 00000002 00000000 0000027f nt!KeInitializeTimerEx+0x1e6
  5. f749cde4 00000000 00000000 0000027f 04900000 nt!IoCreateNotificationEvent+0x16c2


Адрес в обычной юзер длл, не на сискале(на call rel). В xp была трабла с ядреными указателями в гуй, потом это зафиксили. Такое может быть только в свопируемой секции драйвера. Изначально я думал что это проблема фильтров, но удалив из системы сиську происхоит тоже самое. Оказалось что и на 7-ке та же синь

Такое возможно только если создаётся ядерный поток и по какой то причине поднимается IRQL, память свопиться и происходит ядерный #AV. Этого не может быть в юм


Ранг: 312.4 (мудрец)
Статус: Участник

Создано: 26 октября 2019 15:54 New!
Цитата · Личное сообщение · #31

Так а на какой функции падает-то?
<< . 1 . 2 . 3 . >>
 eXeL@B —› Основной форум —› Windows 10 1903 и Proxy-DLLs

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS