Сейчас на форуме: _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Оттрассировать ActiveX вызыавающийся из IE
Посл.ответ Сообщение

Ранг: 1.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 октября 2011 17:44
· Личное сообщение · #1

Есть дебильный видеорегистратор просмотр которого идет через ActiveX компоненту.
ActiveX компонента падает с ошибкой CreateDDSsecondary error при подключении к регистратору.
Я вырыл интернет до дна, но решения такой ошибки не нашел, не нашел и такого API к directdraw.
IDA докопалась до куска кода, который генерит ошибку.
--- cod ---
Code:
  1. .text:101A4162  mov    eax, [ebp+CallTable]            ;
  2. .text:101A4168  add    eax, 20h
  3. .text:101A416B  push   eax
  4. .text:101A416C  lea    ecx, [ebp+var_80]
  5. .text:101A416F  push   ecx
  6. .text:101A4170  mov    edx, [ebp+CallTable]            ;
  7. .text:101A4176  mov    eax, [edx+18h]
  8. .text:101A4179  mov    ecx, [ebp+CallTable]            ; CreateDDSsecondary
  9. .text:101A417F  mov    edx, [ecx+18h]
  10. .text:101A4182  mov    eax, [eax]
  11. .text:101A4184  push   edx
  12. .text:101A4185  mov    ecx, [eax+18h]
  13. .text:101A4188  call   ecx
  14. .text:101A418A  test   eax, eax
  15. .text:101A418C  jge    short SkipError
  16. ;
  17. ;
  18. ; Окошко с ошибкой "CreateDDSSecondary Error"
  19. ;
  20. ; + падение IE + 2 его авто-перезапуска
  21. ;

--- cod ---
Блин, directx стоит на всех машинах, все окейно работает.
Но на одних эта компонента работает, в других нет.

Запустил Iexplore под Олей, попробовал на процедуру поставить int3 (0cch) (вместо push ebp), все валится с ошибкой, Оля спит.

Как подцепиться к этому злобному OCX, чтобы посмотреть, какие он действия делает ?
На эту тему тоже ничего внятного не нашел.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 28 октября 2011 17:58
· Личное сообщение · #2

-Xlat- пишет:
попробовал на процедуру поставить int3 (0cch) (вместо push ebp), все валится с ошибкой, Оля спит.

лучше зацикли (ebfeh), а потом просто нажми на паузу.



Ранг: 1.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 29 октября 2011 04:16
· Личное сообщение · #3

Vovan666 пишет:
лучше зацикли (ebfeh), а потом просто нажми на паузу.

--
Хрень какая то...
Оля конечно оживает, но совсем не на беконечном цикле, а сразу после sysenter в ntdll.

Code:
  1. 7C90E506    8DA424 00000000   LEA     ESP, DWORD PTR [ESP]
  2. 7C90E50D    8D49 00           LEA     ECX, DWORD PTR [ECX]
  3. 7C90E510 >  8BD4              MOV     EDX, ESP
  4. 7C90E512    0F34              SYSENTER
  5. 7C90E514 >  C3                RETN
  6. 7C90E515    8DA424 00000000   LEA     ESP, DWORD PTR [ESP]
  7. 7C90E51C    8D6424 00         LEA     ESP, DWORD PTR [ESP]
  8. 7C90E520 >  8D5424 08         LEA     EDX, DWORD PTR [ESP+8]
  9. 7C90E524    CD 2E             INT     2E
  10. 7C90E526    C3                RETN

вот на 514 адресе и встает, а дальше ходить можно по dll'кам до посинения.
Хотя ie зависает, что значит управление в цикл упирается.
Но что-то у меня все немногочисленные идеи покончались.
А почему int3 может не работать ?



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 30 октября 2011 13:52
· Личное сообщение · #4

-Xlat- но совсем не на беконечном цикле
Глянь сколько там потоков/thread-ов и переключись на свой... Естественно все. Ты же IE отлаживаешь, а он многопоточный и твой поток не главный.

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

Ранг: 1.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 октября 2011 04:49
· Личное сообщение · #5

tundra37 пишет:
Глянь сколько там потоков/thread-ов и переключись на свой... Естественно все. Ты же IE отлаживаешь, а он многопоточный и твой поток не главный.

tundra, будь другом распиши подробнее, а то я не врублюсь..
Момент загрузки activex, я отследить не могу, даже, когда ставлю остановку при загрузке DLL.
По ebfe я конечно могу повесить.. но так как ie виснет, то может у него один поток.
В общем, как мне найти тот поток, в котором висит этот activex ?

А есть какой api к оле, чтобы можно было им дернуть и оля проснулась бы.
Ведь код я могу пропатчить как угодно и если оля всплывет, то мне только это и надо.
А то int3 не работает.. ппц какой то, кто то ставит свой обработчик, что ли.
В общем, мой моск ударно близится к коме.



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 31 октября 2011 06:19
· Личное сообщение · #6

В Ольге кнопочка Т (Threads) вызывает список потоков.



Ранг: 1.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 октября 2011 11:57
· Личное сообщение · #7

0xy пишет:
В Ольге кнопочка Т (Threads) вызывает список потоков.

Это то понятно....
Там список порядка из 14 потоков. Один из потоков реально выделяется потребленным временем. Наверное, это он.
Прикол в другом..
В просмотре дампа (alt+m) если вызвать поиск (ctrl+b), и вбить туда двоичный код, ну например: "8B 95 7C FF FF FF" (mov edx, [ebp+CallTable]) это из выше приведенного листинга, то...
то нифига ничего не находится. А эксплорер висит явно зацикленный.

Мистка какая то. Модуль есть... и его нет.
Чего я не понимаю




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 31 октября 2011 13:19
· Личное сообщение · #8

А вкладка одна? А то ие теперь же тоже использует процессы песочницы.

-----
Yann Tiersen best and do not fuck




Ранг: 1.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 ноября 2011 13:09
· Личное сообщение · #9


Кароче, я ее победил.
Тундра и Вован, спасибо вам за идеи, очень ценные.

Если кому интересно, как все было и что было.
ActiveX компонента циклилась по ebfe. (совет вована)
Потом, когда IE вис, подключался Олей к потоку, и в контексте по alt+m делал поиск куска кода, там находил свой ebfe и исправлял его на то, что надо. (тундра)

После долгого изучения работы с ddraw, выяснилось, что эта долбанная компонента вызывает DD.CreateSurface, которая валится с ошибкой и вместо того, чтобы корректно завершиться, эта хрень шла исполняться дальше, генеря кучу эксепшенов, которые в конце приводили к падению и краху IE.

Сам код написан корректно, то есть с ddraw работа идет нормально и правильно, нигде никакой фантазии. Так что компонента оказалась не причем.

Проблема заключалась в том, что на машине стоял vnc с видеодрайвером "vncdrv.sys(size: 4736)", хотя такая же хрень происходила и с драйвером mv2.sys (size:12096). (оси winxp, win7)

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

Как только в vnc, ставшь галочку работать через video hook driver, dd.createsurface кончалась с ошибкой, компонента выдавала уродскую createddsecondary error и обваливала ie.

На нормальных видюхах такая проблема не обнаруживается и все работает параллельно.


 eXeL@B —› Вопросы новичков —› Оттрассировать ActiveX вызыавающийся из IE
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати