Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› контроль над прогой
Посл.ответ Сообщение

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

Создано: 09 июля 2007 15:51
· Личное сообщение · #1

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

ЗЫ
Дело в том, что прогу патчить нельзя (в этом случае можно было просто дописать свой код ), возможен патч в памяти, но тож не желательно , у меня есть идея юзать для этого DebugAPI, но может есть ещё какие-нить способы...




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 09 июля 2007 16:03
· Личное сообщение · #2

лоадер сделай



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

Создано: 09 июля 2007 16:08
· Личное сообщение · #3

прописать в реестр (непомню куда но куда ся мылвара пишет) dll которая будет атачиться ко всем процессам и в InitDll проверять тот ли модуль а потом делать то что надо =] не красиво, но первое что пришло в голову...
а так если прога твоя и тебе надо построить сервер/клиент локально то можно юзать WM_COPYDATA, Named Pipe или mailslot для передачи данных между процессами...

-----
Shalom ebanats!





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 09 июля 2007 16:14
· Личное сообщение · #4

Самый тупой вариант, если не использовать драйвер - это если прога выполняет функу по какому либо событию (нажатие кнопки, таймер) то сгенерить это событие. =)

-----
radio uno in ibisa ...





Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 09 июля 2007 19:11
· Личное сообщение · #5

SLV пишет:
прописать в реестр (непомню куда но куда ся мылвара пишет) dll которая будет атачиться ко всем процессам и в InitDll проверять тот ли модуль а потом делать то что надо =]

По-моему, чересчур круто.
Такой глобальности скорее всего не понадобится. Как посоветовал Ara проще всего сделать лоадер, запускающий нужный процесс и ждущий окончания распаковки.
Но здесь сложность видимо в том, каким образом инициировать вызов нужной функции. Но это уже будет зависеть от специфики проги и интересующей функции.

-----
Программист SkyNet





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

Создано: 09 июля 2007 19:14
· Личное сообщение · #6

FrenFolio пишет:
Но здесь сложность видимо в том, каким образом инициировать вызов нужной функции.

CreateRemoteThread если не используется синхронизация.




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 09 июля 2007 19:23
· Личное сообщение · #7

+гугл
rsdn.ru/article/baseserv/runcode.xml

-----
radio uno in ibisa ...




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

Создано: 09 июля 2007 21:22
· Личное сообщение · #8

> CreateRemoteThread
есть тока в nt'подобных системах если что...

-----
Shalom ebanats!




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

Создано: 09 июля 2007 22:20
· Личное сообщение · #9

Спосибо за советы, буду пробовать

Ara пишет:
лоадер сделай


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


Именно, вот в этом и сложность, как вызвать эту ф-ию (конечно со своими параметрами/аргументами, но это уже формальности ), прога написана на дельфях, нужная ф-ия вызывается в обработчике нажатия кнопки...
есть идея генерирование этого события, но тохда в выполнится весь код обработчика, а мну нужно только одну ф-ию вызвать, вот и получается

И всё же думаю с помощью драйвера это реализовать, но во жаль инфы мало, буду копать далее

SLV пишет:
есть тока в nt'подобных системах если что...

да осъ - WinXP SP2, т.е. с этим всё впорядке



Ранг: -4.4 (нарушитель)
Активность: 0.020
Статус: Участник

Создано: 09 июля 2007 22:32
· Личное сообщение · #10

SLV пишет:
есть тока в nt'подобных системах если что

А что, есть не NT подобные?




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 09 июля 2007 22:33 · Поправил: Ara
· Личное сообщение · #11

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



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

Создано: 09 июля 2007 22:47 · Поправил: alexey_k
· Личное сообщение · #12

Infernal_Terror пишет:
А что, есть не NT подобные?


хочеш сказать, что Win95,98,ME - относятся к линейки NT
у осей 9x/ME и NT (NT4, 2k,XP,2k3) разная архитектура...

Ara пишет:
Если нужно выполнить тока одну определенную процедуру - реверси прогу, определяй входные данные и делай патч проги в памяти, затем эмулируй нажатие кнопки и возвращай всё обратно.

Скорее всего так и сделаю, спосибо за совет



Ранг: -4.4 (нарушитель)
Активность: 0.020
Статус: Участник

Создано: 09 июля 2007 23:17
· Личное сообщение · #13

alexey_k пишет:
Win95,98,ME

Никогда не видел таких чудо-осей. Вы бы еще MS-DOS или спектрум вспомнили.




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 июля 2007 06:40
· Личное сообщение · #14

alexey_k пишет:
жаль инфы мало

в googl'е море инфы. Статью читал, что я дал? Находишь таблицу экспорта, ищещь свою функу, получаешь её адрес... вообщем там написано подробно. А если по кнопке, то вообще просто. Ara впринципе объяснил уже всё.

-----
radio uno in ibisa ...





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 июля 2007 06:41
· Личное сообщение · #15

Infernal_Terror пишет:
Вы бы еще MS-DOS или спектрум вспомнили.

Нехорошо забывать про такие вещи.

-----
radio uno in ibisa ...





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 10 июля 2007 07:18
· Личное сообщение · #16

В таблице экспорта ничего он не найдет - твоя статья не прокатит.




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 июля 2007 07:36
· Личное сообщение · #17

Ну там хотя бы решается этот вопрос:
FrenFolio пишет:
каким образом инициировать вызов нужной функции.

Остаётся найти адрес.

-----
radio uno in ibisa ...





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 10 июля 2007 07:45
· Личное сообщение · #18

В статье разъясняется, как вызвать функцию из чужой dll, тут же немного другое.



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

Создано: 10 июля 2007 07:52 · Поправил: alexey_k
· Личное сообщение · #19

Ara пишет:
В статье разъясняется, как вызвать функцию из чужой dll, тут же немного другое.


совершенно верно, вызов не из DLL...
хотя статья тож. полезная

ЗЫ

Infernal_Terror пишет:
ы бы еще MS-DOS или спектрум вспомнили.

будешь смеятся, но там, хде я работаю (почта россии) треть сидит в D0S, остальные - Win98,ME, ток процентов 10 - XP...



Ранг: -4.4 (нарушитель)
Активность: 0.020
Статус: Участник

Создано: 10 июля 2007 08:10
· Личное сообщение · #20

alexey_k
А на спектрум у вас работают? Или может PDP11 еще где-то используется?

Имхо не стоит заботиться о совместимости программ с осями старее win2000. Если кто еще ими пользуется, то это его проблемы.



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

Создано: 10 июля 2007 08:34
· Личное сообщение · #21

Infernal_Terror пишет:
Имхо не стоит заботиться о совместимости программ с осями старее win2000. Если кто еще ими пользуется, то это его проблемы.


Дело в том, что железо очень старое, есть напр. раритеты как Pentium 133, 32 MB RAM, 700 MB HDD, PCI-VGA Trio 3D....



Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 10 июля 2007 11:12
· Личное сообщение · #22

Я обычно беру системную dll которую импортирует прога
Цепляю к её импорту свою прогу (копия в тойже дир. что и прога)
( в маиндлл свой код.)
В итоге мою длл грузит распаковщик.

P.S. Я пока не встечал пакер который сначала импорт делает а потом распаковку . всегда наоборот.



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

Создано: 10 июля 2007 11:31
· Личное сообщение · #23

SWR пишет:
В итоге мою длл грузит распаковщик.


ты чуть не понял, прога не упакована, чистый Delphi код, а патчить нельзя, т.к. она обновляет постоянно БД из инета, а там (в файлах обновления) прописан MD5-хэш файла, если не совпадёт, то обновлятся не будет, это типа защиты от вирей, походу...




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 10 июля 2007 11:41
· Личное сообщение · #24

о, дык подмени мд5 в апдейтах =)



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

Создано: 10 июля 2007 11:52 · Поправил: alexey_k
· Личное сообщение · #25

Ara пишет:
о, дык подмени мд5 в апдейтах =)


получается, нужно писать прогу, которая будет ловить апдейты и подменять хэш...




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 10 июля 2007 12:03
· Личное сообщение · #26

Угу. Дык это будет проще. Можешь даже перехватить момент окончания апдейтов и дописать код туда, вызов длл например, которая сама пофиксит мд5 в апдейтах.



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

Создано: 10 июля 2007 13:53
· Личное сообщение · #27

во скорее так и сделаю, спасибо


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


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