хочу защитить свою программу на 2.0 от копирования на другие машины, т.е. чтобы запускалась только на 1 компе ну или хотя бы максимально затруднить взлом. можно ли это осуществить своими силами без финансовых затрат и сильных дерганий? счас вижу решение- получить ид железки, затем на основании этого ид сгенерить ключ и в программе этот ключ проверить. можно еще с обфуксацией. жизнеспособное ли это решение?
ключ это понятно, а как компьютер идентифицировать? на том же самом сервере, ведь надо чтото передавать
для net прог удобно очень получать данные через WMI и к ним привязываться. Получай серийник винта (именно винта, а не метки тома) и привязывайся к нему.
Code: string result = String.Empty; try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); foreach (ManagementObject d in searcher.Get()) { result = d["SerialNumber"].ToString().Trim(); //break; } } catch (Exception ex) { result = ex.Message; } подскажите почему не работает код, валится исключение с сообщением 'не найден'. у меня хр русская, подозреваю изза этого. как правильно?
делаю как в примере http://www.geekpedia.com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html не пашет. вобще ни 1 пример не заработал. стоит русская хр сп3
вобщем нашел такой код Code: PSerialNumberParams = ^TSerialNumberParams; TSerialNumberParams = record wInfoLevel:word; dwDiskSerialNumber:longint; caLabel:array[0..10] of char; baFileSystem:array[0..7] of char; end; function GetDriveSerialNumber(wDrive: word): LongInt; var snp: TSerialNumberParams; begin snp.dwDiskSerialNumber := 0; if ReadDriveSNParam(wDrive, @snp) then Result := snp.dwDiskSerialNumber else Result := -1; end; function ReadDriveSNParam(wDrive: word; psnp: PSerialNumberParams): boolean; assembler; asm push ds mov bx, wDrive mov al, 00h mov ah, 69h [B]lds dx, psnp //<=вот тут ошибка Operand size[/B] mismatch int 21h jnc @no_error {CF SET if error} xor ax,ax {set false} jmp @exit @no_error: mov ax, 1 {set true} @exit: pop ds end; помогите плиз
http://codemaverick.blogspot.com/2007/02/how-to-retrieve-management-information.html RumShun а ты темой ошибся
почему? эта функция для получения серийника винта, получить серийник тома не проблема, а вот именно винчестера... весь гугл перерыл, все не рабочее(под Делфи).
ну я таких статей много перечитал, да чтото возращают, но как дело доходит до получения серийного номера то все валится
Не врал бы. Availability__:: BytesPerSector__::512 Capabilities__::System.UInt16[] CapabilityDescriptions__:: Caption__::FUJITSU MHV2060BH CompressionMethod__:: ConfigManagerErrorCode__::0 ConfigManagerUserConfig__::False CreationClassName__::Win32_DiskDrive DefaultBlockSize__:: Description__:isk drive DeviceID__::\\.\PHYSICALDRIVE0 ErrorCleared__:: ErrorDescription__:: ErrorMethodology__:: Index__::0 InstallDate__:: InterfaceType__::IDE LastErrorCode__:: Manufacturer__:Standard disk drives) MaxBlockSize__:: MaxMediaSize__:: MediaLoaded__::True MediaType__::Fixed hard disk media MinBlockSize__:: Model__::FUJITSU MHV2060BH Name__::\\.\PHYSICALDRIVE0 NeedsCleaning__:: NumberOfMediaSupported__:: Partitions__::1 PNPDeviceID__::IDE\DISKFUJITSU_MHV2060BH_______________________0085002A\5&1F698B3F&0&0.0.0 PowerManagementCapabilities__:: PowerManagementSupported__:: SCSIBus__::0 SCSILogicalUnit__::0 SCSIPort__::0 SCSITargetId__::0 SectorsPerTrack__::63 Signature__::4026531840 Size__::60011642880 Status__::OK StatusInfo__:: SystemCreationClassName__::Win32_ComputerSystem SystemName__::UOPONLG8BFLB1 TotalCylinders__::7296 TotalHeads__::255 TotalSectors__::117210240 TotalTracks__::1860480 TracksPerCylinder__::255 Где ты тут увидел SerialNumber!? пипец, давай сам что-нибудь попробуешь сделать, а? RumShun прочти заголовок, открой глазки