Сейчас на форуме: rmn, exp50848 (+8 невидимых)

 eXeL@B —› Основной форум —› Перехват (мониторинг) SQL запросов к БД Access
Посл.ответ Сообщение

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

Создано: 30 апреля 2009 21:44
· Личное сообщение · #1

Есть чужая прога, которая работает с БД Access. Нужно как-то отслеживать (перехватывать) запросы которае прога посылает БД. Как это можно реализовать?



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

Создано: 01 мая 2009 02:13 · Поправил: arnix
· Личное сообщение · #2

Это зависит от того как прога подключается к базе. Вкратце - если по Jet (а скорее всего по Jet), то можно в реестре включить незадокументированную(?) фичу JETSHOWPLAN после чего все запросы будут писаться в текстовый файл в папке My Documents. Подробности - hxxp://articles.techrepublic.com.com/5100-10878_11-5064388.html
А если подключение через ODBC, то в ODBC Data Source Administrator кажется есть странчка Tracing.



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

Создано: 02 мая 2009 10:16 · Поправил: Модератор
· Личное сообщение · #3

Прога подключается через Jet 3хх. JETSHOWPLAN пробовал, но без результатно. Фишка работает при запросах из MS Access, при запросах из проги план не пишется.
Может попробовать занятся отладкой чужой проги и там найти строки с запросами? Или в памяти процесса порыться? Кто что посоветует?



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

Создано: 02 мая 2009 10:47
· Личное сообщение · #4

Fr2elancer пишет:
Кто что посоветует?


Ну да, попробуй перехватывать обращения с запросами в библиотеку Jet-a. Какие именно функи - не знаю, если кодить можешь набрось на дельфи простенький примерчик работы с Jet (компоненты ADO) и посмотри в отладчике как работает.




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 02 мая 2009 11:50 · Поправил: BaGiE
· Личное сообщение · #5

Code:
  1. 55 8B EC 83 EC 0C 56 57 FF 35
- Для Windows 2000, XP, Server 2003
Code:
  1. 55 8B EC 83 EC 0C 56 FF 35
- Для Windows Server 2008 и наверняка Vista

Можно попробовать поискать написанную выше сигнатуру в файле msjet40.dll

Я проверил на Windows 2000 SP0, Windows XP SP3, Windows Server 2003 SP2, Windows Server 2008 SP1. Такая сигнатура указывает на функу в которой по адресу [esp+$0С] передается параметр в котором находится указатель на строку запроса в UNICODE. Так что похучить эту функу и вперед

В Windows XP SP3, msjet40.dll ver. 4.0.9514.0, RVA = 00100223

ЗЫ: тулзу чтоли написать чтобы автоматом сама делала



Ранг: 25.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 02 мая 2009 13:02 · Поправил: RUNaum
· Личное сообщение · #6

На чем программа написана? Если delphi, то в 99% случая решается просто. Получаем незапакованный exe, открываем его удобным для вас редактором ресурсов, заходим в RCData, там в 50% случаев будет некий DataModule, на котором лежит куча *Query/*Table, смотрим запросы через published свойства.

В ином случае, проще всего будет открыть hex-вьювером и найти поиском основные statements: select, insert, update & etc.

Крайний вариант уже отлаживать.

Если прога дельфовая, просто выложите на обменник, постараюсь вам помочь.

---

Вариант с хуком на самом деле значительно вернее и правильнее.



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

Создано: 02 мая 2009 13:44
· Личное сообщение · #7

Прога написана на Vb6. Во время выполнения. Обращается к библиотеке ole32.dll, oleaut32.dll. Прога старая, а БД сделана на Acces 97.




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 02 мая 2009 14:10
· Личное сообщение · #8

Fr2elancer пишет:
Прога написана на Vb6. Во время выполнения. Обращается к библиотеке ole32.dll, oleaut32.dll. Прога старая, а БД сделана на Acces 97.

Она в таком случае сдается мне что юзает не ADO, а DAO а вот я там хз что и как



Ранг: 25.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 02 мая 2009 14:54
· Личное сообщение · #9

BaGiE, с чего вы взяли? Просто через OLE создаются объекты ADO, которые уже используются. Там ведь нет прямого импорта из msjet*.dll.




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 02 мая 2009 18:15 · Поправил: BaGiE
· Личное сообщение · #10

RUNaum
это просто предположение работал как то с прогой на VB6 и у которой база на Access 97. Вроде бы в те времена еще не было ADO

ЗЫ: сделал автоматизированную тулзу JetLogger для логирования запросов через MSJET.



Ранг: 25.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 02 мая 2009 22:35 · Поправил: RUNaum
· Личное сообщение · #11

BaGiE, глянул, логирование вашей тулзой работает без видимых проблем.

Уж очень AdvApiHook.pas от ms-rem'a похож на реализацию madCodeHook (madshi.net). Вплоть до некоторых мелочей, которые вообще не должны иметь ничего общего. Меня давно это смущало, сейчас в очередной раз смутился. Такое ощущение, что не мало было взято madshi из открытых сырков ms-rem'a, а в последствие закрыто.



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

Создано: 03 мая 2009 00:52
· Личное сообщение · #12

А у меня, BaGiE, Ваша прога не работает, пишет "Unable to create new process"! Попробую разобраться! Заранее спасибо!!!! Чувствую, что решение уже рядом!!!




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 03 мая 2009 09:45
· Личное сообщение · #13

Fr2elancer
Выложите уже свою чудо прожку



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

Создано: 03 мая 2009 23:54
· Личное сообщение · #14

Вот прога link_deleted_by_forum_engine/files/zuc1s7qhd Это переводчик. перевод основан на запросах к БД. Буду весьма благодарен, если Вы подскажете как перехватить ее запросы к БД.




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 04 мая 2009 12:18
· Личное сообщение · #15

Поглядел я прогу и там используется DAO 3.6. Пока не знаю как глядеть запросы, но будет время еще погляжу. Кстати в теле программы нашел единственный запрос типа SELECT WHERE и возможно там всего 1 таблица и только этот запрос и ничего более. Из dao360.dll идут некоторые вызовы в msjet40.dll но текста в параметрах не передается, может быть запросы скомпилированные. Пока не знаю.




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 04 мая 2009 20:16 · Поправил: BaGiE
· Личное сообщение · #16

Вот что еще нарыл. Пока не знаю как перехватить запросы к БД, но зато удалось отковырять саму БД. Сделана она не в совсем стандартном формате. Вернее это обычный Access97, но в заголовке файла кое-что изменено и она не открывается. Сначала я думал что может быть работать будет только через DAO и написал простенькую программу но выскакивала та же ошибка - база данных уже используется или что-то типа того и не открывалась.

В общем если брякнуть программу по адресу 1104E893 то мы остановимся на том месте когда программа подменила ворованные байты в БД на настоящие и просто копируем БД куда хотим - она становится рабочая =) Правда с паролем - но он легко брутится или удаляется чем-нибудь.

dump.ru/file/2555377
не смотрите что файл называется myphoto.rar. там лежит БД
пароль на архив - это_лоховская_защита
в архиве БД и ридми и пароль к самой БД



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

Создано: 04 мая 2009 20:52
· Личное сообщение · #17

Спасибо огромное за проделанную работу! Как я понял, Вашей тулзой JetLogger здесь не обойтись?




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 04 мая 2009 21:04 · Поправил: BaGiE
· Личное сообщение · #18

Fr2elancer пишет:
Как я понял, Вашей тулзой JetLogger здесь не обойтись?

Неа. Она работает только если прога использует ADO/ADO.NET и поставщик данных Microsoft.Jet.OLEDB.4.0

Fr2elancer
Значит в итоге требовалась сама БД? Логи хотели собирать именно для этого?

//new
Кстати а как там работает ODBC? Ядро Jet одно и то же и интересно JetLogger с прогой через ODBC работать будет? Хотя конечно что DAO, что ODBC полная фигня и щас не актуально на мой взгляд. ADO/ADO.NET рулит



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

Создано: 04 мая 2009 23:38
· Личное сообщение · #19

BaGiE пишет:
Fr2elancer
Значит в итоге требовалась сама БД? Логи хотели собирать именно для этого?

Нет, мне нужны именно запросы, что бы понять логику работы проги. Но за БД тоже спасибо!!!
Получается при использовании DAO MS Jet не используется?




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 05 мая 2009 08:32
· Личное сообщение · #20

Fr2elancer пишет:
Получается при использовании DAO MS Jet не используется?

Нет, почему же. Насколько я понял хоть через DAO, хоть через ADO если коннектимся к Access базе, то используется ядро Jet, но работает с ним как то по другому.



Ранг: 19.9 (новичок), 31thx
Активность: 0.030.01
Статус: Участник

Создано: 14 января 2012 14:10
· Личное сообщение · #21

Сори если не совсем в тему. Вопрос попутный возник. Есть база, есть клиентская часть. В базе ключевые поля пошифрованы и выглядят отак ›?ҐЙDыY®c‘єn[. Естественно в клиентской части они вполне читабельны. Можно ли как-то перехватить каким образом шифруются эти строки, расшифровать их, заменить на нужные мне значения и зашифровать обратно, чтобы програма их приняла?
Понимаю что тема древняя но все же...


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


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