Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.134 c
14-94118
syte_ser78
2004-02-09 14:55
2004.02.29
перевод каретки


1-93869
Nobody2004
2004-02-18 14:20
2004.02.29
Глюк DBGrid (или несинхронность указателя и подсветки)


14-94166
PaRL
2004-02-02 22:39
2004.02.29
---|Ветка была без названия|---


6-94085
Perf
2003-11-17 18:47
2004.02.29
Прога, которая ищет все компы в локальной сети


14-94150
AZ
2004-02-03 06:22
2004.02.29
Нужна помощь в расчете пенсии (Украина).





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский