Clase PCGuard en Ruby
PC Guard es una excelente herramienta para la protección de software y generación de licencias de usuario en Windows. Uno de sus productos es el Activation suite, que permite desarrollar aplicaciones que generen licencias válidas de PC Guard.
La documentación del Activation suite Web sólo proporciona ejemplos de uso en PHP y ASP. La siguiente es una clase hecha en Ruby para manejar la validación y generación de licencias.
require 'win32ole'
class PCGuard
# Propiedades de sólo lectura
attr_reader :activacion, :remocion, :volumendd, :bios, :cpu, :serialdd, :os, :cd, :red
# Propiedades de lectura y escritura
attr_accessor :programid, :sitecode, :mid, :features
# Valores del "ResponseCode" del PCGuard
STATUS_OK = 0 # Success
STATUS_BAD_SITE_CODE = 1 # Site code is invalid
STATUS_BAD_PROGRAM_ID = 3 # ProgramID is invalid
STATUS_BAD_MID_CODE = 6 # Machine ID is invalid
STATUS_MID_CODE_ERROR = 7 # Machine ID decryption error
# Excepciones que genera la clase
class BadSiteCode < StandardError; end
class BadProgramID < StandardError; end
class BadMID < StandardError; end
class MIDCodeError < StandardError; end
# Valida y genera todos los códigos de la licencia
def initialize(programid = "", sitecode = "", mid = "", features = 0)
# Inicializar variables con los códigos de PCGuard
@programid, @sitecode, @mid, @features = programid, sitecode, mid, features
# Inicializar variables de las propiedades
@activacion, @remocion, @volumendd, @bios, @cpu, @serialdd, @os, @cd, @red = "", "", 0, 0, 0, 0, 0, 0, 0
# Generar códigos, si se han pasado todos los campos necesarios al inicializar el objeto
self.generar unless @programid.empty? || @sitecode.empty? || @mid.empty?
end
# Genera todos los códigos
def generar
# Generar un error si no se han cargado todos los códigos de PCGuard necesarios para generar una licencia
raise ArgumentError if @programid.empty? || @sitecode.empty? || @mid.empty?
# Crear objeto
l = WIN32OLE.new("icgweb.icgen")
# Inicializar códigos
l.ProgramID = @programid
# Generar códigos de ifentificación de la máquina
l.SiteCode = @sitecode
l.MachineID = @mid
l.V5_CheckMachineID()
# Validar
if l.ResponseCode != STATUS_OK
raise BadSiteCode if l.ResponseCode == STATUS_BAD_SITE_CODE
raise BadMID if l.ResponseCode == STATUS_BAD_MID_CODE
raise MIDCodeError if l.ResponseCode == STATUS_MID_CODE_ERROR
end
# Generar código de activación y remosión
l.SiteCode = @sitecode
l.MachineID = @mid
l.Features = @features
l.V5_CalculateActivationCode()
# Validar
if l.ResponseCode != STATUS_OK
raise BadSiteCode if l.ResponseCode == STATUS_BAD_SITE_CODE
raise BadProgramID if l.ResponseCode == STATUS_BAD_PROGRAM_ID
raise BadMID if l.ResponseCode == STATUS_BAD_MID_CODE
end
# Asignar valores a las variables del objeto
@activacion = l.ActivationCode # Código de activación
@remocion = l.RemoveCode # Código de remosión
@volumendd = l.DriveID.to_i # Hard drive volume serial ID
@bios = l.BiosID.to_i # Motherboard bios ID
@cpu = l.CPUID.to_i # CPU ID
@serialdd = l.HDHWID.to_i # Hard drive hardware ID
@os = l.OSID.to_i # Operating system ID
@cd = l.CDHWID.to_i # CD/DVD hardware ID
@red = l.NETID.to_i # Network card ID
# Retornar el código de activación de la licencia
@activacion
end
end
Tiene propiedades de lectura/escritura para los códigos principales de PC Guard: ProgramID (programid), Site Code (sitecode), MID (mid) y Features (features); propiedades de sólo lectura para los resultados de la generación: código de activación (activacion), código de remoción (remocion); propiedades de sólo lectura para los código de identificación del equipo: serial de la partición del disco duro (volumendd), BIOS del equipo (bios), CPU (cpu), serial del disco duro (serialdd), sistema operativo (os), CD/DVD (cd), tarjeta de red (red); y un único método para generar todos los códigos (generar).
Para usarla, puedes hacer algo como:
require 'PCGuard' licencia = PCGuard.new licencia.programid = "XXXXXXXXXXXXXXXXXXXXXXXX" licencia.sitecode = "YYYYYYYY" licencia.mid = "ZZZZ-ZZZZ-ZZZZ-ZZZZ" licencia.generar # => "ABCD1234-ABCD1234-ABCD1234-ABCD1234"
O, de manera más resumida:
licencia = PCGuard.new("XXXXXXXXXXXXXXXXXXXXXXXX", "YYYYYYYY", "ZZZZ-ZZZZ-ZZZZ-ZZZZ")
Por supuesto, proporcionando códigos válidos para ProgramID, Site Code y MID.
También genera las siguientes excepciones:
- ArgumentError: falta alguno de los códigos necesarios (programid, sitecode o mid)
- BadProgramID: error en el ProgramID (identificador del proveedor de software)
- BadSiteCode: error en el Site Code del equipo
- BadMID: error en el MID del equipo
- MIDCodeError: error en el Site Code y/o el MID.

2 comentarios:
Hola amigo soy nuevo en esto como puedo hacerle para generar dichos codigos algo asi como un keygen no se si me pudieras ayudar gracias.
("Anónimo", no me dejaste donde responderte, así que lo hago aquí por si lo lees luego)
No sabría cómo generar esos códigos. Para eso uso la herramienta PCGuard (www.sofpro.com). Revisa su web a ver si te sirve para lo que lo necesites.
Publicar un comentario