Сейчас на форуме: _MBK_ (+6 невидимых)

 eXeL@B —› Вопросы новичков —› CreateFileA на обращение к определенному файлу.
Посл.ответ Сообщение

Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 01 марта 2011 04:03
· Личное сообщение · #1

Привет.

Есть ли возможность поставить брекпоинт в Olly на обращение к определенному файлу? Дело в том, что файлов в игре тысячи и я замучаюсь жать F9 если просто поставить брекпоинт на CreateFileA и ждать, пока игра не обратиться к нужному мне файлу...
Может есть пример скрипта или сама возможность в OllyDbg?



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 01 марта 2011 04:46
· Личное сообщение · #2

Можно это называется бряк по условию.
--> Рекомендую <--изучить прежде, чем задать вопрос.

| Сообщение посчитали полезным: Dazz

Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 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" - но видимо это не то...


Что я не так делаю?



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 01 марта 2011 16:43
· Личное сообщение · #4

Неправильно составляешь условие. Там нужно использовать STRING.



Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 01 марта 2011 17:00
· Личное сообщение · #5

А адрес какой использовать, тот который изображен на первом скриншоте?
Т.е. 7C801A24 Mov EDI, EDI ?
[STRING 7C801A24]=="main.cs.dso" - так не срабатывает. Не мог бы ты написать пример?



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 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"

| Сообщение посчитали полезным: Dazz

Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 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




Ранг: 57.7 (постоянный), 49thx
Активность: 0.070
Статус: Участник

Создано: 01 марта 2011 20:56
· Личное сообщение · #8

Dazz обычный бряк с условием EDX=="common\main.cs.dso" на адресе CreateFileA тоже работает, попробуй проверь, надо писать полностью то, где нужно остановиться. А EDX=="main.cs.dso" соответственно не сработает.



Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 01 марта 2011 22:43 · Поправил: Dazz
· Личное сообщение · #9

inffo

У меня появляется ошибка. Я пробовал даже в чистой Ольке. Вот записал флешевое видео(2мб) -rghost.ru/4591430

Если изменить слеш на обратный, просто бряк не срабатывается...Может что не так делаю?

А вообще мне нужно найти какой-то другой способ наверное... Долго ждать загрузки всех файлов. И как назло вызов файлов происходит не из экзешника, а из скриптов (байткод или шифрованные) =(

Задача такая:
В игре есть видео. Судя по всему, в нем вырезали заголовок. По-крайней мере я сунул заголовок от другого видео и увидел первый кадр. Думал, что поставив бряк, я смогу увидеть нужный мне заголовок, когда видео начинает проигрываться. Есть другие идеи?


Для воиспроизведения видео вроде бы используется avcodec-52.dll. Может искать до вызова этой библиотеки?



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 02 марта 2011 03:00
· Личное сообщение · #10

[STRING [esp+4]]=="common\main.cs.dso"



Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 02 марта 2011 16:04
· Личное сообщение · #11

NikolayD

Появляется ошибка и срабатывает бряк на каждом файле. Делал также, как в видео (пред. сообщение).

Видимо я не потяну такую задачу=(



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 02 марта 2011 16:50
· Личное сообщение · #12

Что за ошибка?



Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 02 марта 2011 20:21 · Поправил: Dazz
· Личное сообщение · #13

Unknown Character Sequence (на видео в статусе видно). Но мне кажется, таким путем я ничего не найду. Игра написана на скриптах Torque и вызовы видео вроде оттуда идут. Я сейчас пробую найти заголовок от видео в памяти. Что-то нашел, попробую его вставить перед видео.




Ранг: 57.7 (постоянный), 49thx
Активность: 0.070
Статус: Участник

Создано: 02 марта 2011 21:41 · Поправил: inffo
· Личное сообщение · #14

Dazz у тебя в видео проскакивало ASCII "common/main.cs.dso" попробуй эту строчку поставить в условие, т.е. EDX=="common/main.cs.dso"
ADD Также попробуй с EAX и ECX



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 03 марта 2011 01:22
· Личное сообщение · #15

Ольга кривороженница, всё никак к этому не привыкну )))))

[STRING ([esp+4]+7)]=="main.cs.dso"

| Сообщение посчитали полезным: Dazz

Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 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 меня уже достал...



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 03 марта 2011 05:06
· Личное сообщение · #17

Dazz пишет:
Debug String

поставь плагин Phantom там в опциях разберёшься

Dazz пишет:
что-то мне кажется, что вызов видео будет из скрипта и я не смогу поймать через бряк

а хрен его знает, когда кажется надо всегда перепроверять ))) Это я так понял игра?



Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 03 марта 2011 05:22
· Личное сообщение · #18

NikolayD пишет:
поставь плагин Phantom там в опциях разберёшься


ага, гляну. Он в сборке у меня есть.

NikolayD пишет:
а хрен его знает, когда кажется надо всегда перепроверять )))


сложность в том, что файлов ~16000 и пока скриптом(от Vovan666) дойдет очередь до видео, я постарею =))

NikolayD пишет:
Это я так понял игра?

Ага, экшен с элементами порно =))) На рутрекере ее перевели, но видео не смогли.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 03 марта 2011 05:29
· Личное сообщение · #19

Ну ежели с элементами порно, то там и переводить нечего ))))



Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 03 марта 2011 06:51
· Личное сообщение · #20

Так там сюжет с прохождением=)
Поищи на рутрекере BoneTown



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 03 марта 2011 10:16
· Личное сообщение · #21

А если пойти от обратного? Если для проигрывания видео используется avcodec-52.dll, почему бы не поставить бряки на ее экспортируемые функции, и как сработает смотреть откуда вызывается и что там происходит...

| Сообщение посчитали полезным: daFix

Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 03 марта 2011 21:02 · Поправил: Dazz
· Личное сообщение · #22

Vovan666
Попробую, хотя опыта мало =(

з.ы. Странно, но IDA 5.2 находит XREF на avcodec , а 5.5 - нет...

5.2


5.5




Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 04 марта 2011 04:57
· Личное сообщение · #23

Копни настройки сross references



Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 04 марта 2011 20:34
· Личное сообщение · #24

Настройки одинаковы. Дело наверное в движке IDA.

IDA 5.2 находит импорт avcodec-52.dll в секции rdata , а 5.5 в 8thSin . Хотя я в этом не разбираюсь, нахватался умных словечек =)))


 eXeL@B —› Вопросы новичков —› CreateFileA на обращение к определенному файлу.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати