PDA

Просмотр полной версии : защита net программы


kusanagi
30.09.2009, 12:01
хочу защитить свою программу на 2.0 от копирования на другие машины, т.е. чтобы запускалась только на 1 компе
ну или хотя бы максимально затруднить взлом. можно ли это осуществить своими силами без финансовых затрат и сильных дерганий?
счас вижу решение- получить ид железки, затем на основании этого ид сгенерить ключ и в программе этот ключ проверить. можно еще с обфуксацией.
жизнеспособное ли это решение?

Tigger
30.09.2009, 12:42
Ключ на комп + через свой сервер какой-нибудь

kusanagi
30.09.2009, 13:24
Ключ на комп + через свой сервер какой-нибудь

ключ это понятно, а как компьютер идентифицировать? на том же самом сервере, ведь надо чтото передавать

M_script_
30.09.2009, 14:03
ключ это понятно, а как компьютер идентифицировать? на том же самом сервере, ведь надо чтото передавать

Идентифицировать по номерам комплектующих.

slesh
30.09.2009, 14:48
для net прог удобно очень получать данные через WMI и к ним привязываться.
Получай серийник винта (именно винта, а не метки тома) и привязывайся к нему.

nerezus
30.09.2009, 15:25
+ не забыть обфускацию/протектор.

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;
}


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

slesh
30.09.2009, 22:37
А ты подключение даже не сделал.

kusanagi
30.09.2009, 22:59
делаю как в примере http://www.geekpedia.com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html
не пашет. вобще ни 1 пример не заработал. стоит русская хр сп3

RumShun
01.10.2009, 11:02
вобщем нашел такой код

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;

помогите плиз

W!z@rD
01.10.2009, 12:01
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
01.10.2009, 12:05
RumShun а ты темой ошибся почему?
эта функция для получения серийника винта, получить серийник тома не проблема, а вот именно винчестера... весь гугл перерыл, все не рабочее(под Делфи).

kusanagi
01.10.2009, 12:22
http://codemaverick.blogspot.com/2007/02/how-to-retrieve-management-information.html




ну я таких статей много перечитал, да чтото возращают, но как дело доходит до получения серийного номера то все валится

W!z@rD
01.10.2009, 15:53
Не врал бы.

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 прочти заголовок, открой глазки