OllyDBG vs. цепочки условных бряков

Тема в разделе "WASM.RESEARCH", создана пользователем DEEP, 15 мар 2012.

  1. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Ку всем.

    Вопрос мой на сегодня таков: поддерживает ли Ольга цепочки точек останова по условию?
    Скажем, есть у нас одна важная условная точка. А чуть ниже есть ещё пяток, которые должны останавливать выполнение только в том случае, если было соблюдено условие на останов у самой-самой первой точки. При этом, к моменту достижения каджой из этих пяти, все «маркеры» первичного условия (в моём случае, наличия в EDX указателя на строку "l:\scorpc\game\barrel.0") уже перезаписаны.

    А, ну и ещё, хотелось бы заиметь руководство по синтаксису условных точек останова.
    Гугл на запрос "ollydbg conditional bp syntax" выдаёт в основном результаты с "syntax highlighting".

    В общем-то, сабж.
     
  2. samuraishowdown

    samuraishowdown New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2011
    Сообщения:
    70
    Можно. Скрипт там есть. Я так делал, но давно и всё забыл. Вот в скрипте windbg такое замутить - это да, проблема, но тоже можно.

    Там в Olly доках на весь скрипт - один файлик его описание. Почитай.
     
  3. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    все в манах есть. причем избыточно.
    Код (Text):
    1. 0:000> bp kernel32!CreateFileW "du poi(@esp+4);kv;gu;? @eax; g"
    тащемта показываем первый параметр и щито функа возвращает.
    а в индексе хелпа по виндбг помимо conditional breakpoints еще и conditional execution есть
    Код (Text):
    1. 0:000> bp `mysource.cpp:143` "j (poi(MyVar)>0n20) ''; 'gc' "
     
  4. samuraishowdown

    samuraishowdown New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2011
    Сообщения:
    70
    sn0w
    Дак речь то не об этом. gu только ещё один бряк на адрес возврата ставит и всё. А цепочка где?

    А я допустим так хочу: брякаюсь на kernel32!CreateFileW пока имя файла не будет "file.txt", а только после этого брякаюсь на WriteFile, а бряк на kernel32!CreateFileW в это время уже снят.

    В олли я делал такую цепочку на 19 бряков. Каждый следующий бряк снимает предыдущий.
     
  5. trash_master

    trash_master New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2006
    Сообщения:
    319
    Адрес:
    Україна
    почему б не использовать odbgscript
     
  6. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Ну почему проблема? pykd хороший скриптовый движок поможет.
     
  7. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    На коленке за две минуты собирается надстройка, которая сделает то, что вам нужно. Ты пойми друг, что отладчика бывает не достаточно.
     
  8. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Благодарю всех за ликбез!

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

    Ушёл раскуривать odbgscript.
     
  9. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    )) а я виндебаговский это время курил - может понадобится - по поводу бряка на нужный файл. потенциал у виндбага конечно просто зверский, но и глаза режет от обилия команд, расширений итд.

    script.wds
    Код (Text):
    1. .block  
    2. {
    3.     r $t1 = poi(@esp + 4)
    4.    
    5.     as /mu ${/v:fnamestr} @$t1
    6.        
    7.     .if ($scmp("${fnamestr}", "test.txt") = 0)
    8.     {
    9.         .printf "\n>>> CreateFileW hits required arg (%p) %mu. Setting BP to WriteFile...\n", @$t1, @$t1
    10.         gu
    11.         r $t2 = @eax
    12.         bc*
    13.         bp kernel32!WriteFile ".if (poi(@esp + 4) == @$t2) {.echo >>> WriteFile hits required handle; bc*} .else {gc}"
    14.         .printf ">>> Ok hit f5 to continue!\n"     
    15.     }
    16.     .else
    17.     {
    18.         gc
    19.     }
    20. }
    HANDLE file2 = CreateFileW(L"xuita.txt", GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,0);
    HANDLE file = CreateFileW(L"test.txt", GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,0);

    чето башка кругом пошла - на ксунте срабатывает а не на указанной в скрипте testтхт. кто что посоветует?

    0:000> bp kernel32!CreateFileW " $$>a<d:\\testlib\\debug\\script.wds"
    *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\syswow64\kernel32.dll -
    0:000> g
    ModLoad: 7d910000 7d970000 C:\Windows\SysWOW64\IMM32.DLL
    ModLoad: 70990000 70a5c000 C:\Windows\syswow64\MSCTF.dll
    *** WARNING: Unable to verify checksum for testlib.exe

    >>> CreateFileW hits required arg (0041584c) d:\xuita.txt. Setting BP to WriteFile...
    >>> Ok hit f5 to continue!
    eax=0000005c ebx=7efde000 ecx=7efdd000 edx=000000b7 esi=0018fe40 edi=0018ff30
    eip=0041192a esp=0018fe40 ebp=0018ff30 iopl=0 nv up ei ng nz ac po cy
    cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000293
    testlib!main+0x3a:
    0041192a 3bf4 cmp esi,esp
    0:000> g
    >>> WriteFile hits required handle
    eax=0018ff28 ebx=7efde000 ecx=0000005c edx=0018fde8 esi=0018fe40 edi=0018ff30
    eip=7dd71282 esp=0018fe28 ebp=0018ff30 iopl=0 nv up ei pl zr na pe nc
    cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
    kernel32!WriteFile:
    7dd71282 8bff mov edi,edi
     
  10. samuraishowdown

    samuraishowdown New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2011
    Сообщения:
    70
    sn0w
    Не годится. Если цепочка длиннее 2 бряков, что для каждого бряка по скрипту. В олли можно обойтись одним скриптом.
    В виндбг на самом деле тоже:
    Код (Text):
    1. .prompt_allow -reg -src +ea +sym +dis
    2. as xe "bc *; ad *"
    3. as x6 "bp kernel32!virtualprotect 5 ${xe}; g"
    4. as x5 "p 13 ${x6}"
    5. as x4 "t ${x5}"
    6. as x3 "pa 103c27c1 ${x4}"
    7. as x2 "t ${x3}"
    8. as x1 "pa 103eb213 ${x2}"
    9. as x0 "t ${x1}"
    10. bu anype+1ea093 x0
    Это пример из жизни, там и бряки и трассировка. Запускаеться скрипт только "$<script.txt" вот так. Запись скрипта в одну строчку через ";" не годиться.

    Если кому не понятно - скрипт читать с конца - сначала сработет bu anype+1ea093, потом 1 шаг трассировки t, потом трассируем до pa 103eb213. И так далее.

    Кто знает варианты проще, без извратов, пожалуйста отпишитесь.