4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
Перехват и изменение передаваемой с СОМ порта во внешнюю программу информации25.10.2014, 21:45. Показов 7741. Ответов 15
Метки нет Все метки)
(
Добрый день! Возникла необходимость написать прогу для того, чтобы изменять данные посылаемые внешней программе с СОМ порта. Так сказать обмануть эту самую внешнюю программу. Эта программа считывает данные с СОМ порта и отображает их в виде числа. Цель - перехватить данные, изменить их и отослать программе в измененном виде, естественно, что она знать об этом не должна. Может есть идеи как это реализовать от постройки алгоритма до написания кода?
Добавлено через 5 часов 42 минуты Концепция создаваемой программы также содержит полную скрытность не только во время работы (в идеале портбл версия), но и абсолютная "чистота" после. Пробовал сторонними программами решить эту задачу, но функционально схожей не нашел. А использование нескольких обладающих разными функциями сложно спрятать и вообще использовать. Никто не сталкивался с похожей задачей? С СОМ портом, вообще, работал кто-нибудь настолько серьезно, чтобы хоть как-то направить мои мысли в нужном направлении?
0
|
25.10.2014, 21:45 | |
Ответы с готовыми решениями:
15
Где найти программу чтения из СОМ порта? Как отладить программу для чтения данных из сом порта? Методы кодирования информации с целью повышения надежности передаваемой информации |
Ушел с форума
![]() ![]() |
|
25.10.2014, 22:24 | |
Самый простой способ: внедриться в процесс, похукать CreateFile/ReadFile/WriteFile
(плюс, вероятно, некоторые другие функции) и получать трафик, идущий через COM-порт.
0
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
25.10.2014, 23:27 [ТС] | |
Хакнуть процесс... это интересно!.. Такой вариант даже не рассматривал. Правда я не знаю предусмотрел ли девелопер защиту на такой случай или нет?.. Можно очень долго промудиться пытаясь изменить трафик, а программер, возможно, намеренно использовал сложный алгоритм вычисления с кучей переменных, чтобы непонятно было какой именно трафик ожидает программа и как его интерпретирует. Тогда у меня уйдут месяцы на расшифровку. Но за идею спасибо! Надо покопать в этом направлении тоже.
Думал уже и про написание драйвера, но как известно это процесс ужасно сложный, да и "пропалит" всю контору! ![]() В идеале нужно что-то вроде программы туннеля. На входе данные с физического СОМ порта, на выходе виртуальный СОМ порт, а в промежутке обработчик данных, желательно с удобным интерпретатором данных.
0
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|||
26.10.2014, 00:10 [ТС] | |||
Алгоритм мне видится простым (на уровне планирования конечно) перед запуском внешней программы я запускаю свою, которая подключается к СОМ порту и ждет когда к нему обратится внешняя программа. Далее запускаю внешнюю программу, которая ничего не подозревая подключается к виртуальному порту. Дальше и так понятно.
0
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|||
26.10.2014, 00:42 [ТС] | |||
0
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
||
29.10.2014, 23:06 [ТС] | ||
Добавлено через 3 минуты По сути мне надо не так много: перехватить число в реальном времени и изменить его на нужное мне. Похоже это очень сложный процесс если никто так и не предложил конкретного готового решения...
0
|
Ушел с форума
![]() ![]() |
|
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
|
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
|
07.04.2015, 05:38 | |
Помогаю со студенческими работами здесь
16
Прерывание от сом порта График из СОМ порта От СОМ-порта к OpenGL Настройка СОМ-порта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Система статов в 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-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
|