Ключ защиты из USB накопителя для 8.3

Ключ защиты конфигурации из обычной USB-флешки для платформы 8.3. Можно внедрить на любой конфигурации, и ключик не привязывается к определенному рабочему месту.

Реализовано в Такси.

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

Пришлось разбираться самому, и вот что вышло.

1. Что необходимо.

— USB  накопитель любого объема;

— внешняя компонента USBInfo.dll (в интернете не найдете, т.к. писалась на заказ из-за недостатка опыта разработки ВК);

— обработка для создания ключа защиты (есть в архиве);

— конфигурация с внедренной системой (пример есть в архиве).

2. Создание ключа.

— форматируем USB накопитель и присваиваем ему имя по умолчанию «1CKEY», если не нравится, можно другое, но придётся поменять в коде в одном месте;

— регистрируем USBInfo.dll, можно через командную строку, можно через батник в папке с dll-кой, не забываем про права администратора;

— открываем обработку «СоздатьКлючЗащиты.epf» в любой конфигурации, указываем путь к USB-накопителю, просто букву тома. Нажимаем кнопку создать. Обработка с помощью dll-ки получает всю необходимую информацию о USB-носителе, обрабатывает её, формирует текст и сохраняет его в txt файл в корне накопителя под именем «lic.lic» (также можно задать любое имя и расширение для файла, но надо исправить в коде в двух местах).

— что получаем в файле? В файл у нас записывается информация о накопителе: серийный номер, VID и PID. Как стало известно в ходе реализации, что у USB накопителя «два серийных номера». Этого я раньше не знал, т.к. далек от железа, первый тот, что вшит производителем, а второй тот, который присваивает виндовс, и на разных ПК он частенько отличается, а так как нам необходимо использовать на любом ПК, то второй номер не рассматриваем. Итак, в файл у нас записана информация, которая будет нужна для идентификации USB накопителя как ключа защиты/

Человеку, который далек от программирования, думаю, не сразу будет понятно, что тут записано, а тем, кто разбирается, думаю, объяснять не придётся.

— На этом создание ключа закончено.

3. Как работает в конфигурации?

— В архиве пример конфигурации и отдельно обработка.

— В процедуру «ПриНачалеРаботыСистемы», также можно в любую, какую хотите, вставляем:

Процедура ПриНачалеРаботыСистемы (Отказ)
ОткрытьФорму("Обработка.ПроверитьНаличиеКлючаЗащиты.Форма.Форма");
КонецПроцедуры 

— При открытии обработка по имени «1CKEY» ищет USB накопитель (также, если есть желание, можно убрать привязку к названию флешки), если накопитель найден, идет чтение файла «lic.lic», если он есть, естественно. Файл прочитан.

— Далее с помощью dll-ки получаем информацию о USB накопителе (серийный номер, VID, PID) и сравниваем с тем, что в файле. Кстати, dll-ка должна быть зарегистрирована на всех ПК, где будет использоваться флешка.

— Если все удачно и все совпадает, то можно работать, если нет, то обработка завершает работу с предупреждением.

Видео, демонстрирующее работу ключа и внедрение в ЗУП (демо) 3.0

Конечно же, это не супер идеальная защита от злоумышленников и вредителей, но все же недостаточно опытных и сообразительных остановит с легкостью. Поэтому полностью не описываю процесс формирования файла и т.п. В данный момент используется в двух организациях, естественно, там она доработана и повышена защита. Здесь же представлено основное, от чего отталкиваться, а далее фантазия.

В планах реализовать защиту от удаления/копирования/чтения файла с информацией пользователем, но это пока в планах.

Если у кого-то есть какие критика/замечания/предложения/дополнения, буду рад.

П.С. Конечно же, вы можете сказать, что просто взял все отсюда  //infostart.ru/public/77203/ , но, уверяю вас, вы ошибаетесь, данную статью увидел только после реализации своей идеи, вот почему-то, когда нужно было, она мне не попалась на глаза…

Что получате в архиве:

— dll-ку, которая протестирована и работает как на Windows 7 x64/86, так и на Windows 8 x64/86;

— обработки внешние  «ПроверитьНаличиеКлючаЗащиты» и «СоздатьКлючЗащиты»;

— пустая конфигурация, пример работы.

57 Comments

  1. webester

    Я немного не понял, если пользователь прочтет эту статью, скачает эту обработку, он просто сможет сделать себе нужное количество флешек?

    Reply ↓
  2. seermak

    (0)все это (подобное) можно реализовать и без флэшки и без дилки — в модуле сеанса вклейти проверку на железо и будет вам щастье. Но, людям ищущим, всегда респект и уважуха))))

    Reply ↓
  3. davdykin

    (2) seermak, Использование к привязке к железу, на мой взгляд, не удачная идея, т.к.:

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

    2. При переносе вам придется доставать эти параметры и вшивать в конфигурацию изменяя ее, что тоже не совсем удобно, особенно если вы ставите ее на поддержку.

    А данное решение удобно, спасибо за идею и реализацию.

    Reply ↓
  4. delete

    имхо, без шифрования исходных текстов, такая защита ничего не стоит

    достаточно закомментировать вызов обработки и вы состоялись как хакер)

    Reply ↓
  5. TODD22

    У нас то же есть на работе ключи защиты. Как реализовано не знаю не смотрел принцип. Но суть в том что на флешку записывается файл-ключ.

    Если на другую флешку его скопировать то работать не будет.

    Reply ↓
  6. Naposaram

    (1) webester, ну так в файл на флешке можно запихнуть все что угодно для доп проверки, здесь в обработках прописано только минимум…

    (2) seermak, если проверять в самой 1С без внешней компоненты то нужно прописывать и хранить всю информации в конфигурации.

    (4) delete, не обязательно вызывать при старте системы, можно в другом месте и другой процедурой, обработку проверки можно также переименовать как угодно и заполировать, или вообще раскидать все по конфигурации.

    (5) TODD22, тоже самое, если скопировать то не будет работать на другой флешке.

    Reply ↓
  7. seermak

    (3) прочитайте хорошенько — автор как раз и привязывает флэшку к железу (может я чего-то не так понял) и вся проверка заключается в проверке эталонного числа, полученного ранее от этого железа и проверкой железа при начале работы…..

    Reply ↓
  8. Naposaram

    (7) seermak, да в чем то вы правы, привязываем к железу но не к жлезу компа =), что позволяет использовать данную флешку на любом ПК.

    Reply ↓
  9. davdykin

    (4) delete, Это понятно, но шифровать модуль в который залочены часть процедур основных бизнес процессов, и который проверяет данную флешку не такая проблема (Так реализована защита почти всех отраслевых решений)

    Reply ↓
  10. davdykin

    В данном способе смущает только одно — использование dll, т.к. могут быть проблемы при обновлении на следующую версию системы или на конкретной клиентской машине, а dll это черный ящик, без возможности корректировки и отладки. Было бы интересней, если бы это было реализовано с помощью встроенного языка. Из него вызывать скриптовые языки для получения информации о железе, а с помощью средств шифрования платформы (по-моему такие есть) формировать уже хэши, но это так на вскидку :).

    Reply ↓
  11. vano-ekt

    а прошить флешку с нужным серийником разве проблема?

    Reply ↓
  12. Naposaram

    (10) davdykin, про какую версию системы говорите 1С или ОС? Пока за 6 месяцев проблем не было. А до встроенных средств платформы руки не доходят =)

    (11) vano-ekt, ну можно сменить серийник, потом сменить PID и VID флешки если получится, но можно еще придумать кучу информации которую можно запихнуить в файл…

    Reply ↓
  13. LexSeIch

    Мир этому дому!

    Идеальной защиты не существует — все зависит от стоимости ее взлома… Но иногда, достаточно иметь «защиту от дурака» — для этой цели решение вполне рабочее. Тем более предлагается готовое решение, с возможностью расширения функционала. Это может быть не только элемент защиты кода, но и, например элемент «шифрования» информации…

    Reply ↓
  14. davdykin

    (12) Я говорил о версии ОС. Просто я имею ввиду, что для всех, кроме вас, это черная коробочка, ни разобраться в ней, ни исправить, в случаи возникновения каких-либо заморочек — невозможно. И это слабое место этого решения.

    Reply ↓
  15. Naposaram

    (14) davdykin, в таком понимании согласен с вами. Но если у кого возникнут заморочки то постараемся помочь разобраться и или вместе решим =) новые заморочки новый опыт, новые знания…

    Reply ↓
  16. JesteR

    (13) LexSeIch, такую примитивную защиту можно и без флешки замутить, к чему такие сложности.

    Reply ↓
  17. Naposaram

    (16) JesteR, я критику только приветствую, можете написать какие для вас здесь сложности? или как бы вы реализовали?

    Reply ↓
  18. davdykin

    (16) JesteR, Критикуя — предлагайте, иначе смысла в вашей критике…

    Reply ↓
  19. alex_4x

    Да никто не критикует. Разработка замечательная, но как защита — она ничего не защищает.

    Применение например такое: Враги могут прийти и запустить программу. Надо как-то сделать так, чтобы если они запустят «не санционированно», то увидили другое, нежели нужно. Вот тут этот ключик проверяется, но с таким же успехом можно проверять просто наличие файла на сетевом ресурсе или по определенному URL запросу или еще кучей, просто реально кучей способов определить «все ли спокойно в Багдаде».

    Если же говорить о защите, то тут надо как-то шифровать или выносить во внешнее шифрованное хранилище сам 1С овский код.

    Reply ↓
  20. Naposaram

    (19) alex_4x,

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

    Думал и о файликах (на диске/фтп и т.п.) — но пришел к выводу, что это совсем не то, таким образом в базу зайдет любой зная пароль пользователя, ведь доступ к файлу будет всегда… А тут вытащил флешку и все, тока в конфигураторе править что бы войти…

    Если же говорить о защите, то тут надо как-то шифровать или выносить во внешнее шифрованное хранилище сам 1С овский код.

    Тут согласен да необходимо что то придумывать, но смотря как реализована защита у отраслевых конфигураций, там с этим на столько не замарачиваются, модуль запаролили и все.

    П.С. Может на счет отраслевых не прав, особо не смотрел как там реализовано.

    Reply ↓
  21. alex_4x

    (20) Я понимаю что обидно, но весь этот проделанный нелегкий труд — бессмысленен.

    Копайте в сторону шифрации модулей — это будет реально применимо.

    Reply ↓
  22. Naposaram

    (21) alex_4x, да вы что ни какой обиды =) наоборот только позитив от того, что вы заинтересовались, обдумали и высказали что считаете нужно… я еще раз обдумал, что сделал, в чем то лишний раз убедился в чем то понял что ошибся, в чем то заинтересовался… опыт от общения с положительно настроенным человеком, у которого нет цели оскорбить или высмеять, всегда находит место быть… =)

    Reply ↓
  23. ivanov660

    Надежнее разместить функцию проверки в сети интернет, где хранить информацию о привязке ключа к параметрам компьютера и при изменении условий сообщать о необходимости запроса лицензии.Также встречал функционал компиляции кода на удаленно.

    В типовых конфигурациях встречал проверку наличия защиты при вызове основных/базовых процедур, а не только при старте системы.В этом случае ключ возвращал определенный код, который динамически исполнялся и определял дальнейшее действие в бизнес процессе.

    Reply ↓
  24. Naposaram

    (23) ivanov660,

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

    Ну тогда для каждого компьютера нужно делать файл-ключик в отдельности… А если кто то узнает пароль пользователя и с его рабочего места войдет в базу? А тут пользователь флешку забрал и все никто не зайдет… Как по мне такой метод подходит для лицензирования конфигурации, а не для защиты от несанкционированного доступа…

    В типовых конфигурациях встречал проверку наличия защиты при вызове основных/базовых процедур, а не только при старте системы.В этом случае ключ возвращал определенный код, который динамически исполнялся и определял дальнейшее действие в бизнес процессе.

    Так же и здесь, можно впихнуть в любую часть конфигурации и как то завуалировать…

    Reply ↓
  25. vde69

    кто мешает убить защиту вот так:

    //ОткрытьФорму(«Обработка.ПроверитьНаличиеКлючаЗащиты.Форма.Форма»);

    такое под силу любому студенту….

    Reply ↓
  26. vde69

    наверно сабж можно применять не для защиты а для подписей, на флешке хранится открытый и закрытый ключ,

    при начале работы 1с копирует себе открытый ключ и идентифицирует его с конкретным пользователем, при попытке «подписать» 1с берет с флешки закрытый ключ и им шифрует данные (сразу добавляя к ним открытый ключ), то есть будет вполне надежная ЭЦП без всяких толкинов и центров выдачи сертификатов.

    конечно такая система не идеально, но лучше чем ничего 🙂

    Reply ↓
  27. Naposaram

    (25) vde69, никто не мешает… пароль от пользователя с полными правами надо беречь =) и ни кому не давать =)

    (26) vde69, угу… тоже вариант…

    Reply ↓
  28. panihinnv

    Задумка интересная, только если флешка помрет, делать новую, трата времени, да и код можно закоментировать, просто защита от дурака. Но автор молодец!

    Reply ↓
  29. Naposaram

    (28) panihinnv, Спасибо за позитив.

    Да закомментировать можно и тут надо что то придумывать… Может кто подкинет идеи?

    А если флешка помрет то новую сделать не сложно, дольше идти в магазин за новой… Я думаю если взять флешку ~256mb то создать из нее новую займет не более минуты, пробовал на 8Gb заняло 2 минуты, самое долгое форматирование… =)

    Reply ↓
  30. wolfsoft

    ИМХО, для примитивной защиты от простого юзера слишком сложно, а от «продвинутого» — слишком бесполезно, ибо «ломается» комментированием одной строки в коде.

    Reply ↓
  31. JesteR

    (17) буду честен. Сам я такое никогда не делал, не было нужды. По ссылке ниже и без флешки и dll описан один из примеров реализации:

    http://www.nashe1c.ru (с) Андрей Скляров

    Reply ↓
  32. Yimaida

    Думаю, правильно было бы рассматривать все в комплексе. Т.е. как организована работа системы.

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

    2. Нет доступа к конфигуратору (если у пользователя «»Полные права» то закомментировать нужную строчку проблем нет, хотя и займет немного времени).

    Из опыта скажу, что любая защита лучше чем ее отсутствие, т.к. правильно здесь было замечено про стоимость взлома и т.п. Думаю, что любой кто бы такое встретил при запуске и подумать бы не смог что хакинг сведется к комментированию строчки кода, как минимум ожидаешь зашифрованный модуль или модуль без поставки кода. Те кому надо (враги) придут и заберут сервер со всеми потрохами, а от обычных юзеров «защита» сойдет. Если использовать как защиту кода (конфигурации) от повторного использования, то явно не подходит.

    Reply ↓
  33. Naposaram

    (31) JesteR, спасибо за ссылку, изначально были задумки с реестром, искал примеры работы с реестром но че то не встречались и данную статью не встречал. Вечерком надо будет посмотреть внимательнее…

    (32) Yimaida, полностью согласен…

    Те кому надо (враги) придут и заберут сервер со всеми потрохами
    Reply ↓
  34. folo

    (32) Yimaida, К сожалению для настройки программы или учетной политики нужны именно права администратора.

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

    И вопрос автору — как флешка будет проверяться в случае сетевой версии с других компьютеров ?

    Лет 20 назад делал защиту по номеру диска С. Команда «VOL c: > log.log» — т.е. ответ пишем в файл и далее читаем оттуда уникальный номер диска С: на компе. Сравниваем с зашифрованным при первоначальной инсталляции.

    Вообще флешка не нужна. Но проблемы те же,нужно только в ПриНачалеРаботыСистемы добраться.

    Reply ↓
  35. Naposaram

    (34) folo, может ошибаюсь, давно права в БП не смотрел, разве роль Администратора дает право на конфигурирование?

    Reply ↓
  36. Yimaida

    (35) Думаю, возникла небольшая путаница. «Администратор» это имеется в виду для винды, а «Полные права» для 1с, а folo употребил «Администратор» вместо «Полные права».

    Reply ↓
  37. DrAku1a

    Для «простого» пользователя — и пароля как средства защиты достаточно. Лень вводить пароль? Сделайте авторизацию по AD. С настройкой автоблокировки экрана при бездействии в течении пары минут. Забыть флешку в накопителе — также просто, как и забыть заблокировать экран.

    Reply ↓
  38. GusevNA

    Можно в текстовый файл зашить какой-нибудь 1С-код, и выполнять его камандой «Вычислить» или «Выполнить».

    Можно часть кода — тогда можно без «Вычислить» или «Выполнить», поскольку Вычислить-Выполнить вроде не всех клиентах работает. Например, имя поля какой-нибудь структуры. Тогда будет, например, обычный 1С-код и имя поля структуры в переменной из файла защиты, можно сериализованное сжатое ХранилищеЗначения положить в файл защиты с разными данными или кусочками кода 1С.

    Вызывать проверку в нескольких местах.

    Тогда банальный коммент вызовов проверки защиты не прокатит, поскольку не выполнится нужный 1С-код.

    Reply ↓
  39. Naposaram

    (38) GusevNA, можно и так… можно что угодно в файлик засунуть потом вытащить и проверить или выполнить…

    Reply ↓
  40. pro1c@inbox.ru

    Лучшая защита — это трансформация данных!

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

    Неверный введенный серийник — выдаете сообщение «Программа не активирована. Купите серийный номер»

    Никакие сообщения не возникают более. Продвинутый пользователь (типа хакер) радостный фиксит данную проверку и радуется.

    Но в конфигурации, по времени и в разных местах расставлены доп. проверки, которые вылезают в самый неподходящий момент!

    Делал так не однократно, звонили мне и покупали все таки конфу, администратора (типа хакера) ругали и мучали за «коммунизм»!

    Работает такой механизм на «УРА!» и не надо никаких привязок к железу, флэшек и т.д.

    При выпуске обновлений расставляет новые капканы, наступает момент, когда проще купить или отказаться, нежели фиксить все это хозяйство!

    При этом все открыто! Найди, если хочешь!

    Как то так…

    Reply ↓
  41. Naposaram

    (40) pro1c@inbox.ru, довольно интересно, но немного не понял что значит:

    трансформация данных
    Reply ↓
  42. v3rter

    PID и VID… Допустим, закупаю я на бухгалтерию 5 одинаковых флешек под ключи, VID и PID у них, скорее всего совпадут.

    Инсайдер может узнать поставщика организации, закупить у него такую же флешку, и скорее всего, она будет с тем же VID и PID.

    Идея хорошая, но мне кажется одних PID и VID маловато будет.

    Никогда не прикручивал к 1С WMIC, но подозреваю, что посмотреть нужные данные можно и без внешней dll,

    разбором, например, выдачи консольной команды:

    wmic path Win32_USBControllerDevice

    (34) «Vоlume serial» хорошая штука, выдерживает форматирование и мало кто знает в лицо утилиты по его замене.

    Аналогичная защита была бы интересна как дополнительный слой защиты от выноса базы ушлыми сотрудниками за пределы сервера.

    Reply ↓
  43. alex_4x

    Меня вот реально интересует следующее: Умеет ли кто нибудь из тут присутствующих подменять исполняемый на форме или в модуле код ? То есть то что это возможно — я уверен, ведь этот текст просто считывается 1С-кой из бызы 1С и выполняется, значит как-то можно этот код подменить. Оператор Выполнить (КусокКода) — это не серьезно, большой кусок кода им не исполнить.

    Reply ↓
  44. v3rter

    (43) Из общих модулей и модулей объектов код можно выпиливать, в модулях форм код можно обфусцировать (пример обфускатора http://infostart.ru/public/15907/ ), можно придумать какой угодно свой динамический интерпретатор (подобные технологии были придуманы и обкатаны ещё в MSDOS-вирусах), вариантов масса.

    Сложно соблюсти баланс между простотой установки типовых обновлений на защищённую конфигурацию и сложностью выпиливания защиты.

    Reply ↓
  45. alex_4x

    (44) v3rter, Скажите пожалуйста как выпиливать код из модулей ???

    Можно примерчик обработки с выпеленным кодом (ну чтобы кнопку нажимаешь, он пишет «- привет мир!»)

    Или это надо какие-то платные и не на любой платформе работающие специальные напильники покупать ?

    Обфускация — тема зачётная. Но я хочу понять про полную подмену (в одном случае один код, в другом — полностью другой чтобы был)

    Спасибо!

    Reply ↓
  46. pro1c@inbox.ru

    (41)

    это кода ноль — становится единицей!

    когда слово «да» исправляется на «нет»

    когда к итоговой сумме прибавляется случайное число от 1 рубля до 100 рублей, например.

    т.е. защита не кричит об ошибке. ошибку видно потом, но Вы не виноваты! конфигурацию ведь — не купили!

    Reply ↓
  47. webester

    (46)То же самое что и добраться до процедуры «При открытии». То есть в какой то момент, нашли проблему. Посмотрели в коде, где косяк. Нашли косяк посмотрели какими методами реализована «зашита», проанализировали глобальным поиском конфигурацию, на похожие места.

    Reply ↓
  48. v3rter

    (45) «Выпилить» можно только в модулях конфигурации. Вот тут обсуждали детали: http://forum.infostart.ru/forum26/topic74028/

    Для тех, кому интересно: получаем консольной командой метку тома и серийный номер тома для всех подключенных флешек

    WMIC LogicalDisk WHERE «DriveType=’2′ AND Name<>’A:’ AND Name<>’B:'» GET Name, VolumeSerialNumber, VolumeName

    (на всякий случай, если будет кем-то прочтено без контекста: серийный номер отформатированного раздела, а не железа флешки)

    Reply ↓
  49. alex_4x

    (48) v3rter, Поставка без «кода» или с паролем — это блеф. Там весь код остается, его сто лет в обед через плагины и обработкой расшифровки достать можно.

    Вопрос как код полностью взять из другого источника.

    Reply ↓
  50. pro1c@inbox.ru

    (47) webester,

    модули защиты варьировать, не повторяться… расставлять в неудобных местах…

    Reply ↓
  51. Dragonim

    А что мешает использовать клиент-серверный вариант 1С с настроенным входом через домен, а уже в самом домене настраивать всё как вам угодно? Зачем лишний физический посредник? Что он даёт?

    Извиняюсь. Перечитал введение и понял что это способ защиты конфигурации, а не информации в конфигурации. Вопрос отпал.

    Reply ↓
  52. maksa2005

    Идея хорошая.(25) vde69,

    но если вы не Администратор конфигурации, то как вы попадете в неё чтобы поставить //

    Я понимаю, в файловом варианте можно взломать методом удаления паролей в файле))

    А если у вас на сервере стоит 1с. SQL. Только у админа есть доступ к конфигурации. То метод хорош.

    Reply ↓
  53. zarius

    (52)

    Метод заслуживает внимания, но, как уже тут упоминалось:

    1. хорошо бы отказаться от dll (статья для размышления)

    2. вообще уйти от локального USB, ибо зачастую НЕТ доступа у пользователя к USB (либо не должно быть)

    Reply ↓
  54. ANT721455

    Это не защита. Уберите громкое название из заголовка статьи. Вся это «котовасия» рушится при комментировании строки ОткрытьФорму(«Обработка.ПроверитьНаличиеКлючаЗащиты.Форма.Форма»)

    С аналогичным успехом можно было просто создать текстовый файлик на флешке и прописать туда что угодно…

    5 см за такое — вы меня извините — это уровень старших классов средней школы.

    Reply ↓
  55. Naposaram

    (54) Да вы прям хакер ))) Вы возможно не поняли суть и назначение.

    Reply ↓
  56. spy-83

    я вот тоже не понял сути.

    закомментировали строку проверки и все.

    1. Где закрытый код который не работает если не выполняется проверка ключа?

    2. Если я работаю на Маке? то все? метод не применить?

    А Маководов кстати становится все больше.

    Reply ↓
  57. GSA3D

    а информацию о накопителе можно и без dll вроде получить http://infostart.ru/public/17199/

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *