Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

передача параметров   Найти похожие ветки 

 
tyoma   (2004-02-14 20:09) [0]

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


 
Sam Stone ©   (2004-02-14 20:31) [1]

А чем не нравится ShellExecute("втораяпрога.экзе -пароль",др параметры) ?


 
default ©   (2004-02-14 20:33) [2]

можешь передавать пароль в зашифрованном виде


 
tyoma   (2004-02-14 22:19) [3]

ShellExecute или WinExec не нравятся тем, что:
1. Вместо второй проги враг может легко подставить свой exe-шник, который прекрасно увидит все переданные ему параметры
2. У врага может оказаться такая виндовая утилита ProcExp, которая показывает все запущенные процессы Windows вместе с их параметрами командной строки.

Так что через параметры не годится :(


 
anod ©   (2004-02-14 22:45) [4]

Я думаю, что можно либо вариант default
Либо, запускаешь второе приложение и отсылаешь ему юзерское сообщение с паролем, но сообщения тоже можно отследить


 
Gero ©   (2004-02-14 23:32) [5]

Можно создать где-то временный файл с паролем в зашифрованном виде. Считать с него пароль и удалить.


 
tyoma   (2004-02-14 23:50) [6]

anod"у: А я не понял, что в данном случае означает "вариант default"?
И насчет юзерского сообщения -- поподробнее, если не в лом?
Насчет варианта с врем файлом и т.п. -- это, конечно, детские забавы :)


 
Defunct   (2004-02-15 00:19) [7]

Передачу параметров можно осуществить с помощью SendMessage/WndProc.

В одной программе создаем процедуру которая будет отпрвлять сообщение, например такую:

procedure TForm1.Button1Click(Sender: TObject);
Var PackedLoginPW:String;
begin
PackedLoginPW := "Test Test";
SendMessage( HWND_BROADCAST, 98800, 55, Integer(PackedLoginPW));
end;


В другой программе перекрываем процедуру WndProc, например так:

TForm1 = class(TForm)
...
...
Protected
procedure WndProc(var Message: TMessage); override;
...
End;

procedure TForm1.WndProc(var Message: TMessage);
Var S:String;
begin
with Message do
If (Msg=98800) And (WParam=55) Then
Begin
S := String(Message.LParam);
Application.MessageBox(PChar(S),"Принято:",MB_OK);
End;
inherited WndProc(Message);
end;


Здесь число 98800 выступает в роли идентификатора нашего сообщения.


 
anod ©   (2004-02-15 00:28) [8]

default раньше написал что передавать зашифрованный пароль через параметр
Насчет моего варианта....
Я представляю себе примерно так
Получаешь Handle нужного окна через FindWindow
И через SendMessage посылаешь сообщение WM_USER+767
А в другом его ловишь...
Но я подумал, что это много ерундой страдать...
Ещё можно создать файл в памятиююю но тут я вообще ничего конкретного сказать не могу про доступ к нему....


 
Defunct   (2004-02-15 00:33) [9]

Естестевенно, передавайте пароль в зашифрованном виде, т.к такое сообщение можно словить другой программой.


 
Defunct   (2004-02-15 00:35) [10]

anod © (15.02.04 00:28) [8]
>Но я подумал, что это много ерундой страдать...

да это относится к этому:
>Ещё можно создать файл в памятиююю но тут я вообще ничего >конкретного сказать не могу про доступ к нему....


 
anod ©   (2004-02-15 00:37) [11]

Defunct
Навих все это, если шифровать придется все равно - легче через коммандную строку


 
Германн ©   (2004-02-15 00:47) [12]

2 Defunct (15.02.04 00:19) [7]
А стоит ли непосредственно перекрывать WndProc?
Ведь есть же в Дельфи зарезервированное слово message?


 
Defunct   (2004-02-15 00:52) [13]

anod © (15.02.04 00:37) [11]
> Навих все это, если шифровать придется все равно - легче через коммандную строку

Это собсно все, неужели много?
SendMessage( HWND_BROADCAST, 98800, 55, Integer(PackedLoginPW));

У тебя с английским как?

If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.

Одна строчка это и есть твое "все это"?


 
Defunct   (2004-02-15 00:53) [14]

Германн © (15.02.04 00:47) [12]
Я ж не говорю что надо делать именно так, просто привел один из вариантов.


 
anod ©   (2004-02-15 01:02) [15]

HWND_BROADCAST
не знал...
а что значит top-level windows
активное в данный момент?


 
Defunct   (2004-02-15 01:21) [16]

anod © (15.02.04 01:02) [15]
top-level windows - окна верхнего уровня, те которые не "прикреплены" к какому-то окну.
Например, если на форме есть панель, то окно формы получит сообщение, а окно панели - нет.


 
anod ©   (2004-02-15 01:24) [17]

Ок.

> Одна строчка это и есть твое "все это"?

А перекрытие оконной процедуры :)
Ладно, уговорил....


 
tyoma   (2004-02-15 01:27) [18]

А правильно я понимаю насчет обмена сообщениями, что в этот момент должны работать обе проги -- и передающая, и принимающая?
Т.е. передающая должна запустить принимающую, отправить ей сообщение, и потом только закрыться?

Что касается передачи пусть и зашифрованного пароля через параметра, то это -- дырка. Еще раз повторюсь, эти параметры легко отловить, а потом запустить вызываемую программу из bat-файла с этими же параметрами. И она съест их как миленькая,расшифрует пароль и т.п....


 
anod ©   (2004-02-15 01:33) [19]

Ну месседж тоже легко оловить, а потом послать его этой программе


 
Defunct   (2004-02-15 02:27) [20]

anod © (15.02.04 01:33) [19]
Все что угодно отлавливается и ломается, вопрос во времени затрачиваемом на это, и актуальности взлома. Расшифровывать параметры файла даже не будет необходимости.

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

tyoma (15.02.04 01:27) [18]
> А правильно я понимаю насчет обмена сообщениями, что в этот
> момент должны работать обе проги -- и передающая, и принимающая?
Да, правильно понимаете.

Только там одно "но", у вас возникнет вопрос об использовании общей памяти. см. CreateMailslot.

Можно обойтись без Mailslot, но тогда прийдется пересылать строку по частям, LParam - 4 байта. или по 8 байт, если задействовать еще и WParam. см. описание SendMessage.

Советую реализовать пример [7] вначале в одной программе целиком, а потом разнести в две программы и посмотреть разницу.


 
Alexander666 ©   (2004-02-15 11:59) [21]

Предлагаю почитать "Разделение данных библиотеки ДЛЛ между различными процессами" у Пачеко и Тексейры. Есть эта книга и в Интернете (я через Яндекс искал) :)))


 
Digitman ©   (2004-02-15 12:05) [22]


> Вместо второй проги враг может легко подставить свой exe-шник,
> который прекрасно увидит все переданные ему параметры


.. и "вторая прога", подставленная врагом, настолько крута. что может в шесть секунд декриптовать строку (с текстом пароля), зашифрованную заранее неизвестным врагу алгоритмом

честь и хвала такому "врагу" ! крутизна его не имеет границ !


 
Defunct   (2004-02-15 15:02) [23]

Digitman © (15.02.04 12:05) [22]
> .. и "вторая прога", подставленная врагом, настолько крута. что может в шесть секунд декриптовать строку (с текстом пароля), зашифрованную заранее неизвестным врагу алгоритмом

Тут автор tyoma (14.02.04 22:19) [3] имел ввиду немного не то что Вы подумали. Второй программой, является программа автора, естественно, если она получит параметры запуска такие же как посылает первая программа, она их расшифрует и запустится.

Автор tyoma (15.02.04 01:27) [18] пишет:
> а потом запустить вызываемую программу из bat-файла с этими же параметрами. И она съест их как миленькая,расшифрует пароль и т.п....

Так и есть, и вообще где Вы встречали, чтобы пароль передавался EXE файлу как параметр запуска? Лафа для "хакеров" ;>


 
Digitman ©   (2004-02-15 15:12) [24]


> Defunct (15.02.04 15:02) [23]


> Второй программой, является программа автора


и как это сочетается с


> 1. Вместо второй проги враг может легко подставить свой
> exe-шник



?

не вижу никакой логики


> tyoma (14.02.04 20:09)
> Одно приложение запускает другое, и потом само выключается


здесь - подробней : должно ли по твоей логике 1-е приложение, передав пароль 2-му приложению, дождаться подтверждения приема пароля 2-м приложением ?


 
Defunct   (2004-02-15 15:30) [25]

Digitman © (15.02.04 15:12) [24]
>> Второй программой, является программа автора
и как это сочетается с
> 1. Вместо второй проги враг может легко подставить свой
> exe-шник

Сочетается так:
tyoma (14.02.04 22:19) [3]
> 2. У врага может оказаться такая виндовая утилита ProcExp, которая показывает все запущенные процессы Windows вместе с их параметрами командной строки.

Думаю, особой сложности нет прочитать строку параметров запуска процесса, и подставить ее в BAT файле.

> здесь - подробней : должно ли по твоей логике 1-е приложение, передав пароль 2-му приложению, дождаться подтверждения приема пароля 2-м приложением ?

Именно об этом автор косвенно и спрашивет:
tyoma (14.02.04 20:09)
Нужно передать параметры из первого приложения во второе, причем сделать это как можно более " незаметно", т.к. один из этих параметров -- пароль (т.е. такие способы, как параметры командной строки, через файл или реестр Windows не годятся)


 
Digitman ©   (2004-02-15 15:39) [26]


> Defunct (15.02.04 15:30) [25]



> и подставить ее в BAT файле


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


 
МАКСЮХА ©   (2004-02-15 16:50) [27]

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


 
tyoma   (2004-02-15 20:54) [28]

В принципе, способ МАКСЮХИ, наверное,наиболее всеобъемлющий, но это все-таки довольно много писАть.
Я еще подумывал о таком варианте на крайняк -- первая прога передает второй пароль в закриптованном виде, а в качестве ключа используется некая строка, к-рая строится на основе системного времени (предположим, с точностью до 10 секунд). Алгоритм построения этой строки известен и вызывающему приложению, и вызываемому. Т.о. вызывающее формирует строку-ключ, криптует пароль и передает его вызываемому. Вызываемое формирует по тем же правилам строку-ключ и, если времени прошло не очень много, ключ совпадает. На основе его расшифровывам пароль -- и вперед.

Покритикуйте, плз.


 
Defunct ©   (2004-02-15 23:56) [29]

А чем не подошло:

Вызываемая передает случайный ключ Random(), вызывающей. Вызывающая шифрует пароль и отправляет вызываемой. Алгорит шифр/дешифр у обоих программ одинаковый.


 
Defunct ©   (2004-02-15 23:59) [30]

А можно и еще надежнее (по двум ключам):

Вызываемая передает случайный ключ Random(), вызывающей. Вызывающая генерирует второй случайный ключ по Random() шифрует по двум ключам пароль, и отправляет вызываемой второй ключ вместе с зашифрованным паролем. Алгорит шифр/дешифр у обоих программ одинаковый.


 
dr Tr0jan ©   (2004-02-16 01:24) [31]

Можно атомами это реализовать...


 
Tyo   (2004-02-16 10:53) [32]

Способ [30] от Defunct"а мне больше всего понравился. Побежал реализовывать. Всем спасибо!



Страницы: 1 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.019 c
14-94116
race1
2004-02-09 15:42
2004.02.29
cd cover


6-94048
Jillyusus
2003-12-22 21:29
2004.02.29
Как передать сообщение?


1-93999
zamkom
2004-02-16 16:02
2004.02.29
Оптимизация.


3-93765
Fom
2004-02-04 10:30
2004.02.29
Как правильно обработать onValidate?


4-94247
DelphiN!
2003-12-20 22:08
2004.02.29
Как получить caption-ы всех дочерних элементов текущего окна?