книги хакеры / журнал хакер / 072_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
m |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
e |
|
||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
А вот это мы должны получить в конечном итоге... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CryptGenKey(hProv, Algid, dwFlags, phKey) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hProv - дескриптор криптографического процесса. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AlgId - уникальный идентификатор алгоритма. Если мы создаем ключ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
для шифрования - присваиваем значение AT_KEYEXCHANGE, а если соз- |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
даем для подписи - AT_SIGNATURE. |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
dwFlags - флаги, свои для каждого алгоритма, который может быть |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
нулем, а может содержать несколько флагов (для объединения использу- |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
ются операторы OR и AND). |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Возможные значения: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CRYPT_ARCHIVABLE - ключ может быть экспортирован, пока его не |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
уничтожат функцией CryptDestroyKey(). Обычно используется для обеспе- |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
чения возможности восстановления ключей, а также для архивации базы. |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
CRYPT_CREATE_SALT - при этом флаге ключу будет автоматически |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
присвоено случайное значение. |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
CRYPT_EXPORTABLE - ключ может быть экспортирован из CSP при по- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
мощи функции CryptExportKey. Чаще всего этот флаг включают. Если его не |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
включать, то ключ будет сеансовым, то есть использовал один раз и выкинул. |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
Причем использовал только ты (или твое приложение), а не кто-то другой. |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
CRYPT_USER_PROTECTED - при установленном флаге пользователь |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
будет уведомлен, если его ключ начнет юзать кто-то другой. |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
phKey - заголовок секретного ключа. Если все проходит гладко, в него |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
записывается сгенерированный ключ. |
|
|
|
|
|
|
|
|
|
|
|
|
Мутим ключи
procedure Form1.btnOkClick(Sender: TObject); var hHashData: HCRYPTHASH;
begin
if not CryptCreateHash(MainForm.hProv, CALG_SHA, 0, 0, @hHashData) then {ошибки} {сначала попытаемся создать хэш}
if not CryptHashData(hHashData, @PasswEdit.text[1], length(PasswEdit.text), 0) then {ошибки} {если нам это удалось, представим наши данные в виде хэша и запихнем его ниже…}
if not CryptDeriveKey(MainForm.hProv, CALG_RC4, hHashData, 0, @Form1.hKey) then
{…в функцию, которая и замутит нам ключ. В случае если хоть одна функция вернет False, будем искать ошибки}.
if not CryptDestroyHash(hHash) then {ошибки} {теперь можно и убить хэш} {дальше можно вызывать функции шифрования}
В программе для создания ключей есть специальная форма (см. скриншот). Как обычно, я не стал включать сюда обработку ошибок - думаю, с этим ты справишься без меня.
Да, чуть не забыл! Содержимое текущего криптопровайдера контролируется при помощи CryptGetProvParam(hProv, hParam, hText, nSize, dwFlags).
Варианты значений hParam:
PP_ENUMALGS - алгоритмы, которые могут быть использованы, PP_VERSION - возврат версии провайдера,
hProv - имя криптопровайдера, hParam - параметры вызова функции,
hText - данные, которые необходимо обработать, nSize - их размер,
dwFlags - флаги.
Ключики-ключики, где вы?
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
|
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
ТОВАРЫ |
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
|||||
|
|
|
|
to |
BUY |
|
|
|
|
|
|
|
|
|
|
|
to |
BUY |
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
|
m |
|
w Click |
|
|
|
|
|
|
|
m |
||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
||||||
|
|
|
df |
|
n |
e |
|
В СТИЛЕ |
|
|
|
df |
|
n |
e |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ПРИСОЕДИНЯЙСЯ!X C НОВЫМ
ГОДОМ!
ЭКСКЛЮЗИВНАЯ КОЛЛЕКЦИЯ ОДЕЖДЫ И АКСЕССУАРОВ ОТ ЖУРНАЛОВ
ХАКЕР И ХУЛИГАН
* |
* Футболки, |
* Кружки, |
*×àñû |
* |
|
|
толстовки, |
зажигалки, |
и многое |
|
|||
|
|
|
||||
|
куртки, |
брелки, |
другое |
|
|
|
|
бейсболки, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|