eXeL@B —› Основной форум —› Опрос: какие точки останова вы используете и как? |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 22 апреля 2012 04:58 · Личное сообщение · #1 Возник данный вопрос и хотелось бы спросить мнение у сообщества. Собственно варианты: 1. Аппаратные точки останова (hardware breakpoints). а) "не использую, палятся любым протектором" б) "если грамотно ставить и защищать DrX-регистры, то это хороший и мощный инструмент!" в) "хе-хе, я ARM-реверсер)))" 1.1. Для тех, кто выбрал "б". Нужна ли возможность context-specific (бряк только на один поток или на все сразу по выбору)? а) "я очень хочу использовать возможность context-specific бряков данного типа, мне интересно поймать нужное место в программе только на конкретном потоке" б) "возможность использовать на конкретном потоке считаю абсурдной, более того, важно чтобы в потоках, создаваемых после установки точки останова, она появилась и там" в) "в ольке все сделано как надо..." 2. Программные точки останова (software breakpoints/exception breakpoints) а) "использую, но очень не хватает возможности context-specific бряков данного типа, например, хочу иметь возможность поймать вызов GetWindowTextA в потоке окна инструментов отлаживаемой программы" б) "меня все устраивает, главное включить голову, а жалуются обычно не профессионалы" в) "бесит обнаружение бряков этого типа, мгновенно перейду на отладчик, где точки останова данного типа скрываются от программы в 3-ем кольце" 3. Точки останова на память (memory regions hook) а) "это чего такое вообще?" б) "реализовано криво, так что вообще не использую" в) "это очень нужная вещь, использую ольку хотя бы потому, что в ней есть этот тип точек останова" P.S. 1 июня будет "выкидыш", что это будет зависеть от результата проведения подобных опросов, моего времени и здоровья. Не буду говорить о том, на какой оно стадии. Также не хочется давать пустых обещаний. Но тем не менее: +поддержка x86 и x86_64 -нет PDK и не скоро будет, но OpenSource -user-mode only! sorry( -ELF-версия заморожена -GUI не готов, так что придется лепить на EDB, GDB или IDA (по совету разработчиков компании Parallels) -CLI (command line interface) заморожен, разработчик CLI ушел работать в Google +да, детка! эмулирующий! (опционально, только не обольщайтесь, вирусы на реальной машине этим дебажить не стоит - эмуляция только для ускорения, syscall'ы оно не эмулит) -анализатор пока сырой, ну да и черт с ним *глючить будет очень сурово, но пара месяцев баг-репортов со стороны сообщества и из этого что-то может получиться. | Сообщение посчитали полезным: ressa |
|
Создано: 22 апреля 2012 10:29 · Поправил: Veliant · Личное сообщение · #2 1. Использую в основном для esp-4, и в тех случаях когда int3 палятся или не ставятся. Надобности в установке разных бряков на каждый поток не вижу - лишняя путаница будет. 2. Опять же не думаю, что нужная привязка к контексту, или сделать как в olly бряки по условию, с возможностью сравнения hThread. Но однозначно было бы хорошо, если бы программные бряки скрывались 3. Вещь нужная, как на доступ к секциям, так и для произвольного региона. Частенько спасает, если hw и int3 бряки палятся программой |
|
Создано: 22 апреля 2012 10:43 · Личное сообщение · #3 |
|
Создано: 22 апреля 2012 11:46 · Личное сообщение · #4 |
|
Создано: 22 апреля 2012 14:07 · Личное сообщение · #5 1. б), в) 2. б) 3. в) Обоснование. 1. context-specific можно добиться и в олли, если заюзать механизм скриптов. Да, способ несколько неудобен, но не надо говорить, что это невозможно. Вопрос только лишь желания. 2. Обнаружение бряков-то бесит, но от этого никуда не деться. Если используется механизм обнаружения опкода СС, то, конечно, можно опкод изменить и перехватывать не инт3, а другие обработчики, но модифицировать байты всё равно придётся, а значит все проверки контрольных сумм участков кода также будут палить новые брейкпоинты. 3. Вещь нужная, но в ольке реализовано криво хотя б потому, что нельзя ставить таких бряков несколько. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 22 апреля 2012 14:42 · Личное сообщение · #6 ARCHANGEL пишет: 1. context-specific можно добиться и в олли В любом скриптовом отладчике этого можно добиться. Но зачем геморрой? Может я хочу использовать сразу 8 точек останова, просто на разных потоках. Можно написать плагин для ольки и добиться этого. Но это уже не олька. Я говорю о штатной возможности, галку тыкнул в настройках бряка и все. ARCHANGEL пишет: 2. Обнаружение бряков-то бесит, но от этого никуда не деться. Если используется механизм обнаружения опкода СС, то, конечно, можно опкод изменить и перехватывать не инт3, а другие обработчики, но модифицировать байты всё равно придётся, а значит все проверки контрольных сумм участков кода также будут палить новые брейкпоинты. Про кэши TLB и принципы работы MMU что-нибудь слышал? Есть готовый код, который реализует сокрытие int3. ARCHANGEL пишет: 3. Вещь нужная, но в ольке реализовано криво хотя б потому, что нельзя ставить таких бряков несколько. И зря, на днях я планирую реализовать поддержку сразу нескольких. К сожалению пока не из драйвера. Хотя готовый сплайс в ядре под 32/64 написанный Волком вполне себе пригоден. |
|
Создано: 22 апреля 2012 15:22 · Личное сообщение · #7 |
|
Создано: 22 апреля 2012 15:37 · Личное сообщение · #8 |
|
Создано: 22 апреля 2012 16:15 · Личное сообщение · #9 Да просто надоело сидеть и думать, какой не красивый и плохой код получается. Уже пошли трехуровневые абстракции. Тьфу, блин. Надоело одному писать. Пусть выйдет кривой и неуклюжий. Допилим) Баг-репорты хороший стимул) Смысл опросов заключается в выборе кусков кода. Их уже накопилось огромное множество. У меня свои методы реверс-инженерии, у кого-то могут быть свои. Отладчик пишется для всего сообщества, а не для меня любимого. Поэтому сразу хочу выяснить, что важно, а что не очень. |
|
Создано: 22 апреля 2012 16:17 · Личное сообщение · #10 |
|
Создано: 22 апреля 2012 17:33 · Поправил: Dart Sergius · Личное сообщение · #11 |
|
Создано: 22 апреля 2012 18:45 · Личное сообщение · #12 |
|
Создано: 22 апреля 2012 20:57 · Поправил: VodoleY · Личное сообщение · #13 1 б (вобщем то незаменимая местами весч) 1.1 а (ибо сисер таки пришлось дергать... тот же армадило...) 2. я хз что ответить.. а б в (ощущение что вопрос задавал человек с криком души ) 3. ВВВВ однозначно З.Ы. касательно 3го.. иногда очень нехватает карты использования памяти... аля МЕМ_монитор. еще под дос была чудна софтина еще в 95ом году строила карту использования памяти, туда поподал ЕIP в том числе, накладываеш дизасм иды, и выдернутый алго готов.. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 22 апреля 2012 21:22 · Личное сообщение · #14 |
|
Создано: 22 апреля 2012 21:39 · Личное сообщение · #15 |
|
Создано: 22 апреля 2012 22:01 · Личное сообщение · #16 int В IDA в новой версии обещали бряки на регионы. Так что раньше было хорошо, а будет еще лучше. 1. б + IdaStealth. Использую, если палятся soft bp 1.1. фенечка, но может и пригодиться. ольку вообще не использую. 2. активно использую. 3. полезная вещь Эмулирущий отладчик - это отлично. В той же иде в новой версии обещали трассы и плейбек. Еще бы сделали сравнение трасс =) Но вот только когда мы ту иду увидим... вопрос. ----- старый пень |
|
Создано: 22 апреля 2012 22:54 · Личное сообщение · #17 |
|
Создано: 23 апреля 2012 03:09 · Личное сообщение · #18 |
|
Создано: 23 апреля 2012 09:44 · Личное сообщение · #19 |
|
Создано: 23 апреля 2012 10:14 · Личное сообщение · #20 Gideon Vi пишет: главной проблемой при частичном переходе на вторую ольгу было отсутствие поддержки плагинов По-моему, главной проблемой было то, что вторая олька - игрушка, которой нельзя реверсить что-то более-менее серьёзное по причине отсутствия только двух важных вещей: 1. Скриптового движка. 2. Плагина для сокрытия от антиотладочных механизмов. Так что, как по мне, народ перейдёт на дебаггер, который не будет палиться всякими говнопротами, и будет иметь мощный интерпретатор возможностями типа Python. И даже если у него не будет Plugin SDK, это с лихвой компенсируется тем, что он OpenSource. Ну, это только при условии, что он не был собран на каком-то прекрасном компиляторе, который автор написал сам или добыл где-то в глубинах бескрайнего космоса. Т.е. MS VC++ приветствуется. int пишет: Про кэши TLB и принципы работы MMU что-нибудь слышал? Слышал, и слышал я то, что это дело специфично для разного железа. Есть готовый код, который реализует сокрытие int3. А вот про это не слышал. Ну, вы, если вам не трудно, намекните, как оно работает. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 23 апреля 2012 13:59 · Поправил: mak · Личное сообщение · #21 ARCHANGEL Есть всего три метода сокрытия не считая частных случаев и методов 1. Манипуляции с памятью, доступы к страницам, переопределение страниц и подстановка (Поиск по хуку хэндлера инт 0eh + TLB, протекции страницы и мму, документ Stealth Braekpoints как вариант, был док от китайцев, там скрывали таким методом инт3, название не помню, код в сети есть, из этой части Олибон плагин и шадоу волкер, там есть код, а так в сети кода по теме достаточно) 2. Эмуляция через Виртуализацию + иногда использование дополнительно пункта 1 (Смотреть Fdbg, Cheat Engine - но там без манипуляций с пунктом один) 3. Замена прерывания с переадресацией, была тут тема на краклабе, не помню название. Постпост - как по мне так это все частные случаи, в принципе можно обойтись и без таких изворотов вообще, если разбор идет вручную и досконально эмуляция инт3 не так уж и нужна. Хотя вот Енджин по брякам с пунктом 1, реализовав многогранность методов первого пункта, было бы супер. Очень удобно, неограниченное количество бряков, плюс легкость в модификации методов бряка, отличное расширение. Единственное в открытом доступе только недоделанный софт. В принципе такой енджин можно подключить и к оле. int Его нужно еще прикручивить к оболочкам, зачем ждать кросплатформенного гуи, когда обкат может решить дальнейшую судьбу, достаточно сделать гуй легкий под вин, например оли похожий допилить можно взяв ... ГУИ RADASM, открытый x86 асм код, но для 64 это не проблема, дополнить нужным контентом можно быстро, а для 64 сделать переходник модуль 64bitHelper для гуя, а там можно его уже со временем и поменять, плюсы .. мало писать кода, собрать и изменить может каждый , отладчик уже в работе и не нужно ждать и прикручивать, собственный гуй и легкое понимание интерфейса, похожесть на Оллидбг. ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube | Сообщение посчитали полезным: ARCHANGEL, VodoleY |
|
Создано: 23 апреля 2012 14:53 · Личное сообщение · #22 |
|
Создано: 23 апреля 2012 15:07 · Личное сообщение · #23 |
|
Создано: 23 апреля 2012 15:42 · Поправил: ajax · Личное сообщение · #24 int вообще, юзаю ida с idastealth. olly только для для распаковки, при наличии скриптов. Аппаратные точки останова (hardware breakpoints) "если грамотно ставить и защищать DrX-регистры, то это хороший и мощный инструмент!" "Нужна ли возможность context-specific (бряк только на один поток или на все сразу по выбору)" почему бы и не выбирать. больше - не меньше Программные точки останова (software breakpoints/exception breakpoints) "меня все устраивает, главное включить голову" Точки останова на память (memory regions hook) "это очень нужная вещь" ----- От многой мудрости много скорби, и умножающий знание умножает печаль |
|
Создано: 24 апреля 2012 21:43 · Личное сообщение · #25 ARCHANGEL пишет: А вот про это не слышал. Ну, вы, если вам не трудно, намекните, как оно работает. Ну саму рассинхронизацию сделать довольно просто. Внутри драйвера получаем VA нужной страницы, которую нужно похерить в кэше TLB, а также саму страницу (в смысле байтики), которые мы хотим представить нашей программе. Дальше ловим CR3 регистр: KeStackAttachProcess(process, &unused); __writecr3(cr3_reg); // пригодится KeDetachProcess(); Из TLB выкидываем гадкую страницу _disable(); *(unsigned int *)page_pte &= 0xFFFFFFFB; // сброс US бита, для генерации исключения при обращении к странице __invlpg(page_va); // инвалидация элемента в кэше TLB _enable(); Гораздо сложнее обрабатывать исключения, которые возникают вследствие такой махинации. Суть состоит в том, что надо похучить IDT. При возникновении исключений int01 и int0e надо играться с __invlpg, чтобы поддерживать TLB в "удобном состоянии". При исполнении кода в нужной страницы, она улетит в кэш TLB для кода, но надо ее подменить, чтобы там были все установленные на странице точки останова, при этом делается подмена PTE. P.S. По сабжу рекомендую прочитать/пореверсить на счет MiCopyOnWrite. | Сообщение посчитали полезным: ARCHANGEL |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 25 апреля 2012 18:34 · Личное сообщение · #26 |
|
Создано: 04 мая 2012 14:02 · Личное сообщение · #27 |
|
Создано: 04 мая 2012 17:07 · Поправил: reversecode · Личное сообщение · #28 |
|
Создано: 04 мая 2012 17:18 · Личное сообщение · #29 |
|
Создано: 04 мая 2012 17:46 · Поправил: reversecode · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Основной форум —› Опрос: какие точки останова вы используете и как? |