Просмотр полной версии : защита net программы
kusanagi
30.09.2009, 12:01
хочу защитить свою программу на 2.0 от копирования на другие машины, т.е. чтобы запускалась только на 1 компе
ну или хотя бы максимально затруднить взлом. можно ли это осуществить своими силами без финансовых затрат и сильных дерганий?
счас вижу решение- получить ид железки, затем на основании этого ид сгенерить ключ и в программе этот ключ проверить. можно еще с обфуксацией.
жизнеспособное ли это решение?
Ключ на комп + через свой сервер какой-нибудь
kusanagi
30.09.2009, 13:24
Ключ на комп + через свой сервер какой-нибудь
ключ это понятно, а как компьютер идентифицировать? на том же самом сервере, ведь надо чтото передавать
M_script_
30.09.2009, 14:03
ключ это понятно, а как компьютер идентифицировать? на том же самом сервере, ведь надо чтото передавать
Идентифицировать по номерам комплектующих.
для net прог удобно очень получать данные через WMI и к ним привязываться.
Получай серийник винта (именно винта, а не метки тома) и привязывайся к нему.
+ не забыть обфускацию/протектор.
kusanagi
30.09.2009, 16:02
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;
}
подскажите почему не работает код, валится исключение с сообщением 'не найден'. у меня хр русская, подозреваю изза этого. как правильно?
А ты подключение даже не сделал.
kusanagi
30.09.2009, 22:59
делаю как в примере http://www.geekpedia.com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html
не пашет. вобще ни 1 пример не заработал. стоит русская хр сп3
вобщем нашел такой код
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
lds dx, psnp //<=вот тут ошибка Operand size 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;
помогите плиз
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://codemaverick.blogspot.com/2007/02/how-to-retrieve-management-information.html
RumShun а ты темой ошибся
RumShun а ты темой ошибся почему?
эта функция для получения серийника винта, получить серийник тома не проблема, а вот именно винчестера... весь гугл перерыл, все не рабочее(под Делфи).
kusanagi
01.10.2009, 12:22
http://codemaverick.blogspot.com/2007/02/how-to-retrieve-management-information.html
ну я таких статей много перечитал, да чтото возращают, но как дело доходит до получения серийного номера то все валится
Не врал бы.
Availability__::
BytesPerSector__::512
Capabilities__::System.UInt16[]
CapabilityDescriptions__::
Caption__::FUJITSU MHV2060BH
CompressionMethod__::
ConfigManagerErrorCode__::0
ConfigManagerUserConfig__::False
CreationClassName__::Win32_DiskDrive
DefaultBlockSize__::
Description__::Disk 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 прочти заголовок, открой глазки
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot