4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54

Перехват и изменение передаваемой с СОМ порта во внешнюю программу информации

25.10.2014, 21:45. Показов 7741. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Возникла необходимость написать прогу для того, чтобы изменять данные посылаемые внешней программе с СОМ порта. Так сказать обмануть эту самую внешнюю программу. Эта программа считывает данные с СОМ порта и отображает их в виде числа. Цель - перехватить данные, изменить их и отослать программе в измененном виде, естественно, что она знать об этом не должна. Может есть идеи как это реализовать от постройки алгоритма до написания кода?

Добавлено через 5 часов 42 минуты
Концепция создаваемой программы также содержит полную скрытность не только во время работы (в идеале портбл версия), но и абсолютная "чистота" после. Пробовал сторонними программами решить эту задачу, но функционально схожей не нашел. А использование нескольких обладающих разными функциями сложно спрятать и вообще использовать. Никто не сталкивался с похожей задачей? С СОМ портом, вообще, работал кто-нибудь настолько серьезно, чтобы хоть как-то направить мои мысли в нужном направлении?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2014, 21:45
Ответы с готовыми решениями:

Где найти программу чтения из СОМ порта?
Нужна программа, читающая из СОМ порта и записывающая прочитанное в файл. Можно ехе. Где можно найти?

Как отладить программу для чтения данных из сом порта?
Примеров на форуме достаточно, есть от чего оттолкнуться, у меня другой вопрос, чем можно имитировать поступление данных на сом порт с...

Методы кодирования информации с целью повышения надежности передаваемой информации
Необходимо разработать приложение, с помощью которого можно закодировать информацию. Среда разработки -Visual studio. Язык программирования...

15
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
25.10.2014, 22:24
Самый простой способ: внедриться в процесс, похукать CreateFile/ReadFile/WriteFile
(плюс, вероятно, некоторые другие функции) и получать трафик, идущий через
COM-порт.
0
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
25.10.2014, 23:27  [ТС]
Хакнуть процесс... это интересно!.. Такой вариант даже не рассматривал. Правда я не знаю предусмотрел ли девелопер защиту на такой случай или нет?.. Можно очень долго промудиться пытаясь изменить трафик, а программер, возможно, намеренно использовал сложный алгоритм вычисления с кучей переменных, чтобы непонятно было какой именно трафик ожидает программа и как его интерпретирует. Тогда у меня уйдут месяцы на расшифровку. Но за идею спасибо! Надо покопать в этом направлении тоже.

Думал уже и про написание драйвера, но как известно это процесс ужасно сложный, да и "пропалит" всю контору!

В идеале нужно что-то вроде программы туннеля. На входе данные с физического СОМ порта, на выходе виртуальный СОМ порт, а в промежутке обработчик данных, желательно с удобным интерпретатором данных.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
25.10.2014, 23:50
Цитата Сообщение от Outwork Посмотреть сообщение
сложный алгоритм вычисления с кучей переменных
Какая тут связь с трафиком?
И какая разница в плане обработки как он получен - через хук или напрямую из СОМ?
Цитата Сообщение от Outwork Посмотреть сообщение
На входе данные с физического СОМ порта, на выходе виртуальный СОМ порт
А это ну никто не заметит)
0
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
26.10.2014, 00:10  [ТС]
Цитата Сообщение от FIL Посмотреть сообщение
Какая тут связь с трафиком?
И какая разница в плане обработки как он получен - через хук или напрямую из СОМ?
Я имел ввиду, что не знаю в каком формате передавать программе данные, чтобы она их правильно интерпретировала.
Цитата Сообщение от FIL Посмотреть сообщение
А это ну никто не заметит)
По крайней мере не оставит следов. Если правильно удалить виртуальный порт и очистить логи ОС.

Алгоритм мне видится простым (на уровне планирования конечно) перед запуском внешней программы я запускаю свою, которая подключается к СОМ порту и ждет когда к нему обратится внешняя программа. Далее запускаю внешнюю программу, которая ничего не подозревая подключается к виртуальному порту. Дальше и так понятно.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
26.10.2014, 00:20
Цитата Сообщение от Outwork Посмотреть сообщение
не знаю в каком формате передавать программе данные
Очевидно, что в том, в котором ты их получил.
Цитата Сообщение от Outwork Посмотреть сообщение
апускаю внешнюю программу, которая ничего не подозревая подключается к виртуальному порту
А чего она к нему будет подключаться, если в ее настройках прописан реальный порт?
0
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
26.10.2014, 00:42  [ТС]
Цитата Сообщение от FIL Посмотреть сообщение
Очевидно, что в том, в котором ты их получил.
Полностью согласен, но с порта придет трафик который надо будет как-то расшифровать (читай интерпретировать), а уже потом также отформатировать и отослать в программу.
Цитата Сообщение от FIL Посмотреть сообщение
А чего она к нему будет подключаться, если в ее настройках прописан реальный порт?
Собственно я предполагал, что виртуальный порт заменит собой реальный. По крайней мере мне бы этого хотелось.
0
пофигист широкого профиля
4761 / 3197 / 861
Регистрация: 15.07.2013
Сообщений: 18,548
26.10.2014, 02:02
FIL, как-то странно видеть деловое участие модератора в теме, где ТС сказал
Цитата Сообщение от Outwork Посмотреть сообщение
Правда я не знаю предусмотрел ли девелопер защиту на такой случай или нет?
И без разницы, что уровень ТС всё равно не поможет ему понять подсказки.
0
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
26.10.2014, 02:30  [ТС]
northener, я Вас уважаемый попросил бы пройти мимо, если нет желания помочь, то не надо оффтопить!
0
пофигист широкого профиля
4761 / 3197 / 861
Регистрация: 15.07.2013
Сообщений: 18,548
26.10.2014, 02:49
Outwork, не надо меня просить пройти мимо чего-то на форуме. Если я захочу, я и так пройду мимо.
0
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
26.10.2014, 03:45  [ТС]
northener, к чему тогда лезть в разговор со своими возмущениями? Здесь люди опытом делятся, а не эмоциями!

Вы бы лучше по теме что-нибудь дельное посоветовали...
0
26.10.2014, 10:08

Не по теме:

Цитата Сообщение от northener Посмотреть сообщение
как-то странно
С таким подходом можно было бы перебанить всех, кто спрашивает про хуки и т.п.
А прослушивание СОМ само по себе не является преступлением.

0
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
29.10.2014, 23:06  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Самый простой способ: внедриться в процесс, похукать CreateFile/ReadFile/WriteFile
(плюс, вероятно, некоторые другие функции) и получать трафик, идущий через
COM-порт.
Уважаемый Убежденный, а не могли бы Вы подробнее описать процесс внедрения и отлавливания нужной информации. Я просто в такие уже дебри полез, что процесс все больше кажется невыполнимым. Вселите, если можете, в меня уверенность в обратном. Заранее спасибо.

Добавлено через 3 минуты
По сути мне надо не так много: перехватить число в реальном времени и изменить его на нужное мне. Похоже это очень сложный процесс если никто так и не предложил конкретного готового решения...
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
29.10.2014, 23:22
Внедрение в процесс:

1) Открываем процесс-жертву (OpenProcess), выделяем в нем память некоторого
размера (VirtualAllocEx) и записываем туда путь к своей dll (WriteProcessMemory).

2) Создаем в процессе удаленный поток: CreateRemoteThread.
В качестве стартовой точки передаем адрес LoadLibrary (полученный через
GetProcAddress), а в качестве аргумента - адрес буфера, выделенного в п.1.

3) Удаленный поток вызывает LoadLibrary, библиотека загружается в процесс.
Из точки входа (DllMain) ставим перехватчики на функции CreateFile,
WriteFile, ReadFile (для начала). Для перехвата можно использовать разные
библиотеки, на Delphi с этим может быть туговато, но для C/C++ их полно.
Я, например, использовал mhook, EasyHook, DiStorm и другие.
Да никто не запрещает тупо снять защиту памяти (VirtualProtect) и поставить
jmp на нужный адрес.

С этим способом могут быть проблемы, если приложение открывает COM-порт и
начинает с ним работать сразу после старта (или вообще еще на стадии
загрузки dll). Тогда можно поступить так:

1) Запускаем процесс-жертву в режиме отладки: CreateProcess + флаг DEBUG_PROCESS.

2) С помощью WaitForDebugEvents ждем события загрузки dll. Например, kernel32.dll.

3) Когда kernel32.dll загрузится, создаем в процессе удаленный поток и дальше
действуем по схеме, описанной выше. Либо можно на этой стадии пропатчить
адреса в таблице экспорта kernel32.dll, чтобы вместо CreateFile/ReadFile/WriteFile
они указывали на нужные функции. Тоже вариант, тоже несложный.

Еще один вариант: запустить свой хук (либо с помощью SetWindowsHookEx, либо с
помощью ключа реестра AppInit_DLLs), тогда dll будет автоматически подгружена в
процесс, при условии, что в нем есть user32.dll и его integrity level не выше вашего.

В общем, вешать нос еще рано, просто если тема в новинку, придется покорпеть.
0
30.10.2014, 02:09

Не по теме:

Цитата Сообщение от FIL Посмотреть сообщение
А прослушивание СОМ само по себе не является преступлением.
Прослушивание да. Но подмена информации поступающей с СОМ-порта в чужую программу это нечто иное.

0
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
07.04.2015, 05:38  [ТС]
Убежденный,
Цитата Сообщение от Убежденный Посмотреть сообщение
В общем, вешать нос еще рано, просто если тема в новинку, придется покорпеть.
Спасибо за ответ. Пробовал юзать СОМ порт пока не понял что это безнадежно (в моем случае). Пошел дальше по цепочке, пробуя разобраться в алгоритме работы программы, он примерно следующий:
1. Пользователь запускает главное приложение Main.exe
2. Main.exe запускает приложение Plugin.exe, главное окно исчезает, процесс остается в памяти
3. Plugin.exe по сути исполняемая DLL и содержит несколько экспортируемых функций, процесс Plugin.exe либо загружает свой код в память Main.exe после чего передает ему управление, либо останавливает процесс выполняя свои действия после чего возобновляет процесс. В любом случае Main.exe ждет каких-то действий. После чего главное окно Main.exe вновь появляется. Оба процесса остаются висеть в памяти. Причем Plugin.exe имеет собственное окно на котором отображаются результаты непрерывного мониторинга СОМ порта в виде цифр.
4. Main.exe в определенный момент, посредством технологии OLE автоматизации используя объект 'Plugin.ScAuto', связывается с Plugin.exe запрашивая функцию VARIANT GetNumbers([in] short sc_n, [in] short cn_n) (возвращаемое значение будет строка) и получая ответ использует его значение для внутренних операций.
Знаю даже адреса переменных в памяти содержащих полученное значение их зачем-то 7 шт. И программа не дает изменить значения по этим адресам (по крайней мере внешним программам вроде ArtMoney).

Уже весь мозг сломал как мне перехватить и изменить значение возвращаемое функцией GetNumbers.
Если есть возможность как можно более подробно и наглядно, желательно с примерами, объясните как мне это провернуть.
Буду просто безумно благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.04.2015, 05:38
Помогаю со студенческими работами здесь

Прерывание от сом порта
Читаю с порта данные, т.е. данные в буфер приходят нормально, но я наверно чет пропустил и не могу понять почему не отрабатывает прерывание...

График из СОМ порта
Доброго времени суток! Не получается решить довольно тривиальную задачу - графически отобразить данные, принимаемые из СОМ порта. За...

От СОМ-порта к OpenGL
Ещё раз здравствуйте! Проблема в следующем: с СОМ-порта поступают данные, я их обрабатываю и всё вроде ничего... НО! Если принимать...

Настройка СОМ-порта
Здравствуйте! Хотел бы попросить помощи в настройке структуры termios для правильной работы с СОМ-портом. Я честно пытался сам...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Система статов в Unity
GameUnited 20.04.2025
Статы — фундаментальный элемент игрового дизайна, который определяет характеристики персонажей, предметов и других объектов в игровом мире. Будь то показатель силы в RPG, скорость передвижения в. . .
Статические свойства и методы в TypeScript
run.dev 20.04.2025
TypeScript прочно занял своё место в системе современной веб-разработки. Этот строго типизированный язык программирования не просто расширяет возможности JavaScript — он делает разработку более. . .
Batch Transform и Batch Gizmo Drawing API в Unity
GameUnited 20.04.2025
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы. . .
Звук в Unity: Рандомизация с Audio Random Container
GameUnited 20.04.2025
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете. . .
Максимальная производительность C#: Советы, тестирование и заключение
stackOverflow 20.04.2025
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования. . . .
Максимальная производительность C#: Предсказание ветвлений
stackOverflow 20.04.2025
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять. . .
Максимальная производительность C#: Векторизация (SIMD)
stackOverflow 20.04.2025
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных. . .
Максимальная производительность C#: Процессорный кэш
stackOverflow 20.04.2025
Знакомство с внутренним устройством процессорного кэша — ключевой шаг в написании по-настоящему быстрого кода на C#. Этот слой архитектуры компьютера часто ускользает от внимания разработчиков, но. . .
Максимальная производительность C#: Введение в микрооптимизации
stackOverflow 20.04.2025
В мире разработки на C# многие привыкли полагаться на . NET Runtime, который "магическим образом" сам оптимизирует код. И часто это работает - современные JIT-компиляторы творят чудеса. Но когда речь. . .
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru