Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/07/2011, 07:34
Avatar de djagu_26
djagu_26
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 17 años, 2 meses
Puntos: 6
Decodificar clave de Windows

Bueno gente la cosa es asi, tengo una aplicacion que se conecta al registro de la maquina mediante WMI (usando la libreria de com4j), y leeo el DigitalProductId del sistema operativo, esto me devuelve un vector del tipo Object[] pero con valres binarios. El problema es que tengo que manipular ese vector e ir creando la clave de windows, he encontrado varios ejemplos en visual basic pero al traducirlos a java no funcionan correctamente. Adjunto los codigos y les agradeceria si alguien me puede dar una mano! Gracias

Codigo escrito en Visual.

Código:
Function GetKey(rpk)

Const rpkOffset=52:i=28
szPossibleChars="BCDFGHJKMPQRTVWXY2346789"
Do 
	dwAccumulator=0 : j=14
	Do
		dwAccumulator=dwAccumulator*256
		dwAccumulator=rpk(j+rpkOffset)+dwAccumulator
		rpk(j+rpkOffset)=(dwAccumulator\24) and 255 
		dwAccumulator=dwAccumulator Mod 24
		j=j-1
	Loop While j>=0
	i=i-1 : szProductKey=mid(szPossibleChars,dwAccumulator+1,1)&szProductKey
	if (((29-i) Mod 6)=0) and (i<>-1) then
		i=i-1 : szProductKey="-"&szProductKey
	End If
Loop While i>=0 

GetKey=szProductKey
End Function


Mi traduccion en JAVA.

Código:
public static String convertirCalveMSWindows(Object[] rpk) {
        String clave = "N/A";
        if (rpk.length != 0) {
            int rpkOffset = 52;
            int i = 28;
            String szPossibleChars = "BCDFGHJKMPQRTVWXY2346789";
            clave = "";
            while (i >= 0) {
                int dwAccumulator = 0;
                int j = 14;
                while (j >= 0) {
                    dwAccumulator = dwAccumulator * 256;
                    int val = Integer.parseInt(rpk[j + rpkOffset].toString());
                    dwAccumulator = val + dwAccumulator;
                    rpk[j + rpkOffset] = (dwAccumulator / 24) + 255;
                    dwAccumulator = dwAccumulator % 24;
                    j = j - 1;
                }
                i = i - 1;
                clave = clave + szPossibleChars.charAt(dwAccumulator);
                if ((29 - i) % 6 == 0 && i != -1) {
                    i = i - 1;
                    clave += "-";
                }
            }
        }
        return clave;
    }
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]