Pues bien, cuando se formatea una unidad de disco Windows le asigna un número de serie que no cambiará hasta que vuelva a ser formateada. Lo que vamos a hacer es una función que toma como parámetro la unidad de disco que le pasemos (C:, D:, ...) y nos devolverá su número de serie:
function LeerSerieDisco( cUnidad: Char ): String;
var
dwLongitudMaxima, VolFlags, dwSerie: DWord;
begin
if GetVolumeInformation( PChar( cUnidad + ':\' ), nil, 0,
@dwSerie, dwLongitudMaxima, VolFlags, nil, 0) then
begin
// devolvemos el número de serie en hexadecimal
Result := IntToHex( dwSerie, 8 );
Insert( '-', Result, 5 );
end
else
Result := '';
end;
Nos devolverá algo como esto:
D4BD-0EC7
Con ese número ya podemos crear nuestro propio keygen alterando las letras, el orden o utilizando el algoritmo de encriptación que nos apetezca.
El único inconveniente es que si el usuario vuelve a formatear esa unidad entonces nos tiene que volver a pedir el número de serie. Hay otros programadores que prefieren leer el número de la BIOS o de la tarjeta de video, ya depende del nivel de protección que se desee.
Pruebas realizadas en Delphi 7.
3 comentarios:
Alguna idea para leer el Firmware del Disco duro, ese no cambia nunca.
Ese aspecto he intentado tocarlo varias veces y no he podido hacer nada.
Las únicas rutinas que he encontrado son tan antiguas que Windows XP me salta diciendo que no puedo tener acceso a esos recursos.
Sería un tema interesante para escribir. Sobre todo lo relacionado con la BIOS y la placa base.
WMIServices, solo que no fuciona en todas las versiones de Windows :(
Publicar un comentario