Расчехляйте свои визоры!

Тема в разделе "WASM.RESEARCH", создана пользователем Rel, 18 фев 2022.

  1. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ormoulu,

    > Вручную?

    На определённом адресе.

    > что есть в данном контексте кодовая карта?

    Вот.
     
  2. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Идея не нова конечно, даже у меня есть поделка построеная на том же принципе... на питоне :dance3:
    Хотя метод сохранения нодов в битовую карту оригинальный, правда, не совсем понятен выигрыш: по размеру битовой карты его точно нет, наверное по скорости?

    И чем снимается покрытие, это интересный момент.
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ormoulu,

    Смотри пример.

    Пасс проверяется при вводе символа, нужное место быстро находится:

    1.png

    Туда останов и в среде появляются строки:
    2.png

    - это вероятно хэши в строковом виде.

    > не совсем понятен выигрыш

    Причём тут оптимизация.. индексируется битмапа через VA, для одной инструкции нужен всего 1 бит. Если инфу нужно хранить, счётчики всякие, то есть такое. Картирование даёт часть cfg связанную с искомым событием, как минимум с этого можно начинать отладку.

    > И чем снимается покрытие

    Когда визор выполняет трансляцию, на каждой итерации проверяет маркер в битмапе; если сброшен проверяет адрес(какому модулю относится и тп), взводит маркер и добавляет адрес в лог.
     

    Вложения:

  4. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Ага, только одна инструкция занимает больше одного адреса, логируются только блоки/ветвления, соответственно абсолютное большинство бит не будет задействовано никогда.

    Визор это некий эмулятор, насколько я понимаю? На каком принципе работает, очевидно это не хардварная виртуализация, верно?
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ormoulu,

    > абсолютное большинство бит не будет задействовано никогда.

    Для всего ап 86 битмапа имеет размер 2Mb, это ниочём :)

    > Визор это некий эмулятор

    dbi.

    > хардварная виртуализация

    Она для юзер апп абсолютно не нужна.
     
  6. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Вот еще что не совсем понятно: если метод построен на сравнении покрытий, то он работает только если при изменении вводимого пароля меняется путь исполнения? А если это хеш который обрабатывает все строки стандартно и потом сравнивает с заданным значением, то не сработает? Либо нужно иметь валидный пароль чтоб найти место проверки.
    Или я чего-то недопонимаю?
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ormoulu,

    > он работает только если при изменении вводимого пароля меняется путь исполнения?

    Появляется новый путь. Изменяется это более сложно в реализации и не ясно зачем нужно. Например условие ветвления изменится или положение в cfg.. Хотя может понадобится, при повторениях.

    > А если это хеш который обрабатывает все строки стандартно и потом сравнивает с заданным значением, то не сработает?

    Да, тоже самое если вызвать до события(ввода в данном случае) обрабатывающий его код. Так скипнулись некоторые хэндлеры rel'a вот. Из той подборки семплов для pespin'a лог пуст - либо баг в крэкми, либо вызов до проверки.
     
    ormoulu нравится это.
  8. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Спасибо большое за пояснения! Картинка более-менее сложилась.

    Вот еще любопытно: вы свой dbi сравнивали по производительности с DR, Pin, Frida?
     
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ormoulu,

    Дий не новый инструмент, ему много лет. Обсуждать конкретно дби не будем, иначе будет большой срач :)
    --- Сообщение объединено, 28 фев 2022 ---
    Глянул что с картами происходит под протекторами. Для чистоты эксперимента взял такой семпл:

    orig.png

    enigma
    - .map, 401044 -> 130 jcc.
    - без .map как в оригинале.

    obsidium
    - +1 jcc.

    org.png

    pecomp
    - без изменений.

    privexeprot
    - без .map добавил пре/пост обёртку.

    org.png

    - .map отморфил в 40 jcc.

    map.png

    themida
    - падает.
    --- Сообщение объединено, 28 фев 2022 ---
    enigma^

    map.png
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    safeengine
    - исходная процедура не изменяется, +jcc.

    Если задать процедуру для морфа:

    morph.png

    - остаются 3 jcc + 1. Можно выделить:

    Код (Text):
    1. 00D40000 jnz short 00D40008    ; +0(4BC122)
    2. 00D40002 call 00D4005B
    3. 00D40007 x
    4. 00D40008 seto dl
    5. 00D4000B mov ebx,eax
    6. 00D4000D mov edx,BC2D97FF
    7. 00D40012 mul ecx
    8. 00D40014 inc al
    9. 00D40016 mov eax,edx
    10. 00D40018 call 00D4001E
    11. 00D4001D x
    12. 00D4001E push dword ptr ss:[esp+3]
    13. 00D40022 lea esp,dword ptr ss:[esp+1]
    14. 00D40026 mov dword ptr ss:[esp],eax
    15. 00D40029 lea esp,dword ptr ss:[esp+3]
    16. 00D4002D lea esp,dword ptr ss:[esp+4]
    17. 00D40031 lea edx,dword ptr ds:[edx+edx*4]
    18. 00D40034 add edx,edx
    19. 00D40036 cmc
    20. 00D40037 sub ebx,edx
    21. 00D40039 cmc
    22. 00D4003A add bl,30
    23. 00D4003D mov byte ptr ds:[esi],bl
    24. 00D4003F pushfd
    25. 00D40040 lea esp,dword ptr ss:[esp+4]
    26. 00D40044 inc esi
    27. 00D40045 sub esp,2
    28. 00D40048 lea esp,dword ptr ss:[esp+2]
    29. 00D4004C test eax,eax
    30. 00D4004E push ax
    31. 00D40050 push word ptr ss:[esp+1]
    32. 00D40055 lea esp,dword ptr ss:[esp+4]
    33. 00D40059 jmp short 00D40000
    34.  
    35. 00D4005B lea esp,dword ptr ss:[esp+4]
    36. 00D4005F cmp edi,esi
    37. 00D40061 jb 00D400EE        ; +8(4BC1B6)
    38. 00D40067 bswap ebx
    39. 00D40069 xchg bx,si
    40. 00D4006C pop edi
    41. ...
    Все условия сохраняются. Если же заместо морфа использовать вирту:

    virt.png

    - одно условие, события не видны из за повторного покрытия. С виртой карты не работают, в простом виде(без счётчиков etc) :dntknw:
    --- Сообщение объединено, 1 мар 2022 ---
    Нашёл древний семпл авера.

    scr.png

    - в карте 6 событий, последнее это проверка валид/невалид, предпоследняя это проверка символов пароля, дальше идут вычисления.
     

    Вложения:

    • safe.7z
      Размер файла:
      1,7 МБ
      Просмотров:
      106
    • ctf13.7z
      Размер файла:
      238,9 КБ
      Просмотров:
      105
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ormoulu,

    Интересный семпл нашёл, ты спрашивал как пароли находятся :)

    scr.png
     

    Вложения:

    • TDC4.5.7z
      Размер файла:
      173,8 КБ
      Просмотров:
      143
  12. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Мне вручную не очень актуально, мне было интересно может строки автоматически выцепляются.
    Хотя наверное это осуществимо если например подключить статическую базу где отмечены строки и адреса обращения к ним.

    Не поможет конечно если строка для сравнения генерится автоматически.
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Кажется, что у Индия появилась мотивация, если это так, то очень хорошо, не зря я крекмишу пилил.
     
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ormoulu,

    Типо так ?

    s.png

    Код (Text):
    1.     if mm_fetch(Ip)
    2.         if line_addr = effective_addr
    3.             if [line_addr] = "mystring"
    4.                 if !IcGet(Ip)
    5.                     Log(Ip, line_addr)
    6.                     IcSet(Ip)
    7.                 fi
    8.             fi
    9.         fi
    10.     fi
    Не проблема строки выцепить, в данном случае это юникод и прямая выборка. Пройти по указателям взятым из среды и поискать.
    --- Сообщение объединено, 1 мар 2022 ---
    Rel,

    Интересно метод доработать, для этого нужно много тестить.
     
    Последнее редактирование: 1 мар 2022
  15. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Ага.
    Что за отладчик на скринах? x64dbg?
     
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    ormoulu,

    Олли, авера запускал в x32dbg.

    Со строками сразу проблема появилась и не одна, впрочем она очень старая, помню на прошлом форуме я её поднимал.

    1.png
    2.png

    - результат работы RtlIsTextUnicode()/DbgPrint().

    1. Нужно определить что это читаемые строки.
    2. Маркировать начало строк, что бы небыло обращений далее начала буфера.
    --- Сообщение объединено, 1 мар 2022 ---
    ormoulu,

    Забавно, если выводить ascii в семпле выше:

    asc.png
    --- Сообщение объединено, 1 мар 2022 ---
    ormoulu,

    Написал простейшую процедуру маркировки строк:

    Код (Text):
    1.     if IcGet(P)
    2.         ; xS..0
    3.         if !IcGet(P - 1)
    4.             if IsAscii(P)
    5.                 ret TRUE    ; 0S..0
    6.             fi
    7.         fi
    8.     else
    9.         if IsAsc(P)    ; S..0
    10.             IcSet([P % (P + Len(P))])
    11.             ret TRUE
    12.         fi
    13.     fi
    14.     ret FALSE
    Такое выводит:

    l.png

    Пару семплов решила:

    1.png
    2.png

    Это наверно примеры как не нужно делать крэкми ;)
     

    Вложения:

    • dbi.7z
      Размер файла:
      780,5 КБ
      Просмотров:
      110
  17. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Интересный семпл тоже вирта.
     
  18. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Введение в реверсинг с нуля используя IDA PRO. Часть 14.

    scr.png

    - первое с конца событие сравнение хэшей. Если выборку строк посмотреть, то она при вычислении хэшей:

    df.png

    Там материал обучающий, но не сказано главное - нет смысла в ручном анпаке, тк пакер сам всё распаковывает, он даже не заметен. Аналогично:

    scr.png
    --- Сообщение объединено, 3 мар 2022 ---
    OEP для этого семпла.

    ep.png
     

    Вложения:

    • ida16.7z
      Размер файла:
      52,3 КБ
      Просмотров:
      101
    • kahel_crackme.zip
      Размер файла:
      69,7 КБ
      Просмотров:
      94
  19. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Камераден, совершенно ВНЕЗАПНО понадобилось. Чем сейчас модно восстанавливать заголовки, секции и вот это все после дампа? Руками чего-то лениво, писать свою приблуду еще ленивее. Запускать не надо, лишь бы ида нормально сожрала и сойдет.
     
  20. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Ну я руками конечно уже, это оказалось быстрее чем на форуме спросить, но все-таки интересно стало: тут спецы только по кракмисам? Или все тоже ручками правят, или свои инструменты у всех?