Страницы:Кликните, чтобы указать произвольную страницу12далее
PRODIGY: BCryptEncrypt() ошибка STATUS_INVALID_PARAMETER = C000000d
PRODIGY
Member
Автор темы
15/27 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 23 июня 2021 17:59
Всем привет!
Пытаюсь зашифровать данные функцией CNG-API BCryptEncrypt() из библиотеки bcrypt.dll. Алгоритм шифрования нужен AES-256 в режиме GCM (счётчик Галуа). Вроде всё делаю согласно докам MSDN, но на этапе непосредственно вызова функции получаю ошибку "INVALID_PARAMETER = C000000d".

Как известно, AES-256/GCM это шифрование с аутентификацией, поэтому нужна структура "BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO" - видимо у меня проблемы с её оформлением. В то-же время обычное шифрование без Auth (например DES), функции хеширования данных и прочие работают нормально.

Перепробовал уже все варианты с этой структурой, но постоянно получаю одну и ту-же ошибку. Может кто-нибудь сталкивался в своей практике с реализацией AES-256/GCM на чистом API и знает, как можно справиться с ним? Заранее благодарю за любые советы. Вот ключевой фрагмент моего кода на ассме:

01;//------ секция данных
02.data
03pcbResult     dd  0
04ivRandom      rb  12     ;// буфер под вектор инициализации (IV)
05keyRandom     rb  32     ;// буфер под ключ AES-256/GCM
06tagBuff       rb  16     ;// сюда вернётся тег-аутентификации (МАС)
07  
08authData      db  'Prodigy12345',0   ;// 12-байт данные аутентификации
09  
10align 16
11authInfo      BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO    ;// структура заполнения
12  
13buff          db  0      ;// буфер под данные для шифрования
14  
15;//------ секция кода
16.code
17start:  
18  
19;// здесь получаем дескриптор поставщика AES-256/GCM,
20;// и дальше сбрасываем в буферы рандомные IV и ключ:
21  
22         invoke  BCryptGenRandom,0,ivRandom,12,BCRYPT_USE_SYSTEM_PREFERRED_RNG
23         invoke  BCryptGenRandom,0,keyRandom,32,BCRYPT_USE_SYSTEM_PREFERRED_RNG
24  
25;// получить в переменную "aesKeyHndl" дескриптор симметричного ключа шифрования AES:
26  
27         invoke  BCryptGenerateSymmetricKey,[aesAlgHndl],aesKeyHndl,0,0,keyRandom,32,0
28  
29;// заполняем структуру "BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO":
30  
31         mov     [authInfo.pbNonce],ivRandom
32         mov     [authInfo.cbNonce],12
33         mov     [authInfo.pbAuthData],authData
34         mov     [authInfo.cbAuthData],12
35         mov     [authInfo.pbTag],tagBuff
36         mov     [authInfo.cbTag],16
37  
38;// первый вызов, чтобы получить размер шифруемых данных:
39  
40         invoke  BCryptEncrypt,[aesKeyHndl],buff,[passLen],authInfo,0,0,\
41                               0,0,pcbResult,0
42  
43;// второй вызов - попытка зашифровать данные:
44  
45         invoke  BCryptEncrypt,[aesKeyHndl],buff,[passLen],authInfo,0,0,\
46                               buff,[pcbResult],pcbResult,0
47  
48;// здесь получаю ошибку "STATUS_INVALID_PARAMETER = C000000d"
vertur
Member
5798/8851 ответов, #5 в рейтинге
16 лет на iXBT, с марта 2008
Чаще пишет в "Программирование" (52%)
Гондурас, default city
Инфо Ответить
v
vertur Member
4 года назад / 23 июня 2021 22:16
PRODIGY

1mov     [authInfo.pbNonce],ivRandom
Вектор инициализации (iv) передается в параметрах функции BCryptEncrypt, а параметр nonce - это соль, совсем другое.
Соль свертывается с ключом, а вектор инициализации со входными данными. Соль должна быть случайной, а вектор должен быть известен при расшифровке.

Но это все фигня. причина ошибки - неправильно инициализированая структура BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO, а более конкртено - нулевое значение в поле cbSize.
PRODIGY
Member
Автор темы
16/28 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 24 июня 2021 06:16
vertur

а более конкретно - нулевое значение в поле cbSize
Спасибо, но я забыл сказать, что структура оформлена корректно. Сначала думал, что ошибка на MSDN в размерах её полей, поэтому запустил отладчик WinDbg и командой "dt" получил её валидное содержимое - все размером DWORD, кроме поля "cbData" размером longlong (т.е. 8-байт):

01lkd> dt _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO
02uxtheme!_BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO
03   +0x000 cbSize           : Uint4B
04   +0x004 dwInfoVersion    : Uint4B
05   +0x008 pbNonce          : Ptr32 UChar
06   +0x00c cbNonce          : Uint4B
07   +0x010 pbAuthData       : Ptr32 UChar
08   +0x014 cbAuthData       : Uint4B
09   +0x018 pbTag            : Ptr32 UChar
10   +0x01c cbTag            : Uint4B
11   +0x020 pbMacContext     : Ptr32 UChar
12   +0x024 cbMacContext     : Uint4B
13   +0x028 cbAAD            : Uint4B
14   +0x030 cbData           : Uint8B
15   +0x038 dwFlags          : Uint4B
Ещё советуют не устанавливать размер структуры и версию вручную, а обязательно через макрос "BCRYPT_INIT_AUTH_MODE_INFO". В хидере bcrypt.h есть описание этого макроса, который выглядит так:

1BCRYPT_INIT_AUTH_MODE_INFO(_AUTH_INFO_STRUCT_) \
2   RtlZeroMemory((&_AUTH_INFO_STRUCT_), sizeof(BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO));\
3  (_AUTH_INFO_STRUCT_).cbSize = sizeof(BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO);\
4  (_AUTH_INFO_STRUCT_).dwInfoVersion = BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO_VERSION;
т.е. он сначала обнуляет все поля, после чего заносит в указанное вами поле "cbSize" размер структуры (sizeof), и дальше версию, которая равна 1. Я всё сделал так-же: выравнил её в памяти на 16-байт границу и записал всё то-же самое вручную:

01struct BCRYPT_AUTH_CIPHER_MODE_INFO
02   cbSize          dd   sizeof.BCRYPT_AUTH_CIPHER_MODE_INFO
03   dwInfoVer       dd   BCRYPT_AUTH_CIPHER_MODE_INFO_VERSION
04   pbNonce         dd   0   ;// линк на буфер, содержащий IV/nonce.
05   cbNonce         dd   0   ;// размер буфа
06   pbAuthData      dd   0   ;// линк на данные-аутентификации
07   cbAuthData      dd   0   ;//
08   pbTag           dd   0   ;// линк на код-аутентификации
09   cbTag           dd   0   ;//
10   pbMacContext    dd   0   ;// линк на буфер для МАС, (только при связанном вызове)
11   cbMacContext    dd   0   ;//
12   cbAAD           dd   0   ;// AAD (только при связанном вызове)
13   cbData          dq   0   ;// длина данных полезной нагрузки (8-байт, только при связанном вызове)
14   dwFlags         dd   0   ;// флаг заполнения
15ends
И на счёт IV/nonce... В данном случае это вроде идентично, нет? По крайней мере во-всех примерах, которые мне удалось найти, в поле "nonce" структуры заносится указатель и размер IV.

Добавление от 24.06.2021 06:16:

Вот ссылка, на которую я ориентировался. Более существенного по теме не нашёл:
https://question-it.com/questions/2361491/kak-svjazat-vyzovy-bcryptencrypt-i-bcryptdecrypt-s-pomoschju-aes-v-rezhime-gcm

Исправлено: PRODIGY, 24.06.2021 11:40

vertur
Member
5799/8852 ответов, #5 в рейтинге
16 лет на iXBT, с марта 2008
Чаще пишет в "Программирование" (52%)
Гондурас, default city
Инфо Ответить
v
vertur Member
4 года назад / 24 июня 2021 09:39
PRODIGY

но я забыл сказать, что структура оформлена корректно
В коде этого не видно явно, а заниматься телепатией я не умею.
Кроме этого в коде нет проверок на возвращаемый результат и поэтому можно очень долго гадать что-и почему и зависимости от чего.
Может это BCryptGenerateSymmetricKey зафелилась и внутри aesKeyHndl находится мусор (или ноль как его частный случай).
PRODIGY

Вот ссылка, на которую я ориентировался.
Так какой-то набор слов машинного автоперевода что искажает смысл чуть менее чем полностью. Лучше прочесть оригинал.

PS:
PRODIGY

1invoke  BCryptEncrypt,[aesKeyHndl],buff,[passLen],authInfo,0,0,\
2                      buff,[pcbResult],pcbResult,0
Не думаю, что входной буфер и выходной может быть одним и тем же.
PRODIGY

1buff          db  0      ;// буфер под данные для шифрования
И собственно где буфер то ?
AES - это блочный шифр, он работает с блоками, байт не прокатит.
Нужен буфер размером хотя бы в один блок, и выходной буфер размером какой вернет первый запрос функции при условии выхода NTSTATUS = STATUS_SUCCESS
PRODIGY
Member
Автор темы
17/29 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 24 июня 2021 11:02
vertur

Кроме этого в коде нет проверок на возвращаемый результат
Все функции до последней BCryptEncrypt() возвращают ОК=0, просто я не стал выкладывать сюда всю портянку кода.
vertur

Не думаю, что входной буфер и выходной может быть одним и тем же
В замечаниях к описанию этой функции MSDN говорит, что буфер можно перезаписывать. Но я пробовал выделять и отдельный - без результата.
vertur

И собственно где буфер то ?
После "buff db 0" у меня больше нет данных, поэтому он занимает всё оставшееся пространство от 4К страницы вирт.памяти, которая выделена системой под секцию-данных. Такое часто практикуется на ассме.

Здесь есть кое-что про IV/nonce на более понятном языке. Где-то встречал, что AES/GCM реализован криво Microsoft, и советуют использовать внешнюю библиотеку Crypto++. Но хотелось-бы разобраться со встроенной, чтобы не таскать с собой лишний груз.
vertur
Member
5800/8853 ответов, #5 в рейтинге
16 лет на iXBT, с марта 2008
Чаще пишет в "Программирование" (52%)
Гондурас, default city
Инфо Ответить
v
vertur Member
4 года назад / 24 июня 2021 14:26
PRODIGY

После "buff db 0" у меня больше нет данных, поэтому он занимает всё оставшееся пространство от 4К страницы вирт.памяти...
Я предпочитаю писать чисто и явно, а именно:
1buff DB  (4096-OFFSET buff) DUP(0)
2...
3authInfo      BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO<sizeof.BCRYPT_AUTH_CIPHER_MODE_INFO, BCRYPT_AUTH_CIPHER_MODE_INFO_VERSION, ...>
4...
.. которая выделена системой под секцию-данных.
размер сегмента данных в коде не задан явно

Помимо этого в силу неразвитых телепатических способностей я могу только гадать о начальном значении в переменной passLen (которое к тому же и имеет неверное название)

Добавление от 24.06.2021 14:26:

PS: Я бы порекомендовал написать код изначально на Си, добится его работоспособности и только потом переносить на ассемблер.
Иначе используется слишком много неявных допущений и просто косяков.
PRODIGY
Member
Автор темы
18/30 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 24 июня 2021 15:59
vertur

я могу только гадать о начальном значении в переменной passLen
Я ввожу с консоли пароль для шифрования, и сохраняю его длину в этой переменной. Позже, когда первый раз вызываю BCryptEncrypt() с параметром нуль в качестве приёмного буфера, то получаю в аккурат длину своего пароля, которую передаю во-второй вызов функции. При этом первый вызов возвращает ОК, а второй "INVALID_PARAMETR".

01         mov     [authInfo.pbNonce],ivRandom
02         mov     [authInfo.cbNonce],12
03         mov     [authInfo.pbAuthData],authData
04         mov     [authInfo.cbAuthData],12
05         mov     [authInfo.pbTag],tagBuff
06         mov     [authInfo.cbTag],16
07  
08         invoke  BCryptEncrypt,[aesKeyHndl],buff,[passLen],authInfo,ivRandom,12,\
09                               0,0,pcbResult,0
10;// здесь статус ОК, и в переменной "pcbResult" получаю длину введённого пароля
11  
12         invoke  BCryptEncrypt,[aesKeyHndl],buff,[passLen],authInfo,ivRandom,12,\
13                               passBuff,[pcbResult],pcbResult,0
14         cinvoke  printf,<10,' Return code:  %x',0>,eax
15  
16;// а здесь 0xC000000d

Я всё больше склоняюсь к тому, что на моей Win7.1 х32 шифрование AES/GCM просто не реализовано, поскольку даже в хидерах Win8 нет режима "BCRYPT_CHAIN_MODE_GCM", о чём свидетельствует сравнительный анализ по этой ссылке. Вечером попробую на буке с Win10 x64, тогда станет ясно. Благодарю вас за советы!

Добавление от 24.06.2021 15:59:

Но смущает то, что режим у меня всё-таки выставляется, и такая конструкция возвращает ОК:

1invoke  BCryptOpenAlgorithmProvider, aesAlgHndl, BCRYPT_AES_ALGORITHM, 0,0
2invoke  BCryptSetProperty, [aesAlgHndl], BCRYPT_CHAINING_MODE, BCRYPT_CHAIN_MODE_GCM,30,0
vertur
Member
5801/8854 ответов, #5 в рейтинге
16 лет на iXBT, с марта 2008
Чаще пишет в "Программирование" (52%)
Гондурас, default city
Инфо Ответить
v
vertur Member
4 года назад / 24 июня 2021 17:12
PRODIGY

Я всё больше склоняюсь к тому, что на моей Win7.1 х32 шифрование AES/GCM просто не реализовано
все может быть, но код ошибки был тогда STATUS_NOT_SUPPORTED (ну или что-то в таком духе).
Впрочем если вы их не проверяете, то узнать об этом мы тоже не можем.

Добавление от 24.06.2021 17:12:

PS:
PRODIGY

Я ввожу с консоли пароль для шифрования, и сохраняю его длину в этой переменной.
Поскольку шифр блочный то и размер входного буфера должен быть кратен размеру блоков AES-256.
PRODIGY
Member
Автор темы
19/31 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 24 июня 2021 17:55
так AES в режиме GCM это-же поточный шифр, хотя так-же оперирует блоками по 16-байт.
Поэтому в описании функции говорится, что в последнем параметре флаг "BCRYPT_BLOCK_PADDING" нельзя использовать с режимами аутентифицированного шифрования AES-CCM и AES-GCM, а для остальных симметричных алгоритмов:
MSDN

BCRYPT_BLOCK_PADDING
Позволяет алгоритму шифрования дополнять данные до следующего размера блока. Если этот флаг не указан, размер открытого текста, указанного в параметре "cbInput", должен быть кратным размеру блока алгоритма.

Исправлено: PRODIGY, 24.06.2021 18:24

Lucy
Member
292/20028 ответов
18 лет на iXBT, с июня 2006
Чаще пишет в "Юмор" (50%)
Португалия, Lisbon
Инфо Ответить
Lucy Member
4 года назад / 24 июня 2021 20:13
PRODIGY
Т.е. уже не даёт ошибку?
vertur
Member
5802/8855 ответов, #5 в рейтинге
16 лет на iXBT, с марта 2008
Чаще пишет в "Программирование" (52%)
Гондурас, default city
Инфо Ответить
v
vertur Member
4 года назад / 24 июня 2021 20:24
PRODIGY
Если этот флаг не указан, размер открытого текста, указанного в параметре "cbInput", должен быть кратным размеру блока алгоритма.

Добавление от 24.06.2021 20:24:

PRODIGY

AES в режиме GCM это-же поточный шифр, хотя так-же оперирует блоками по 16-байт.
Он и во многих других режимах является поточным и это совсем никак не связано с тем что данные на вход должны поступать блоками.
PRODIGY
Member
Автор темы
20/32 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 24 июня 2021 20:35
Lucy

Т.е. уже не даёт ошибку?
В режиме GCM ошибка по-прежнему есть, но сейчас попробовал зашифровать в режиме CBC (так-же с вектором IV, но без тега аутентификации), функция возвращает ОК и на выходе получаю зашифрованный пароль. При этом алго тоже AES-256 с 16-байтным блоком, и данные на входе не кратны 16-ти. В этом режиме уже нужно выставлять флаг "BCRYPT_BLOCK_PADDING" и увеличить IV с 12 до 16-байт.

684x410, 15.3Kb
vertur
Member
5803/8858 ответов, #5 в рейтинге
16 лет на iXBT, с марта 2008
Чаще пишет в "Программирование" (52%)
Гондурас, default city
Инфо Ответить
v
vertur Member
4 года назад / 24 июня 2021 20:51
PRODIGY

В режиме GCM ошибка по-прежнему есть,
Ну так что получается если в режиме GCM подавать данные с размером кратным блоку и без флага BCRYPT_BLOCK_PADDING (по факту делать паддинг в конце потока данных вручную) ?
Lucy
Member
293/20029 ответов
18 лет на iXBT, с июня 2006
Чаще пишет в "Юмор" (50%)
Португалия, Lisbon
Инфо Ответить
Lucy Member
4 года назад / 24 июня 2021 21:12
PRODIGY
В замечаниях к описанию этой функции MSDN говорит, что буфер можно перезаписывать. Но я пробовал выделять и отдельный - без результата.

Но Вы же его не перезаписываете
выбросив первый вызов получаем:
invoke BCryptEncrypt,[aesKeyHndl],buff,[passLen],authInfo,ivRandom,12, buff,[passLen],pcbResult,0

Таким образом только 2 аргумента могут представлять ошибку 1й и/или 4й

И Вам руки поотбивать надо за прописание всех размеров буферов цифрами прямо в функции.
PRODIGY
Member
Автор темы
21/33 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 24 июня 2021 21:30
vertur

Ну так что получается если в режиме GCM подавать данные с размером кратным блоку
Ничего не получается - всё та-же ошибка.
Lucy

Таким образом только 2 аргумента могут представлять ошибку 1й и/или 4й
Первый исключено, т.к. в режиме CBC функция отрабатывает,
а на счёт 4-го сомневаюсь, о чём собственно и указал в первом посте.
И почему это нельзя прописывать размеры явно - ну запрошу я их из переменной, они в каком-то другом виде попадут чтоли?

Добавление от 24.06.2021 21:30:

кстати и на Win10 x64 тоже не фурычит, значит проблема не в оси.
Lucy
Member
294/20030 ответов
18 лет на iXBT, с июня 2006
Чаще пишет в "Юмор" (50%)
Португалия, Lisbon
Инфо Ответить
Lucy Member
4 года назад / 24 июня 2021 21:34
PRODIGY
И почему это нельзя прописывать размеры явно - ну запрошу я их из переменной, они в каком-то другом виде попадут чтоли?

Легко сделать ошибку и очень трудно читать код (другому человеку)


Вот пример, возможно, поможет:
https://web.cs.wpi.edu/~cshue/resources.html

Заметьте, там в BCRYPT_INIT_AUTH_MODE_INFO заполняются только 4 поля.

P.S.: здесь отнюдь не проблема системы
Просто код поправить - и все заработает
PRODIGY
Member
Автор темы
22/34 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 25 июня 2021 10:46
Lucy

Вот пример, возможно, поможет:
К сожалению не помог. Полностью скопировал логику из вашего примера, но всё-равно получаю ошибку "больной параметр". Уже сделал отдельный IV в параметре функции, и отдельный Nonce в структуре (как в примере), подал на вход кратные блоку AES данные, пробовал менять размеры IV/nonce в диапазоне 12..16 байт, увеличивал размеры буферов и всё остальное, что только приходило на ум. Всё в холостую..

Поскольку во-всех случаях ошибка одна, то остаётся только структура "BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO". Здесь чел тоже столкнулся с подобной проблемой, и нашёл глюк с размером этой структуры в поле "cbSize", но там х64, а у меня х86 (соответственно указатели все 4-байтные).

Ещё нашёл такую доку pdf специально для Win7 CNG, но там только общие моменты, без намёка на режим шифрования с аутентификацией CCM/GCM. Жалко, что я упёрся в тупик, ато хотелось разобраться с этим типом крипта.
Lucy
Member
295/20047 ответов
18 лет на iXBT, с июня 2006
Чаще пишет в "Юмор" (50%)
Португалия, Lisbon
Инфо Ответить
Lucy Member
4 года назад / 25 июня 2021 10:53
PRODIGY
Поскольку во-всех случаях ошибка одна, то остаётся только структура "BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO".

Надо просто сеть и все спокойно перепроверить
Скрытый текст
PRODIGY
Member
Автор темы
23/35 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 25 июня 2021 11:05
Lucy, было-бы здорово!

Чтобы уж наверняка опробовать все варианты, я даже написал такой макрос для инициализации этой структуры. Если посмотреть в отладчике, то он отрабатывает правильно - очищает всё, устанавливает в первом поле значение 38h, и во-втором версию 1. Однако профита (для кода) от него нет:

1macro     InitAuthStruct
2{         mov     edi,authInfo
3          mov     ecx,sizeof.BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO
4          push    ecx
5          xor     al,al
6          rep     stosb   ;// очистить все поля!
7          pop     eax
8          mov     [authInfo.cbSize],eax      ;// размер структуры
9          mov     [authInfo.dwInfoVer],1 }   ;// версия
Lucy
Member
296/20049 ответов
18 лет на iXBT, с июня 2006
Чаще пишет в "Юмор" (50%)
Португалия, Lisbon
Инфо Ответить
Lucy Member
4 года назад / 25 июня 2021 15:02
PRODIGY
Пример по моей ссылке работает
Будем разбираться, где у Вас ошибка
PRODIGY
Member
Автор темы
24/36 ответов
7 лет на iXBT, с августа 2017
Инфо Ответить
P
PRODIGY MemberАвтор темы
4 года назад / 25 июня 2021 15:18
Премного вам благодарен!
Интересно, а какой там размер структуры получается? ..и какой разрядности у вас система?

Добавление от 25.06.2021 15:18:

если не трудно, прикрепите рабочий файл, который вы скомпилировали - я его в отладчике прогоню.
Ваш ответ:

Нет значка Нет значка Вот тут! Лампочка Восклицание Вопрос Класс! Улыбка Злость Огорчение Поговорим? Краснею Подмигивание Ругаю ОдобряюBIUdelSxsupxsuboffsp spoilerqurlimgvideo• list1. list1 codeprecenter-hr-rusQWE→ЙЦУ
файлыочистить
Ваше имя: Авторизуйтесь Предпросмотр В полную форму
вставить выделенную цитату в окно ответа
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Страницы:Кликните, чтобы указать произвольную страницу12далее
Последние обсуждения в Конференции
23:50О степени вреда сотовой связи. Влияние сотовых телефонов на здоровье. Излучение. SAR. Моб. операторы
23:50Учим производителей как надо делать разъёмы питания (12VHPWR, ...) Видеосистема
23:49x86 против ARM и других RISC-процессоров Процессоры
23:49Расскажите кстати анекдот (только ржачный, не про Вовочку и не про Штирлица) Юмор
23:49Intel Atom и "все все все" Тех. поддержка
23:49Что творится с рынком недвижимости и как изменится цена? Общий
23:49NAS своими руками НАС
23:48Будет ли война России с Украиной? Политика
23:47Телевизоры TCL - информация и опыт использования ДК TV
23:46PC и консоли, и вновь продолжается бой Игры
23:45Выбираем бренди и коньяк. Культура употребления. Кулинария
23:45Выбор 4K/UHD медиаплеера ДК плееры
23:43Отзывы о PrivalSystems (аналог skype) Интернет
23:43Сравнение производительности современных процессоров Тесты CPU
23:42Вечер Boney M. в концертной студии "Останкино" Флуд
23:42Кубики артефакты при оцифровке с MiniDV Видеозахват
23:40Кто-то хочет в СССР? История
23:39Vision Pro - VR гарнитура от Apple MacLife
23:39Отечественные сериалы: обсуждаем, отслеживаем премьеры Кино
23:39Как вы относитесь к обязательной платной диагностике в мастерских?! Рынок
23:50Samsung Galaxy S25 Ultra уже подешевел в Китае на 135 долларов, но скидка положена не всем
23:38Межзвёздный рубеж: New Horizons приближается к границе солнечного влияния
23:31Renault может вернуться в Россию, но свой завод, на котором сейчас выпускают «Москвичи», точно не получит
23:29Ключевой модуль лунной станции Gateway готовится к финальному путешествию через Атлантику перед стартом к Луне
23:22Космический аппарат Tianwen-2 прибыл на космодром Сичан для подготовки ко встрече с астероидом и кометой
23:06iPhone 16E оказался не только дороже, чем ожидалось, но и слабее. Его GPU урезан относительно iPhone 16
23:03Физики научились «видеть» движение электронов в молекулах
22:40Сингапурские учёные синтезировали сверхпрочный материал, который в восемь раз превзошёл прочность графена
22:35GeForce RTX 5070 и RTX 5060 тоже не будут доступны с нормальными ценами? У Nvidia какие-то проблемы с чипами, и массовое производство сдвигается
22:34«Пользы от нее очень мало». Илон Маск заявил о бесполезности Международной космической станции и позвал на Марс