Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Передача параметров в библиотеку

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Передача параметров в библиотеку
Имя
Сообщение << Старые топики   Новые топики >>
Передача параметров в библиотеку - 2009-08-25 02:50:16.440000   
Dedаl

Сообщений: 32
Оценки: 0
Присоединился: 2009-08-25 02:37:07.223333
Есть несколько методов передачи параметров: registert и stdcall - основные…
Во втором случае данные записываются определённым образом в памяти а в первом - напрямую в ргистры процессора (как я понял)….
Если в качестве параметра функции dll библиотеки - передаётся пароль, то если используется первый вариант передачи параметров - его будет нельзя перехватить или оочень сложно???? или разницы нету?

Просто пишу сверх-безопасную систему БазДанных!
Post #: 1
RE: Передача параметров в библиотеку - 2009-08-25 03:23:53.710000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ключевое слово register не гарантирует, что передача параметров будет именно через регистры. Да и строку ты никогда в регистры не положишь. В языках си и си++ не существует способа передать массив (а строка - это массив) через параметры функции. Как правило передаётся указатель на строку.
register и stdcall - две разные вещи. Есть два способа передачи параметров - паскалевский (через жопу) и сишный. Разница в порядке помещения передаваемых параметров в стек и в том, кто стек будет потом чистить.

Чтобы ответить на твой вопрос укажи следующее: От какого перехвата защищаешь свой мегапароль? Тогда и о способах защиты можно будет подумать :). Есть мнение, что ты не совсем представляешь, что делаешь.

P.S. СУБД расшифровывается как система управления базами данных, а не как "система БазДанных". Есть нехорошее мнение, что с твоими знаниями (не хочу обидеть, но опят таки: программирование надо изучать постепенно) "сверхбезопастная система" будет на уровне школьной самодеятельности либо, что не менее вероятно, будет никому не нужна.
Post #: 2
RE: Передача параметров в библиотеку - 2009-08-25 03:35:04.666666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
Полный бардак в понимании вопроса.
Во-первых, насколько мне известно, ни один современный высокоуровневый язык программирования не поддерживает передачу параметров прямо через регистры. В любом случае, это моветон, так как ты намертво привязываешься к архитектуре процессора. А прикинь, что есть архитектуры, работающие через один аккумуляторный регистр, или, что даже чаще, stack-based архитектуры.
Во-вторых, stdcall - это стандартный сишный вызов подпрограммы. Как самая близкая альтернатива ему - паскалевский вызов: разница между ними только в том, в каком порядке параметры кладутся на стек.
В-третьих, если передаёшь строку, то сначала убедись, что ты передаёшь именно набор чаров, а не ссылку на строку, размещённую в оперативной памяти - опять же, во многих современных языках ты работаешь именно со ссылкой.
Ну и в четвёртых, всё это мало связано защищённостью программы. Если в серьёз заботит вопрос, то для начала почитай умные книжки на тему, а потом уже начинай писать сверх-безопасную систему. (Кстати, делай различие между базой данных и системой управления базами данных. По твоей фразе ты вообще какого-то мутанта пишешь)
Post #: 3
RE: Передача параметров в библиотеку - 2009-08-25 03:41:14.236666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
quote:

ORIGINAL: kreol
Во-вторых, stdcall - это стандартный сишный вызов подпрограммы. Как самая близкая альтернатива ему - паскалевский вызов: разница между ними только в том, в каком порядке параметры кладутся на стек.

При паскалевском вызове очисткой стека дожна заниматься вызываемая процедура, а при сишном - вызывающая.

Но к вопросу и желаниям автора это действительно не имеет никакого отношения.
Post #: 4
RE: Передача параметров в библиотеку - 2009-08-25 03:56:28.800000   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
quote:

ORIGINAL: _SaZ_

При паскалевском вызове очисткой стека дожна заниматься вызываемая процедура, а при сишном - вызывающая.

И чем это плохо? При паскалеподобном вызове в памяти программы инструкции по очистке стека будут записаны один раз - в коде подпрограммы. При сишном они будут записываться в каждом месте, где вызывается подпрограмма. Различие мелкое, но всё-таки в сторону паскалевского вызова.
Post #: 5
RE: Передача параметров в библиотеку - 2009-08-25 12:09:39.183333   
vvviperrr

Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
имхо чувак перепутал класс памяти register с методом передачи параметров в функцию fastcall (при котором компилятор ПЫТАЕТСЯ положить параметры в регистры, если это возможно). (если речь идет именно о передаче параметров в функцию, разумеется).

quote:


Просто пишу сверх-безопасную систему БазДанных!

все ясно
Post #: 6
RE: Передача параметров в библиотеку - 2009-08-25 12:45:51.530000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: kreol
И чем это плохо?


Ничем не плохо :), просто btw, как говориться.
Post #: 7
RE: Передача параметров в библиотеку - 2009-08-25 15:12:47.983333   
Dedаl

Сообщений: 32
Оценки: 0
Присоединился: 2009-08-25 02:37:07.223333
Ну начнём попорядку, заново.
Вот ссылка: http://www.interface.ru/borland/progrdelphi_p5_1.htm
Библиотека написана на Дельфи и если бегло таблица по ссылке - выглядит так:
Директива/Порядок занесения аргументов в стек/Кто отвечает за очистку стека/Передача аргументов через регистры
register/Слева направо/Подпрограмма/Да
pascal/Слева направо/Подпрограмма/Нет
cdecl/Справа налево/Вызывающая программа/Нет
stdcall/Справа налево/Подпрограмма/Нет

Из таблицы видно что: register - единственный метод передачи у которого "Передача аргументов через регистры"…
Вот собственно и вопрос… Библиотека уже существует и даже больше скажу, уже не один год эксплуатируется, НО, если всё делать на встроенном языке (очень напоминающем SQL), тогда передача закрытых даных в библиотеку не идёт, просто передаются константы, выглядит так:
——————-
AutenticR autent,pass;
TJ7ReadSync basename,TPassword From 1;
——————-
Здесь TPassword - это просто константа - которая указывает библиотеке - что во время доступа к данным использовать результат последней аутентификации…
Но если я использую не встроенный язык, а функционал, это выглядит так:
——————-
TJ7ReadMasSync_u(1,basename,TJ7PassAutentikR_u(autent,pass),60);
——————-
Получается что если с помощью отладчика или как-то - перехватить с какими параметрами я вызываю TJ7ReadMasSync_u - то можно перехватить результат аутентификации…

Вот собственно и вопрос - если использовать метод передачи параметров: register - что в Дельфи по умолчанию, и должно быть чуточку быстрее - это усложняет процесс отладки???

Что касается супер-безопасности, то уж конечно не то чт вы привыкли видеть, база зашифрована и более того шифрование является встроенным (хоть и отключаемым), как и весь защтищённый обмен даными клиент-сервер… Если вы взломаете сервер - доступ к даным вам неудастся получить так как только клиент - может декодировать зашифрованные данные. Клиенту выдаётся имя/пароль и цифровой ключ на USB-накопителе, только в связке - клиентское ПО может декодировать данные…
Кроме того есть дополнительные утилиты к БД, позволяющие контролировать целостность иавтоматически восстанавливать БД, вести лог обращений и системы управления паролями - которые предоставляют динамичсескую смену пароля базы даных (так чтобы клиенты могли получать доступ) и аннулирование цифровых ключей, если клиента надо заблокировать… (кому интересно, бегло здесь: http://ykolchurin.narod.ru/FVMas.html)

Библиотека сейчас в 2- вариантах с методом передачи параметров: register и с stdcall
Так что вопрос остаётся открытым…
Post #: 8
RE: Передача параметров в библиотеку - 2009-08-25 16:10:08.670000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Про регистры уже всё написали. Строки через ни не передаются, прими это как аксиому. Если твой пароль есть в памяти процесса - то его, при желании найдут :). Значит остаётся защищать память от внешних глаз / защищать процесс от внедрения отладчиков и пр.
Post #: 9
RE: Передача параметров в библиотеку - 2009-08-25 16:12:05.326666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Man, по твоей ссылке:
quote:


ПРИМЕЧАНИЕ

Директива register не означает, что все аргументы обязательно передаются через регистры процессора. Если число аргументов больше числа свободных регистров, то часть аргументов передается через стек.
Post #: 10
RE: Передача параметров в библиотеку - 2009-08-26 02:49:52.293333   
Dedаl

Сообщений: 32
Оценки: 0
Присоединился: 2009-08-25 02:37:07.223333
Ну если хотя бы часть пароля упадёт в регистры… думаю - это тоже не плохо :)…
Post #: 11
RE: Передача параметров в библиотеку - 2009-08-26 12:15:18.830000   
vvviperrr

Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
2Dedаl
что есть пароль? строка символов. не положится она в регистр. Ни целиком, ни частью. Указатель на строку - можно. Или ты пароль передаешь по символам, например void foo(char a, char b, char c…, char N). Не неси бред вобщем. Тебе уже все ответили
Post #: 12
RE: Передача параметров в библиотеку - 2009-08-26 13:49:40.683333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Таких программистов называют "волшебниками" :)
Post #: 13
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Передача параметров в библиотеку







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.