MessageBox without import

Тема в разделе "WASM.X64", создана пользователем Mikl___, 5 фев 2025.

  1. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    290
    Код (Text):
    1. 0:000> g
    2. (97c.700): Access violation - code c0000005 (first chance)
    3. image00000000_00400000+0x2f0:
    4. 00000000`004002f0  f3a6       repe cmps byte ptr [rsi],byte ptr [rdi]
    5.  
    6. 0:000> !analyze -v
    7. *******************************************************************************
    8. *                        Exception Analysis                                   *
    9. *******************************************************************************
    10. FAULTING_IP:
    11. image00000000_00400000+2f0
    12. 00000000`004002f0  f3a6       repe cmps byte ptr [rsi],byte ptr [rdi]
    13.  
    14. EXCEPTION_RECORD:  ffffffffffffffff -- (.exr 0xffffffffffffffff)
    15. ExceptionAddress: 00000000004002f0 (image00000000_00400000+0x00000000000002f0)
    16.    ExceptionCode: c0000005 (Access violation)
    17.   ExceptionFlags: 00000000
    18. NumberParameters: 2
    19.     Parameter[0]: 0000000000000000
    20.     Parameter[1]: 0000000077c7001a
    21. Attempt to read from address 0000000077c7001a
    22.  
    23. FOLLOWUP_IP:
    24. image00000000_00400000+2f0
    25. 00000000`004002f0  f3a6       repe cmps byte ptr [rsi],byte ptr [rdi]
    26.  
    27. EXCEPTION_DOESNOT_MATCH_CODE:  This indicates a hardware error.
    28. Instruction at 00000000004002f0 does not read/write to 0000000077c7001a
    29.  
    30. PRIMARY_PROBLEM_CLASS:  STRING_DEREFERENCE
    31. BUGCHECK_STR         :  APPLICATION_FAULT_STRING_DEREFERENCE_CODE_ADDRESS_MISMATCH_INVALID_POINTER_READ
    32. LAST_CONTROL_TRANSFER:  from 0000000000000000 to 00000000004002f0
    33. STACK_TEXT:
    34. 00000000`0013fe90  00000000`00000000 : image00000000_00400000+0x2f0
    35. ---------
    36.  
     
  2. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    611
    если включить "Show loader snaps"
    оно будет печататься только в windbg?
     
  3. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    372
    Нет, будет отладочный вывод - если есть юзер-дебаг порт, сообщения в него, если нет то в кернел. Это обычный отладочный вывод dbgprint(). Меня в большинстве случаев такое не устраиволо(dbi и отладчик это совсем инструменты разные) и вывод шел в консоль, для этого вроде был не нужен гуи. Так трансляция начиналась на загрузочной фазе, пока не настроена среда; анализ всяких поделок, протекторов и тому подобного это требует, иначе поток будет утерян, те выйдет из под монитора.

    Другое дело как это запустить, это делалось точно не помню, но не просто флагами в реестре, там всякие опции есть. В общем говоря поищите, без этого просто запуском и отловом фаулта ничего не получится сделать.

    Какое то гадание, а не конкретная инфа. Обычно используется разбор лога, полученного в динамике, а не анализ статик дампа в котором нет временных маркеров.

    Сорян за корявость наверно текста)
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.572
    Адрес:
    Russia
    на win11 работает
     
  5. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    290
    да, падает сразу на входе в repe cmsb при первой же инструкции
    если оттрассировать в WinDbg (в х64dbg вообще пусто) то получается, что идёт обращение по недоступному адресу в Ntdll (к региону памяти Free):
    Код (Text):
    1. 0:000>
    2. (edc.a68): Access violation - code c0000005 (first chance)
    3. image00000000_00400000+0x2f0:
    4. 00000000`004002f0 f3a6            repe cmps byte ptr [rsi],byte ptr [rdi]
    5.  
    6. ;//------------------
    7. 0:000> r rsi,rdi
    8. rsi=000000007754001a   rdi=000000000040030e
    9.  
    10. ;//------------------ Проверим эти регионы памяти --------------
    11. 0:000> !address 000000007754001a
    12.  
    13. Usage:                Free
    14. Base Address:         00000000`7752f000
    15. End Address:          00000000`7efb0000
    16. Region Size:          00000000`07a81000
    17. Type:                 00000000
    18. State:                00010000   MEM_FREE      <--------//
    19. Protect:              00000001   PAGE_NOACCESS
    20.  
    21. 0:000> !address 000000000040030e
    22.  
    23. Usage:                Image
    24. Allocation Base:      00000000`00400000
    25. Base Address:         00000000`00400000
    26. End Address:          00000000`00401000
    27. Region Size:          00000000`00001000
    28. Type:                 01000000   MEM_IMAGE
    29. State:                00001000   MEM_COMMIT
    30. Protect:              00000040   PAGE_EXECUTE_READWRITE
    31.  
    32. More info:            lmv m image00000000_00400000
    33. More info:            !lmi image00000000_00400000
    34. More info:            ln 0x40030e
    35.  
    --- Сообщение объединено, 9 фев 2025 ---
    exe для поиска в экспорте (который я прикрепил выше) пробовал запускать?
    он находит у тебя на Win10 функцию и адрес LdrLoadDll() ?
     
    Последнее редактирование: 9 фев 2025
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    Marylin,
    это немного измененный FindExp попробуй его запустить
    00.png
     

    Вложения:

    Последнее редактирование: 9 фев 2025
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111

    Вложения:

  8. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    290
    у меня на Win7 + x64dbg пациент вообще не открывается - даже до ЕР не доходит, и сразу ошибка. Можно только закрыть дебагер. А вот WinDbg открывает и позволяет степать до исключения AV. Поэтому на ВМ придётся только WinDbg ставить.
     
  9. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    71
    Наверное я ввёл в заблуждение по поводу LdrGetProcedureAddressForCaller (давно семёркой не пользуюсь, поэтому не проверил сразу).
    В экспорте ntdll.dll (6.1.7601) этой функции ещё нет, она появилась в Windows 10.
    Для Windows 7 нужно использовать LdrGetProcedureAddressEx.
     
    mantissa, Mikl___ и Marylin нравится это.
  10. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    611
    урря!
    пример tut_1e.asm наконец-то завелся

    https://prnt.sc/w9A-EPEy1CRH

    (тот что поменьше по размеру,
    побольше - тоже падает)
     
  11. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    372
    Что то я вообще не понял, Как бы прежним постом ответил наверно на две темы, там товарищ пытается выгрузить юзер и какие то ошибки в загрузчике. Подумал а почему небыло ответа, затем внимательно уже посмотрел тот как назвать.. дебаг ручной вывод с ошибкой. Получается что падает не загрузчик, а шелл выше приведенный. Это я посмотрел разумеется, посмотрел как это делалось ранее, очевидной ошибки не видно, если сравнить с безотказно работающем шелл 86(те регистры сохраняются верно).

    В принципе если уж наверняка разобраться не имея динамик данных, это придется лезть в документацию формата, что делать не хочется.

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

    Может подебажить и вставить лог на каждой итерации, выяснить причину?
     
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    Если для Windows 7 нужно использовать LdrGetProcedureAddressEx и LdrGetProcedureAddressForCaller появилась в Windows 10, тогда попробуйте это
     

    Вложения:

  13. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    611
    Ура, пашет
    Via ntdll export: Addr = 000000007783A330 Name = LdrLoadDll
    Addr = 000000007777E2B0 Name = LdrGetProcedureAddressEx
    Via GetModuleHandle + GetProcAddress: Addr = 000000007783A330 Name = LdrLoadDll
    Addr = 000000007777E2B0 Name = LdrGetProcedureAddressEx
     
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    alex_dz, Marylin, k3rnl,
    видимо и предыдущие должны были работать, если бы функция LdrGetProcedureAddressForCaller была в Windows 7, там, скорее всего, моя программа пробежалась по именам функций, но не найдя LdrGetProcedureAddressForCaller, подставила 0 вместо адреса.
     
    alex_dz, mantissa и k3rnl нравится это.
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    MessageBox без секции импорта, запущен через LdrGetProcedureAddressEx
     

    Вложения:

  16. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    71
    Mikl___, на ядре 10.0 как работало так и работает.
    Только почему-то Дефендер стал ругаться на tut_01f.exe
    1.png
     
  17. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    290
    да мой косяк, там есть счётчик на кол-во функций. нахр искать несушествуюшие функи
     
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    MessageBox без секции импорта
     

    Вложения:

  19. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    290
  20. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    Тимур, это не прикол, это фича ;). Нет, конечно, я не знаю, как поведет себя программа в Win7. Я добавил вместо сравнения имен сравнение примитивных хэшей, а вот для RtlExitUserProcess мой хэш не годится, даже если сравнивать кроме хэша еще и длину названия функции, все равно происходят коллизии... Я не думал, что написание простой программы растянется на 3 страницы, но буду пробовать дальше...
     
    Research и Marylin нравится это.