Сейчас на форуме: _MBK_ (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› CreateFileA на обращение к определенному файлу. |
Посл.ответ | Сообщение |
|
Создано: 01 марта 2011 04:03 · Личное сообщение · #1 Привет. Есть ли возможность поставить брекпоинт в Olly на обращение к определенному файлу? Дело в том, что файлов в игре тысячи и я замучаюсь жать F9 если просто поставить брекпоинт на CreateFileA и ждать, пока игра не обратиться к нужному мне файлу... Может есть пример скрипта или сама возможность в OllyDbg? ![]() |
|
Создано: 01 марта 2011 04:46 · Личное сообщение · #2 Можно это называется бряк по условию. --> Рекомендую <--изучить прежде, чем задать вопрос. ![]() |
|
Создано: 01 марта 2011 14:53 · Поправил: Dazz · Личное сообщение · #3 NikolayD, спасибо. Почитал, но у меня почему-то не срабатывает брекпоинт. Что я делал: 1. Ставлю bp CreateFileA Останавливается здесь - ![]() Если пробежать вглубь функции, можно увидеть что файл main.cs.dso появляется в ECX и EDX ![]() 2. Когда останавливается, меняю бряк на бряк по условию UNICODE [ECX]=="main.cs.dso" 3. Запускаю отладчик, но бряк не срабатывает=( Как поставить бряк на ASCII я не понял. Пробовал EDX=="main.cs.dso" - но видимо это не то... Что я не так делаю? ![]() |
|
Создано: 01 марта 2011 16:43 · Личное сообщение · #4 |
|
Создано: 01 марта 2011 17:00 · Личное сообщение · #5 |
|
Создано: 01 марта 2011 18:02 · Поправил: Vovan666 · Личное сообщение · #6 На пиши скрипт что-то типа var crfa var temp gpa "CreateFileA","kernel32.dll" mov crfa,$RESULT bp [crfa] label: run mov, temp[esp+4] cmp [temp], "common\main.cs.dso", 0B jne label ret скрипт не проверял зы и почему у тебя EDX=="main.cs.dso" а не "common\main.cs.dso" ![]() |
|
Создано: 01 марта 2011 18:10 · Поправил: Dazz · Личное сообщение · #7 Со скриптом попробую разобраться. Правда у меня траблы с программированием, но все-же попробую. Vovan666 пишет: зы и почему у тебя EDX=="main.cs.dso" а не "common\main.cs.dso" Так в справке написано: [STRING 123456]=="Brown fox" - true if memory starting from address 0x00123456 contains ASCII string "Brown fox", "BROWN FOX JUMPS", "brown fox???" or similar. Т.е. по идее должно подойти даже часть имени файла. Но я все-же попробовал: [STRING 7C801A24]=="common/main.cs.dso" - не срабатывает. Какой адрес должен быть после String? [STRING xxxxx ?? =============Update============== Спасибо Vovan666! Твой скрипт сработал, по-крайней мере на примере (нужный файл появляется очень долго, поэтому тренировался на файле загружающем в первую очередь). Некоторые опечатки/помарки я исправил и бряк сработал =) var crfa var temp gpa "CreateFileA","kernel32.dll" mov crfa,$RESULT bp crfa label: run mov temp,[esp+4] cmp [temp], "common\main.cs.dso", 0B jne label ret ![]() |
|
Создано: 01 марта 2011 20:56 · Личное сообщение · #8 |
|
Создано: 01 марта 2011 22:43 · Поправил: Dazz · Личное сообщение · #9 inffo У меня появляется ошибка. Я пробовал даже в чистой Ольке. Вот записал флешевое видео(2мб) -rghost.ru/4591430 Если изменить слеш на обратный, просто бряк не срабатывается...Может что не так делаю? А вообще мне нужно найти какой-то другой способ наверное... Долго ждать загрузки всех файлов. И как назло вызов файлов происходит не из экзешника, а из скриптов (байткод или шифрованные) =( Задача такая: В игре есть видео. Судя по всему, в нем вырезали заголовок. По-крайней мере я сунул заголовок от другого видео и увидел первый кадр. Думал, что поставив бряк, я смогу увидеть нужный мне заголовок, когда видео начинает проигрываться. Есть другие идеи? Для воиспроизведения видео вроде бы используется avcodec-52.dll. Может искать до вызова этой библиотеки? ![]() |
|
Создано: 02 марта 2011 03:00 · Личное сообщение · #10 |
|
Создано: 02 марта 2011 16:04 · Личное сообщение · #11 |
|
Создано: 02 марта 2011 16:50 · Личное сообщение · #12 |
|
Создано: 02 марта 2011 20:21 · Поправил: Dazz · Личное сообщение · #13 |
|
Создано: 02 марта 2011 21:41 · Поправил: inffo · Личное сообщение · #14 |
|
Создано: 03 марта 2011 01:22 · Личное сообщение · #15 Ольга кривороженница, всё никак к этому не привыкну ))))) [STRING ([esp+4]+7)]=="main.cs.dso" ![]() |
|
Создано: 03 марта 2011 04:32 · Поправил: Dazz · Личное сообщение · #16 inffo Ты невнимательно читал =) Если изменить слеш на обратный, просто бряк не срабатывается... Т.е. я делал так: EDX=="common/main.cs.dso" и так: EDX=="common\main.cs.dso" Не помню уже, пробовал ли EAX и ECX - уже запарился =) NikolayD Хм...Срабатывает нормально. Но прикол в том, что дальше этот файл опять вызывается и не срабатывает. Думаю, дело в ошибке, которая пишется в Debug String. Как можно отключить этот Debug String? В ollydbg.ini стоит "Stop on debug string=0" ... ![]() з.ы. NikolayD, что-то мне кажется, что вызов видео будет из скрипта и я не смогу поймать через бряк... И все это бестолку. Радует, что узнал немного про скрипты и про условный бряк =) Немного исправил скрипт от Vovan666 и сделал, чтобы все вызываемые имена файлов писались в текстовый лог. Погляжу, будет ли вызов видеофайла. А вот Debug String меня уже достал... ![]() |
|
Создано: 03 марта 2011 05:06 · Личное сообщение · #17 |
|
Создано: 03 марта 2011 05:22 · Личное сообщение · #18 NikolayD пишет: поставь плагин Phantom там в опциях разберёшься ага, гляну. Он в сборке у меня есть. NikolayD пишет: а хрен его знает, когда кажется надо всегда перепроверять ))) сложность в том, что файлов ~16000 и пока скриптом(от Vovan666) дойдет очередь до видео, я постарею =)) NikolayD пишет: Это я так понял игра? Ага, экшен с элементами порно =))) На рутрекере ее перевели, но видео не смогли. ![]() |
|
Создано: 03 марта 2011 05:29 · Личное сообщение · #19 |
|
Создано: 03 марта 2011 06:51 · Личное сообщение · #20 |
|
Создано: 03 марта 2011 10:16 · Личное сообщение · #21 А если пойти от обратного? Если для проигрывания видео используется avcodec-52.dll, почему бы не поставить бряки на ее экспортируемые функции, и как сработает смотреть откуда вызывается и что там происходит... ![]() |
|
Создано: 03 марта 2011 21:02 · Поправил: Dazz · Личное сообщение · #22 |
|
Создано: 04 марта 2011 04:57 · Личное сообщение · #23 |
|
Создано: 04 марта 2011 20:34 · Личное сообщение · #24 |
![]() |
eXeL@B —› Вопросы новичков —› CreateFileA на обращение к определенному файлу. |