Откройте интерфейс IPC для недокументированной программы?

У меня есть программа без документации. Мне интересно, есть ли способ узнать, есть ли у него какой-либо интерфейс для межпроцессного взаимодействия. Существуют ли какие-либо инструменты для поиска таких интерфейсов в исполняемых файлах? Мне интересно узнать что-нибудь о такой программе, например, поддерживает ли она какие-либо параметры или аргументы командной строки или что-то еще, что можно обнаружить.

В основном я использую Linux, и некоторые из программ, с которыми я хотел бы взаимодействовать, — это программы Windows, работающие через Wine. Я программирую на C и C++ и немного на Python.

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


person Harvey    schedule 23.11.2014    source источник
comment
Вы можете попробовать использовать GNU objdump как objdump -t -T для дампа таблицы символов неразрезанного файла elf.   -  person SSC    schedule 23.11.2014
comment
Это не очень хороший вопрос для SO. Аспекты Linux могут подойти для Unix и Linux, хотя они очень широки. Вы можете получить полезную информацию о программе Linux, используя strings и ldd. И я думаю, вы могли бы запустить его и использовать netstat и т. д., чтобы увидеть, открывает ли он какие-либо сокеты.   -  person PM 2Ring    schedule 23.11.2014
comment
Вы также можете использовать strace, чтобы увидеть, какие файлы он открывает и какие вызовы ОС он делает. Попробуйте ipcs -qasm до и при запуске программы - посмотрите, нет ли чего нового. Также проверьте, нет ли повышенной активности в wireshark при запуске программы.   -  person cup    schedule 23.11.2014


Ответы (2)


Обнаружение интерфейса IPC/механизмов IPC для недокументированной программы может включать в себя сбор большого количества информации различными средствами, ее объединение и сопоставление информации.

Команду ipcs можно использовать для получения информации обо всех объектах ipc. Он должен предоставлять информацию об активных в данный момент очередях сообщений, сегментах разделяемой памяти и семафорах. Это доступно как часть util-linux.

Другой вариант — найти папку shm в /proc/, чтобы просмотреть список активной в данный момент общей памяти, которая используется до и после запуска вашей программы.

FIFO — это специальные файлы, созданные с помощью mkfifo, которые можно определить по типу файла p в выводе ls-l. Кроме того, вы можете использовать параметр -p, чтобы проверить, является ли file каналом.

/proc/<pid>/fd может помочь собрать больше информации. lsof — очень удобный инструмент, который может дать вам список открытых файлов и процессов, которые их открыли. Он может отображать PID, PGID, PPID, владельца процесса, команду, выполняемую процессом, и файлы, используемые процессом.

fuser может предоставить вам список PID, которые используют определенные файлы или файловые системы.

top/htop дает вам список процессов, запущенных в вашей системе. Это может предоставить широкий спектр информации, начиная от приоритета процессов в виде NI и заканчивая использованием памяти через REM или MEM.

iotop может предоставить таблицу текущего использования ввода-вывода процессами или потоками в системе, отслеживая информацию об использовании ввода-вывода, выводимую ядром.

mpstat может указать «процент времени простоя ЦП или ЦП, в течение которого система имела необработанный запрос ввода-вывода на диск» с помощью аргумента «iowait».

strace должен перехватывать/записывать системные вызовы, вызываемые процессом, а также сигналы, полученные процессом. Strace сможет показать порядок событий и все пути возврата/возобновления вызовов.

LTTng представляет собой комбинацию функций kprobes, tracepoint и perf, которые могут помочь в отслеживании прерываний и состояний гонки.

person Karthik Balaguru    schedule 23.11.2014

Некоторые программы Windows используют DCOM для межпроцессного взаимодействия. Есть несколько программ для извлечения этого интерфейса из DLL- и EXE-файлов. В противном случае вам придется дизассемблировать программу и смотреть код напрямую, что не является тривиальным. Что касается вашего последнего вопроса: программы Windows используют систему сообщений для связи с графическим интерфейсом. Вы можете использовать sendmessage для имитации любого сообщения, например нажатия кнопки.

person Daniel    schedule 23.11.2014
comment
Можно ли использовать sendmessage для отправки сообщения другой программе? - person Harvey; 23.11.2014