Форум: "Основная";
Текущий архив: 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.017 c