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.
Alguna idea para leer el Firmware del Disco duro, ese no cambia nunca.
ResponderEliminarEse aspecto he intentado tocarlo varias veces y no he podido hacer nada.
ResponderEliminarLas ú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 :(
ResponderEliminar