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

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

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

Создано: 26 февраля 2007 23:05
· Личное сообщение · #1

Помогите самому старому новичку. Вот вижу в SoftIce где прога закачала извне инфу в память и потом с ней работает. А вот как узнать путь к этому внешнему файлу (и, естессно, сам файл), с которым она(прога) общалась и откуда взяла инфу?



Ранг: 384.1 (мудрец)
Активность: 0.250
Статус: Участник
www.int3.net

Создано: 26 февраля 2007 23:33
· Личное сообщение · #2

Как правило файл считывается с диска АПИ: ReadFile
но если ты поставишь брекпоинт на данную ф-ию, то сможешь найти только хэндл с которым она работает.
что бы определить название файла, тебе нужно использовать брекпоинты: CreateFileA или CreateFileW, в стеке ты увидишь путь к файлу

-----
Подписи - ЗЛО! Нужно убирать!




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

Создано: 27 февраля 2007 00:30
· Личное сообщение · #3

Спасибо за совет! Сейчас попробую. Но Create - создание. Почему не Open? - по тем же причинам, что и Read?




Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 27 февраля 2007 01:17
· Личное сообщение · #4

В виндахх CreateFileA рубит в большинстве случаефф, OpenFile осталась от старой винды 3.11 или типа того. Есть также NtCreateFile и int 2Eh/sysenter. Имя файла в при срабатывании бряка удобно смотреть: d esp->4.

-----
The one derivative you manage is the one I abhore (c) Slipknot




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

Создано: 27 февраля 2007 03:13
· Личное сообщение · #5

Что-то не получается... В буфере (памяти) появляется информация, явно считанная извне. То ли с DLL, то ли с файла, а может и из реестра? Ставлю бряк на чтение-запись в этот адрес. Вылетаю в SI. А откуда ты взялась в этом буфере? До того как - там было пусто. А бряк на Create так таки и не сработал. В этом месте (до момента появления данных).




Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 27 февраля 2007 04:52
· Личное сообщение · #6

> А откуда ты взялась в этом буфере?

Если сработал бряк(bpm), значит его вызвало выполнение какого-то кода в системе (DMA так не видно) - вот Sice в него и укажет (на команду/на следующую команду). В твоем случае это скорее всего код драйвера диска, копирующий данные в юзер-буфер.

> А бряк на Create так таки и не сработал.

Убедицца надо шта у тебя вообще бряки на API работают. Так как при запуске приложения стопудейно читаюцца файлы, то CreateFileA тоже должен быть. Если нет, то скорее всего у тебя XP а в нем нужно сайсу сказать что работаешь с конкретным процессом (i3here? - поправьте кто знает). Короче, добейся чтобы у тебя вообще бряки на API работали. Можно, конечна, на NtCreateFile поставить, потом спустицца... но это не для coward'офф ;)

-----
The one derivative you manage is the one I abhore (c) Slipknot




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

Создано: 27 февраля 2007 09:40
· Личное сообщение · #7

Бряки на API работают. При остановке по "bpm (адрес памяти) w" содержимое в указанном адресе становится равным определенному значению. До этого момента выхода SI по "bpx CreateFile' нет. Если пустить дальше, то останов, конечно, есть. Но это ведь уже другая история... Это значение было записано откуда-то в указанный участок памяти раньше... Причем именно в это место памяти и именно впервые, так как поиск до этого момента по всей области памяти результата не давал. А вот откуда? Как узнать? Есть ли такая возможность в SoftIce? Можно, конечно, попробовать Filemon и Regmon, но это же кошмар - они показывают МОРЕ ключей и файлов даже при установленном фильтре. И, скорее всего, это значение сидит где-то там, вне программы, не в явном виде.
Извините за занудство.




Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 27 февраля 2007 11:05
· Личное сообщение · #8

1) Не окончательно понял - у тебя _вообще_ CreateFileA, именно "A" - работает?
2) Если не работает, попробуй NtCreateFile и вообще посмотри таблицу импорта этой проги;
3) Возьми кусок своего магического буфера в момент его записи в буфер и поищи на винте файло с таким содержимым;
4) Продолжи мониторить буфер через bpm, скорее всего тот, кто соберецца поиметь его - он же и вызвал чтение его из "неизвестного источника";
5) Возможно этот буфер - часть самой проги или ее ресурсов, те его читает система при загрузке проги;
6) ...

-----
The one derivative you manage is the one I abhore (c) Slipknot




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

Создано: 27 февраля 2007 21:10
· Личное сообщение · #9

Работает именно "А", как и другие bpm "SendMessageA", например. Вопрос чайника - как посмотреть таблицу импорта? С куском содержимого попробую, но мне кажется, что в файле содержимое не в явном виде. Я уже прошерстил поиском на нахождение пары "слов" в ASCII - ничего. Но то, что где-то сидит, однозначно, так как не может быть на установочном дистрибуте. Буду мониторить дальше, постепенно обучаясь... Меня в данном случае интересует именно технология отыскания пути/имени внешнего источника информации. И Вы мне уже много чего подсказали - спасибо.




Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 27 февраля 2007 23:38
· Личное сообщение · #10

> Вопрос чайника - как посмотреть таблицу импорта?

Каким-нибудь редактором PE-файлофф или просто в FAR нажать F3/F4 и посмотреть конец файлика Хотя (seldom) бывает что по ординалу.

> нахождение пары "слов" в ASCII - ничего

Если байтики не равны 0x00 - те "читаемые", то их можно поискать в файликах на всех винтах (я использую FAR). Но если они "нечитаемые", то для таких случаефф я писал свою программку.

-----
The one derivative you manage is the one I abhore (c) Slipknot





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 28 февраля 2007 04:00
· Личное сообщение · #11

Воспользуйся файлмоном - настрой фильтр на свою прогу и он тебе покажет ВСЕ обращения к файлам этой проги.



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

Создано: 28 февраля 2007 05:27
· Личное сообщение · #12

Воспользовался и файлмоном и регмоном. Настроил фильтр на прогу и получил ВСЕ обращения - порядка 1500 строчек файлмона и много больше регмона. Поэтому и отловил Софтайсом момент появления отлавливаемой информации. А вот источник определить не могу. то ли реестр, то ли файл, то ли DLL.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 03 марта 2007 23:11
· Личное сообщение · #13

rask пишет:
А вот источник определить не могу. то ли реестр, то ли файл, то ли DLL.

Я понял, что тебя не сама работа с файлом интересует, а откуда взялось его имя ?! Это на самом деле сложный вопрос - придется ловить команды пересылки в памяти, пока не найдешь действительный источник. Т.е. после первого бряка смотришь из какой области памяти пересылают в буфер, ставишь бряк уже на эту область и перезапускаешь прогу. И так до "посинения". Основная сложность в том, что можешь попасть на буфер, который используется тысячу раз для других дел.
Вообщем переформулируй вопрос, тогда получишь помощь. На начальный вопрос лучше filemon ничего нет.



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

Создано: 04 марта 2007 10:05
· Личное сообщение · #14

И так до "посинения"... Да, так оно и получается... Меня интересует откуда берется некое СОДЕРЖИМОЕ - из файла, из регистра, из DLL? Если из файла, то его имя. Если из регистра - то ветка и ключ. Наставил бряков, вот, кажется уже и уши показались... Хвать - ан ничего опять и нет. То зависаю, то формируется окошко о "Access violation". В общем, "синею" потихоньку. Да еще со временем туго... Но зато уже кое-что стал понимать, учусь потихоньку... Уже добрался до бряков на RegOpen и RegQueryValue из advapi32.dll. Спасибо за участие и советы.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 05 марта 2007 22:06
· Личное сообщение · #15

rask пишет:
Меня интересует откуда берется некое СОДЕРЖИМОЕ

Это собственно и есть задача кракера - выяснить откуда что берется. А помочь можно только по конкретному случаю. Методы поиска две : прямая - берем подозреваемого и смотрим превратится ли он в то, что надо, или обратная - берем результат и ищем откуда он взялся. Ты напрасно выбрал вторую методу - она для новичков не годится. Точнее, я понял, что ты и результат не знаешь - так тяжело искать.
Но сам именно с этого в тяжелых случаях начинаю : просто смотрю откуда что берется - рано или поздно попадаешь на то, что нужно



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

Создано: 16 марта 2007 10:30 · Поправил: rask
· Личное сообщение · #16

Ну хорошо... Появилось подозрение, что прога работает с ключем реестра HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\... Попытался убрать его (естесс-но, со всеми предосторожностями), но на любые попытки (даже щелкнуть по нему мышью) идет сообшение, что ничего поделать нельзя - ошибка при открытии раздела. В то же время RegMon дает недвусчысленную инфу про обращение проги к этому ключу: на CreateKey - SUCCESS Access: 0x1, на QueryValue - BUFFER TOO SMALL и на это же далее - SUCCESS 66 61 66 6F 61 63 67 65 ... Ну и на CloseKey - SUCCESS. Что делать?
Конечно, может я залез не совсем туда, но хотелось бы проверить...

Нашел прошлогоднее обсуждение: http://exelab.ru/f/action=vthread&forum=5&topic=4170 (Удаление защищенного ключа в реестре) - как раз мой вариант, но ответа на вопрос КАК УДАЛИТЬ там я не увидел... Видимо, ослабел мозгами...
Всем спасибо
PS. Впрос снят. Удалил ключ с помощью RTKF (Registry Trash Keys Finder). Прога черпала инфу действительно оттуда. То есть, прога защищена с помощью EXECryptor 2+
Еще раз ВСЕМ спасибо.


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


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