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

 eXeL@B —› Вопросы новичков —› OllyDbg:: как найти загруженные в память данные
Посл.ответ Сообщение

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 июля 2009 17:57
· Личное сообщение · #1

Программа на одном этапе считывает файлы, и в том числе license.dat. Но похоже на то, что она его откладывает на потом. Сразу следом начинают считываться текстуры интерфейса итд.
Помогите пожалуйста найти место где она его проверяет.

Вот что видно в Olly:
Code:
  1.  PUSH 0C6533C Arg1 = 00C6533C ASCII "license.dat"


Если выполняю команду bp 00C6533C Olly пишет предупреждение "It looks like you are trying to set breakpoint on the data.." и программа на этом брекпоинте не останавливается.
Как мне найти место, где программа будет проверять содержимое файла?

Спасибо большое!



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 июля 2009 18:56
· Личное сообщение · #2

Сначала брякаешься на CreateFileW, потом на ReadFile и смотришь, если хендл, переданный ReadFile тот, который вернула CreateFile, то читается нужный тебе файл.

>>bp 00C6533C

а зачем на строку-то ставить бряк?



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 10 июля 2009 18:57
· Личное сообщение · #3

Как программа может остановиться на данных, куда ты пытаешься поставить бряк? Ставь железный на доступ. Хотя в данном случае, это вряд-ли поможет, здесь, скорее всего, подготовка данных для чтения файла. Больше С6533С может и не использоваться.



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 июля 2009 19:05
· Личное сообщение · #4

>> Программа на одном этапе считывает файлы

Считывает или открывает?
Хм, а если уже считанное с помощью ReadFile, то ставь мемори бряк на регион куда считалось.



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 июля 2009 20:38
· Личное сообщение · #5

Да, вы правы это была подготовка для чтения файла.
Ок, я нашел место где программа поместила данные из файла лицензии (который я создал для пробы) в стек:
Code:
  1. PUSH ECX
  2. LEA ECX,[LOCAL.15] (а что значит [LOCAL.15]?)
  3. CALL 005DAD90

И когда я стою на LEA олли пишет адрес стека.
Stack address=0012ECB4
ECX=0321FD68
И в стеке по этому адресу видны буквы из файла

Скажите пожалуйста как теперь узнать место когда программа будет сравнивать содержимое стека по этому адресу.?



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 10 июля 2009 20:54
· Личное сообщение · #6

Wonder пишет:
Скажите пожалуйста как теперь узнать место когда программа будет сравнивать содержимое стека по этому адресу.?


Уже писали как:

or33 пишет:
Хм, а если уже считанное с помощью ReadFile, то ставь мемори бряк на регион куда считалось.


то есть breakpoint на чтение (on read)



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 июля 2009 21:29
· Личное сообщение · #7

Спасибо! кажется нашел нужное место, и количество BytesToRead совпадает

Code:
  1. PUSH EDX                                           ; |BytesToRead
  2. MOV EAX,[LOCAL.13]                            ; |
  3. PUSH EAX                                           ; |Buffer
  4. MOV ECX,[LOCAL.12]                            ; |
  5. PUSH ECX                                           ; |hFile
  6. CALL DWORD PTR DS:[<&KERNEL32.Rea>  ; \ReadFile
  7. TEST EAX,EAX
  8.  JNZ SHORT 3D-CoatD.00AD2950
  9. MOV EDX,[LOCAL.12]
  10.  PUSH EDX                                          ; /hObject
  11. CALL DWORD PTR DS:[<&KERNEL32.Clo>   ; \CloseHandle


Только незнаю где смотреть регион куда считалось



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 10 июля 2009 21:47 · Поправил: SVLab
· Личное сообщение · #8

LOCAL.15 - имя локальной переменной, которое подставляет Оля вместо аргумента типа EBP-X.
X(hex) = 15(dec)*4 = 3C

Ну так третья строка PUSH EAX



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 июля 2009 00:06
· Личное сообщение · #9

Я поставил туда бряк memory on acces но он ведет в ntdll




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 11 июля 2009 11:35
· Личное сообщение · #10

бряки на доступ вполне могут срабатывать внутри системных библиотек, особенно когда код использует API, а не обращается к данным напрямую
но в твоём случае ты мог поставить бряк на область стека, потому и вылез в недрах ntdll

-----
EnJoy!



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


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