| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Хочу привязаться к железу |
| Автор: Rapalex 29.9.2006, 16:49 |
| Давайте все поделимся друг с другом мыслями как можно привязаться к железу и кто как это делает. Но мой вопросс: как получить серийный номер винта (а не раздела который меняется приформатировании), или проца или оперативы? |
| Автор: sOckets 29.9.2006, 17:42 |
| http://www.internals.com/ | http://www.internals.com/utilities/winnt/ntdriverlist/NtDriverList.zip NtDriverList is a user-mode console application which takes advantage of the undocumented NtQuerySystemInformation API to obtain a list of loaded drivers under Windows NT. Source code is included ! Исходники на С++ , там WinAPI , думаю не трудно будет на дельфи переделать. |
| Автор: Kefir 29.9.2006, 18:18 |
| http://rsdn.ru/forum/message.aspx?mid=905667&only=1. |
| Автор: mr.DUDA 30.9.2006, 11:35 |
Отличие VolumeSerialNumber от серийника винта состоит в том, что первый назначается при форматировании раздела, и может совпадать на разных винтах. Второй - уникален для каждого винта, и получить его можно только с пом. утилиты аналогичной diskid32 (ссылку дал sOckets). |
| Автор: Kefir 30.9.2006, 12:01 |
| mr.DUDA, я просто дал ссылку на пример получения инфы о железе |
| Автор: mr.DUDA 30.9.2006, 18:43 |
Ok, а я просто заметил что, к сожалению, не всё решается штатными средствами (System.Management) З.Ы. подобную задачу пытаюсь решить в проекте, над которым работаю сейчас |
| Автор: Rapalex 11.10.2006, 16:34 |
| Так скажите как хоть какойнибудь номер железа получить при помощи средст .NET |
| Автор: mr.DUDA 11.10.2006, 16:57 |
| Можно из реестра поднять, из раздела с инфой по драйверам. |
| Автор: Rapalex 11.10.2006, 16:59 |
Это как и где? |
| Автор: mr.DUDA 11.10.2006, 17:27 |
| Да хоть тот же HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses |
| Автор: Rapalex 12.10.2006, 10:36 |
| Ключ реестра это не очень хорошо, подменить можно, да и где же тут платформенная назависимость .нет??? А другого способа что нет? Добавлено @ 10:37 Да и если всю системму завиртуалить и на другую тачку перенести думаю защита и слетает! Добавлено @ 10:39 Или необходимый рег файл перед стартом проги запускать, это не затруднительно но думаю прогу обманит! |
| Автор: mr.DUDA 12.10.2006, 11:08 |
| Rapalex, что-то я сомневаюсь в работоспособности виндовоза с "поковырянными" этими разделами. Если их только назад не возвращать сразу после старта проги. |
| Автор: Rapalex 12.10.2006, 11:14 | ||
| Я проверять не буду но что же мешает назад всё вернуть, а что мы спотрим RegMon раскажет, Но а главное Что будет если свиртулить всю системму, и при переходе на линукс? Добавлено @ 11:25
Зашол я по этому ключю и ничего не понятно! Как это можно вообще с чемто сопоставить!!! |
| Автор: Rapalex 12.10.2006, 12:36 |
| Есть ещё какие-нибудь варианты? |
| Автор: ivashkanet 12.10.2006, 13:05 |
| Rapalex, спроси у Гугла как можно защитить свою прогу от взлома, он тебе даст кучу статей, несколько из них будут очень обширные и с примерами. Возможно они быдут на ВыньАПИ и системных dll, но ничего страшного. Ведь платформенная независимость .Net --- это МИФ (если не миф, то потенциальная возможность, которая так и останется нереализованной, ИМХО) |
| Автор: Rapalex 12.10.2006, 15:00 |
Я слышал что платформа mono реализовала переход на UNIX. |
| Автор: ivashkanet 12.10.2006, 15:04 |
Да, но только первый .Net, да и то не весь Самый главный аргумент --- MS это не надо, а если этим будут заниматься сторонние компании, то они все равно будут отставать от MS |
| Автор: mr.DUDA 12.10.2006, 16:50 |
| Модератор: Давайте вернёмся к теме обсуждения. |
| Автор: Rapalex 10.2.2007, 16:33 |
| Kefir, по поводу этой ссылки http://rsdn.ru/forum/message.aspx?mid=905667&only=1 скажу - ЛАЖА, я железо не менял, систему переставлял (на висту 64) и результаты изменились, такчто я бы не рекомендовал это как идентификацию железа. sOckets, по поводу NtDriverList это я не смог собрать в студии, и както мне это не очень понравилось, да и не знаю как оно с вистой будет дружить или нет. Больше ссылок в топике небыло, я возврощаюсть после "длительного" отдыха и опять поднимаю вопросс. Хоть ктото свою мелкую но весьма полезную прогу привязывал (или покрайней мере хотел). ХЕЛП!!! |
| Автор: Xao 30.12.2007, 23:47 |
| да, мне тоже интересно, кто-нибудь решил эту проблему? mr.DUDA, а как у тебя с проектом, ты как делал? |
| Автор: mr.DUDA 31.12.2007, 17:33 |
| Привязали к идентификатору HDD, используя driveId (скомпилированную в отдельную dll, вызов функций через [DllImport]). |
| Автор: Xao 2.1.2008, 17:39 |
| mr.DUDA, а ты не мог бы выложить пример или эту длл? если да, тогда опиши плз какие параметры должны быть в функции |
| Автор: Любитель 2.1.2008, 23:32 |
| http://www.winsim.com/diskid32/diskid32.html - утилита (с исходниками на C) для получения инфы о винтах (в том числе и серйника). Выдрать нужный код, думаю, проблем не составит. А вот способ взаимодействия с ним - вопрос спорный. Просто дллка + DllImport - уж слишком легко тупо подменить. В итоге вся привязка по сути отваливается. Наиболее, на мой взгляд, удачно было бы завязать то, что касается защиты в чистый анмэнеджед (за икслючением обращения непосредственно к дотнетовским вещам), но на C++/CLI. Полученную сборочку затем слинковать с самим приложением (ilmerge). В итоге этот код выдрать будет относительно проблемно (ну, всё в итоге прогать через оббфускатор - это уж само собой...) |
| Автор: Kefir 3.1.2008, 10:50 | ||
Когда то криво написал фигнюшку.
|
| Автор: Любитель 3.1.2008, 13:18 |
| 1. Сетевухи может не быть. MAC адресса соответственно тоже. 2. ProcessorId - не есть уникальный код. С CPUID заморочка, что уникальный серийник ИМХО только у интела получить можно, и то не на всех процах. 3. Ты получаешь серйник раздела, а не самого винта. Получение серийник раздела винта - не столь тривиально (через WMI не возможно). В сорсах утилы, приведённой мною выше работает (там нэтив) через DeviceIoControl и \\.\Scsi |
| Автор: Kefir 3.1.2008, 13:50 |
| Дада, само собой, прошу обратить внимание на мою фразу: |
| Автор: mr.DUDA 3.1.2008, 14:40 |
+1 Там походу вообще дата/время создания раздела в серийник пишется AFAIK. Например если компания закупила 10 веников с отформатированными разделами, тогда будет 10 одинаковых серийников. Насчёт подмены длл - всё не так просто. Можно завязаться на содержимое длл: перед вызовом ф-ции через DllImport читать файл DLL, вычислять контрольную сумму и сравнивать с прописанной в коде проги. Если не совпадает, значит хакер Вася написал свою длл-ку. Говорим "привет Вася!" и завершаем работу. |
| Автор: Любитель 3.1.2008, 18:29 |
| mr.DUDA, в какой-то мере, конечно да, но (!) в любом случае мэнеджед код (в нормальном виде - фишки CLR Secure, скажем, делают по сути ненормальный менеджед Протос анменеджед из-под C++/CLI (т. е. внедрённый непосредственно в дотнетовский бинариник) исследовать достаточно муторно. |
| Автор: Xao 10.1.2008, 04:04 | ||||
| Народ, я пробовал выдрать то, что мне нужно отсюда http://www.winsim.com/diskid32/diskid32.html открыл проект в с++ хотел его собрать, так он стока ошибок выдает на C# еще можно было бы что-нить понять
вот например первая ошибка, что значит структура переопределена
HELP!!! |
| Автор: Xao 10.1.2008, 04:47 | ||||
с этой ошибкой разобрался, а вот такая ошибка:
в sprintf надо передавать char а в CreateFile LPWSTR пишет, что не может конвертировать |
| Автор: mr.DUDA 10.1.2008, 11:46 |
| Xao, вместо char использовать wchar_t, перед строковыми константами ставить букву L. Остальные вопросы - в раздел С++. |
| Автор: Xao 10.1.2008, 18:59 | ||||
| mr.DUDA, ты говорил, что решил проблему привязки не мог бы ты скинуть ту длл плз и если можно, то пример получения серийного номера? У меня не получается сделать dll с этих исходников :( http://www.winsim.com/diskid32/diskid32.html я вот тут нашел, но тут только с правами админа http://www.sql.ru/forum/actualthread.aspx?bid=4&tid=346957&hl= там код примера на ВБ
а вот сама dll: http://www.sql.ru/forum/actualfile.aspx?id=3231663 помогите перевести этот код на С# плз!!! я тут начал делать, но не понял что надо сделать со вторым параметром в функции
|
| Автор: mr.DUDA 10.1.2008, 23:38 |
| Сорри, сейчас этого кода у меня нет (остался на предыдущей работе)... :( |
| Автор: Xao 12.1.2008, 14:41 |
| mr.DUDA, жаль( а ты не мог бы показать пример использования этой длл, если помнишь? хотел еще спросить существуют ли проги, которые бы смогли изменить Drive Model Number (disk32.exe), или Product ID, жесткого диска |
| Автор: mr.DUDA 12.1.2008, 16:36 |
Всё сводится к получению серийника HDD, я просто взял стандартный идущий пример вместе с diskId и завернул его в экспортируемую функцию из DLL. |
| Автор: VisualProgrammerNET 13.1.2008, 21:10 |
| ммм... можно ли программно изменить вшитый аппаратно productId? ИМХО, нельзя. И ваще, цель подобной программы что-то не особо понятна... |
| Автор: Любитель 14.1.2008, 13:01 | ||||||
Утила немного крива написана
По ходу у тебя пример для VB6. Он сильно отличается от дотнетовского (конкретно судить не могу - ибо не знаю
То есть с приведённой длл-кой (судя по сигнатурам, по крайней мере) - юзать ансейф. И передавать адрес структуры соответствующей. Вообще, по-моему эта длл-ка основана на тех же исходниках (все дороги ведут туда...) - проще "подправить" анменеджед функцию, чтобы она приняла удобный для тебя вид (чтобы всё тупо промарашллить можно было). Плюс к тому заметь - в тех сорсах три функции. Не знаю, что там в 9x, но в нт-шках: 1. Одна работает лишь с админскими правами 2. Вторая не работает с саташными винтами :( Нормально рабочая (в моём понимании - т. е. без админских прав и с любыми винтами) - та, которая юзает \\.\Scsi |
| Автор: AGENTxXx 3.4.2010, 20:41 | ||
Надеюсь кому-нибудь пригодится в будующем (т.к. вопрос вроде бы как не решен тут). Код проги которая выдает необходимую информацию:
Добавлено через 1 минуту и 49 секунд И да.. вот ссылочка где можно взять необходимые переменные для запроса (ну или использовать другой запрос): http://msdn.microsoft.com/en-us/library/aa394084(v=VS.85).aspx |
| Автор: SKrivosein 4.4.2010, 10:47 |
| AGENTxXx у меня твой код неработает, выбрасывает ManagementException - неправильный запрос. Пытаюсь найти в MSND причину. Я эту тему неочень, но интересно... |