Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> идентификация программ библиотеками, возможно ли? 
:(
    Опции темы
shara
Дата 26.12.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



Доброго времени суток

  Хочу чтобы написанная мною библиотека как-то идентифицировала программу которая динамически загрузила ее к себе в память. В идеале узнать полный путь к EXEфайлу или хотябы его имя... 
и если есть какие-то другие варианты - хотелось бы о них услышать


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
bra1ny
Дата 26.12.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Первое , что пришло на ум  , в вашей библиотеке при событии DLL_PROCESS_ATTACH поулчить пид процесса ( GetCurrentProcessId() ) . 
Ну а потом CreateToolhelp32Snapshot , Process32First , Process32Next.

Это сообщение отредактировал(а) bra1ny - 26.12.2008, 22:29
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
shara
Дата 26.12.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



кстати вариант, причем весьма хорош   smile 

вот только если переименовать сам екзешник, это ведь кардинально все изменит. есть ли более "точные" способы опознавания программ?   smile 

Это сообщение отредактировал(а) shara - 26.12.2008, 22:47


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
dumb
Дата 27.12.2008, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



GetModuleFileName(0.. + crc32, поиск сигнатур, итд итп - все зависит от конечной цели, которую ты не описал. конкретизируй свою "идентификацию".
PM MAIL   Вверх
shara
Дата 27.12.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



Цитата(dumb @  27.12.2008,  05:10 Найти цитируемый пост)
конкретизируй свою "идентификацию"

виноват, каюсь ...
 под идентификацией подразумеваю следующее: однажды определив екзешный файл (не важно каким способом), например мы знаем полный путь к нему, уметь в будущем, когда библиотека обрабатывает сообщение DLL_PROCESS_ATTACH, узнавать ранее обозначенный екзешник


Цитата(dumb @  27.12.2008,  05:10 Найти цитируемый пост)
GetModuleFileName(0.. + crc32
 - подсчет контрольной суммы на мой взгляд это отличная идея smile    в связи с этим хочу спросить, может ли библиотека при обработке DLL_PROCESS_ATTACH  быстро узнать СRС32 файла к которому ее подключили, или же это придется делать так сказать вручную?


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
dumb
Дата 28.12.2008, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



специальной api-функции для этого нету, посему вручную: GetModuleFileName, CreateFile, GetFileSize(если большой, то берем первые n килобайт), ReadFile, crc32, CloseHandle

если ты таким образом делаешь "привязку" к своей программе, то упаришься каждый раз crc пересчитывать...
PM MAIL   Вверх
bra1ny
Дата 28.12.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

если большой, то берем первые n килобайт

тогда можно мапить файл , как вариант.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
GoldFinch
Дата 28.12.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



зачем грузить образ из файла если он уже есть в памяти?? считайте контрольную сумму 1й секции (кода) и будет вам щастье
PM MAIL ICQ   Вверх
shara
Дата 28.12.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



dumb,  спасибо, где-то так я все это и представлял.

GoldFinch, 
а можно по подробнее, я что-то не до конца понимаю смысл сказанного...



--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
GoldFinch
Дата 28.12.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



непонятно зачем грузить в память файл если он уже загружен? мне тоже непонятно %)
или непонятно что такое секция файла и как вообще модуль располагается в памяти? так читайте документацию про PE-формат...
PM MAIL ICQ   Вверх
bra1ny
Дата 28.12.2008, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

зачем грузить образ из файла если он уже есть в памяти?

извеняйте ступил))

shara
описание PE формата
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
shara
Дата 8.1.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



за описание PE формата спасибо =)

но я как думаю, узнать PID текущего процесса, открыть его ОpenProcess'ом и читаем n-байт при помощи ReadProcessMemory. ну а дальше дело техники - подсчет CRC этих самых n-байт

вот только вопрос, откуда начинать читать файл?? (так сказать пошлите меня по адресу  smile )


  MSDN
  ReadProcessMemory Function

  BOOL WINAPI ReadProcessMemory(
    __in          HANDLE hProcess,
    __in          LPCVOID lpBaseAddress,
    __out        LPVOID lpBuffer,
    __in          SIZE_T nSize,
    __out        SIZE_T* lpNumberOfBytesRead
  );

  Parameters
  ...
  lpBaseAddress 
  A pointer to the base address in the specified process from which to read. Before any data transfer 
  occurs, the system verifies that all data in the base address and memory of the specified size is
  accessible for read access, and if it is not accessible the function fails.
  ...


думается что lpBaseAddress устанавливать в 0 безсмысленно... smile 


если правильно все понимаю про PE то меня должен интересовать DWORD ImageBase из структуры typedef struct _IMAGE_OPTIONAL_HEADER 
уже не ругайте сильно если туплю где-то

Это сообщение отредактировал(а) shara - 9.1.2009, 01:21


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
GoldFinch
Дата 9.1.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



чтобы читать свой данные своего процесса не нужно юзать ОpenProcess\ReadProcessMemory
база модуля совпадает с его хендлом

но проверять надо конечно не весь модуль, а тольк ту его часть которая не меняется, например секцию кода
секцию данных проверять само-собой бессмысленно

Это сообщение отредактировал(а) GoldFinch - 9.1.2009, 15:17
PM MAIL ICQ   Вверх
W4FhLF
Дата 9.1.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Да собственно и секция кода только по умолчанию статическая. Всё зависит от спефицики самого софта и установленного ПО на компе. 

Лично я не вижу особого смысла спускаться на такой низкий уровень, если нужна простая проверка(т.е. никто обойти её пытаться не будет), поэтому может посмотреть в сторону манифеста? Если он есть, там обычно сохраняется основная инфа о приложении и производителе, этого уже достаточно, чтобы идентифицировать, иначе завязка на конкретные цифры -- это до следующего билда exe. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
shara
Дата 9.1.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



W4FhLF,  я все таки больше склоняюсь к привязке конкретными цифрами, т.е. к вполне конкретному EXEшнику. но за идею спасибо. если не затруднит, ссылку почитать про манифест.. не доводилось с ним раньше стыкаться 


GoldFinch, 

Цитата(GoldFinch @  9.1.2009,  14:12 Найти цитируемый пост)
база модуля совпадает с его хендлом
 поподробнее пожалуйста, а то вроде все понятно а вот что конкретно писать не знаю smile 



--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.