Кто ты суррогатный воин?

Тема в разделе "WASM.WIN32", создана пользователем Rel, 25 июн 2026.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.426
    Наверное, в основном вопрос к Thetrik, но может еще кто-то шарит в этих вендовых COM'ах. Допустим, есть процесс dllhost.exe - суррогантный процесс, в котором хостится некая DLL-ка с COM-объектом. Внимание вопрос: как найти, какой COM-объект (CLSID) хостится в нем? Какая именно DLL отдала суррогату свою класс-фабрику? Первое, что приходит в голову: взять командную строку процесса, отделить "/ProcessID:<GUID>", этот GUID, насколько я понимаю, является AppId, просканить реестр в поисках того, какой CLSID ассоциирован с AppId. Но это кажется чесанием правого уха левой рукой, может есть какой-то более простой или правильный вариант?

    ЗЫ: Решать вопрос буду программно, при желании могу даже заинжектить в суррогата свой шелл-кодец, если из его контекста будет лучший вариант решения этой задачи, чем извне. Заранее спасибо за ответы!
     
    Mikl___ нравится это.
  2. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    726
    Rel,

    com+

    - дипсик, код предлагает.
     
    Mikl___ нравится это.
  3. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    215
    Странно что никто на васме и на других форумах не создает/использует COM-объекты. Этож так круто и удобно.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.426
    Спасибо, я попробовал сегодня, в примерах БЯМа (похоже) есть доля галлюцинаций. Свойство ProcessId (PID-процесса) есть в коллекции ApplicationInstances, а не Applications. Когда я получил коллекцию ApplicationInstances в ней почему-то оказался только один элемент, который корректно совпал по пидам и appid с одним из dllhost-процессов, но на тот момент в системе было запущено 3 dllhost-процессов. То есть в качестве решения это подошло для одного процесса из трех. Наверное, не все типы инициализации суррогатов попадают в эту коллекцию. В коллекции Applications всего 5 элементов, через коллекцию Components можно получить пути до DLL'ек, да (свойство DLL), но там не ассоциации с dllhost-процессом, или я слепошарый просто). Я еще попробую потыкать в эти коллекции на следующей неделе, сегодня мало времени было, а на выходных надо будет уехать.

    Как будто бы услышал долю сарказма в этом изречении. На самом деле с точки зрения того огромного количества деталей, которые внезапно в COM'ах учтены, это кажется грамотным решением, но удобно ли это? Я бы сказал, что от слова "удобно" там в этих COM'ах нет ровном счетом ничего. Но надо всетки учитывать время и контекст, в котором эта инфраструктура создавалась.
     
  5. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    726
    GRAFik нравится это.
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.246
    Код (Text):
    1. Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    2. set apps = objWMIService.ExecQuery("SELECT * FROM Win32_ClassicCOMClassSetting WHERE AppId = '{973D20D7-562D-44B9-B70B-5A0F49CCDF3F}'")
    3. for each app in apps
    4.     wscript.echo app.AppId &vbTab& app.InprocServer32
    5. next
    6.  
    Код (Text):
    1. >cscript test.vbs
    2. Сервер сценариев Windows (Microsoft ®) версия 5.812
    3. Copyright (C) Корпорация Майкрософт 1996-2006, все права защищены.
    4.  
    5. {973d20d7-562d-44b9-b70b-5a0f49ccdf3f}  %systemroot%\system32\webplatstorageserver.dll