Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: z_ane_666 en 1 Julio 2012, 02:05 am



Título: [C] [SRC] desencriptador de claves para el PC Web
Publicado por: z_ane_666 en 1 Julio 2012, 02:05 am
He hecho un pequeño codigo que le puede servir a muchos administradores de sistema, para hallar las claves olvidadas de las pcs cliente que tengan instalado el Pcweb Cliente 4.3.26.

Para usarlo obviamente tienes que estar con la terminal cliente desbloqueada! :laugh:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <string.h>
  5.  
  6. void ayuda(char * argumento)
  7. {
  8. printf("\nuso %s [/clave clave_encriptada] || [/ruta ruta_en_el_registro_de_windows]\n\nEjecute el programa sin parametros para mostrar la contraseña descifrada desde la ruta por defecto (HKEY_LOCAL_MACHINE\\SOFTWARE\\IWindow\\Bootear\\Clave)\n\nOPCIONES:\n\n/clave : Debe ingresar la clave cifrada en hexadecimal, separando cada elemento con - ejemplo: /clave h4-54-12\n\n/ruta : Le permite especificar una ruta del registro para la busqueda de la clave",argumento);
  9. exit(0);
  10. }
  11.  
  12. char * RegQueryStringValue(HKEY hKey, char * strValueName,long TIPODATO)
  13. {
  14. long lResult;
  15. char * strBuf;
  16. unsigned long lValueType;
  17. unsigned long lDataBufSize;
  18. strBuf = (char *) calloc(200, sizeof(char));
  19. if (strBuf==NULL)
  20.    {
  21.    printf("falta de memoria");
  22.    RegCloseKey(hKey);
  23.    exit(1);
  24.    }
  25.    lResult = RegQueryValueEx(hKey, strValueName, NULL, &lValueType, strBuf, &lDataBufSize);
  26.    if (lResult == ERROR_SUCCESS)
  27.        {if (lValueType == TIPODATO)
  28.            {
  29.             return strBuf;
  30.            }
  31.    else {return "";}
  32.        }
  33.    else {return "";}
  34. }
  35.  
  36. char * obtenervalor(HKEY hKey, char * strPath, char * strValue, long tipodato)
  37. {
  38. PHKEY Ret;
  39. char * valorllave;
  40. long resultado;
  41. resultado=RegOpenKey(hKey,strPath,&Ret);
  42. if (resultado==ERROR_SUCCESS)
  43. {
  44. valorllave=RegQueryStringValue((HKEY)Ret,strValue,tipodato);
  45. RegCloseKey((HKEY)Ret);
  46. return valorllave;
  47. }
  48. else{
  49. return "";}
  50. }
  51.  
  52. char * desencriptandoclave(char * claveencriptada)
  53. {
  54. int semilla;
  55. char * clavedesencriptada;
  56. long i;
  57. semilla=(int)claveencriptada[0];
  58. clavedesencriptada = (char *) calloc(strlen(claveencriptada)-1+1, sizeof(char));//en realidad solo debiera pedir 9 espacios pero pido +1 para el '\0'
  59. if (clavedesencriptada==NULL)
  60.    {
  61.    printf("falta de memoria");
  62.    exit(1);
  63.    }
  64. for(i=0;i<strlen(claveencriptada)-1;i++)
  65.    {
  66.    clavedesencriptada[i]=(char *)((int)claveencriptada[i+1]-semilla-i-1);
  67.    }
  68. clavedesencriptada[strlen(claveencriptada)-1]='\0';
  69. return clavedesencriptada;
  70. }
  71.  
  72. char * volteandocadena(char * cadenaprocesar)
  73. {
  74. char * cadenaprocesada;
  75. cadenaprocesada = (char *) calloc(strlen(cadenaprocesar)+1, sizeof(char));//+1 para el '\0'
  76. if (cadenaprocesada==NULL)
  77.    {
  78.    printf("falta de memoria");
  79.    exit(1);
  80.    }
  81. long i;
  82. for(i=strlen(cadenaprocesar)-1;i>-1;i--)
  83.    {
  84.   cadenaprocesada[strlen(cadenaprocesar)-1-i]=cadenaprocesar[i];
  85.    }
  86.  
  87. cadenaprocesada[strlen(cadenaprocesar)+1-1]='\0';
  88. return cadenaprocesada;
  89. }
  90.  
  91. int main(int argc,char **argv)
  92. {
  93. char siclave[7]="/clave";
  94. char siruta[6]="/ruta";
  95. char siayuda[7]="/ayuda";
  96. char versionprogram[7]="4.3.26";
  97. char * retorno;
  98. if (argc==1){
  99. retorno = obtenervalor(HKEY_CURRENT_USER,"SOFTWARE\\ARSON Group SAC\\Pcweb Cliente","Last Installed Version",REG_SZ);
  100.    {if (strncmp(versionprogram,retorno,strlen(versionprogram))==0)
  101.    {char * claveencriptada;
  102.     claveencriptada = obtenervalor(HKEY_LOCAL_MACHINE,"SOFTWARE\\IWindow\\Bootear","Clave",REG_SZ);
  103.        if(claveencriptada!="")
  104.        {char * clavedesencriptada;
  105.         clavedesencriptada=desencriptandoclave(claveencriptada);
  106.         printf("%s",clavedesencriptada);
  107.         exit(0);
  108.        }
  109.        else
  110.        {printf("Error, no se pudo encontrar la clave \n");}
  111.  
  112.    exit(1);}
  113.    else
  114.    {printf("No esta instalado Pcweb Cliente 4.3.26");
  115.    exit(1);}}
  116. }
  117. else
  118. {
  119. if ((strncmp(siclave,argv[1],strlen(siclave))==0)||(strncmp(siruta,argv[1],strlen(siruta))==0)||(strncmp(siayuda,argv[1],strlen(siayuda))==0))
  120. {   if(strncmp(siayuda,argv[1],strlen(siayuda))==0){ayuda(argv[0]);}
  121.    if (argc<3){printf("Falta parametros");exit(1);}
  122.    if (strncmp(siclave,argv[1],strlen(siclave))==0)
  123.    {
  124.    char *separacion;
  125.    char *cadenalista;
  126.    long i=0;
  127.    cadenalista=(char *) calloc(500,sizeof(char));
  128.    if (cadenalista==NULL)
  129.        {
  130.        printf("falta de memoria");
  131.        exit(1);
  132.        }
  133.    unsigned short decimal;
  134.    separacion = strtok(argv[2],"-");
  135.    while ((separacion != NULL))
  136.        {
  137.            sscanf(separacion, "%hx", &decimal);
  138.            cadenalista[i]=(char *)decimal;
  139.            separacion = strtok(NULL, "-");
  140.            i++;
  141.  
  142.        }
  143.    cadenalista=(char *) realloc ( cadenalista, i+1*sizeof(char) );//+1 para null
  144.    cadenalista[i]='\0';
  145.        if(i>1)
  146.            {char * clavedesencriptada;
  147.            clavedesencriptada=desencriptandoclave(cadenalista);
  148.            printf("%s",clavedesencriptada);
  149.            exit(0);
  150.            }
  151.            else{printf("Error, solamente ha escrito la semilla\n");ayuda(argv[0]);exit(1);}
  152.    }
  153.    else if(strncmp(siruta,argv[1],strlen(siruta))==0)
  154.    {
  155.    char * rutaregistro;
  156.    char * raizregistro;
  157.    HKEY trueraizregistro;
  158.    char * nombrevalor;
  159.    //---------------validaciones de ***** -----------------------------
  160.    rutaregistro=strstr(volteandocadena((argv[2])),"\\");
  161.        if(rutaregistro)
  162.        {rutaregistro=strstr(volteandocadena(rutaregistro+1),"\\");
  163.            if(rutaregistro)
  164.            {rutaregistro=rutaregistro+1;}
  165.            else{ayuda(argv[0]);exit(1);}
  166.        }
  167.        else{ayuda(argv[0]);exit(1);}
  168.    //---------------validaciones de ***** -----------------------------
  169.    raizregistro=strrchr(volteandocadena(argv[2]),'\\');
  170.        if(raizregistro)
  171.        {raizregistro=volteandocadena(raizregistro+1);}
  172.        else{ayuda(argv[0]);exit(1);}
  173.    //---------------validaciones de ***** -----------------------------
  174.    nombrevalor=strrchr(argv[2],'\\')+1;
  175.    strupr(raizregistro);
  176.    {if(strncmp("HKEY_CLASSES_ROOT",raizregistro,17)==0)
  177.    {
  178.    trueraizregistro=HKEY_CLASSES_ROOT;
  179.    }
  180.    else if(strncmp("HKEY_CURRENT_USER",raizregistro,17)==0)
  181.    {
  182.     trueraizregistro=HKEY_CURRENT_USER;
  183.    }
  184.    else if(strncmp("HKEY_LOCAL_MACHINE",raizregistro,18)==0)
  185.    {
  186.    trueraizregistro=HKEY_LOCAL_MACHINE;
  187.    }
  188.    else if(strncmp("HKEY_USERS",raizregistro,10)==0)
  189.    {
  190.    trueraizregistro=HKEY_USERS;
  191.    }
  192.    else if(strncmp("HKEY_CURRENT_CONFIG",raizregistro,19)==0)
  193.    {
  194.     trueraizregistro=HKEY_CURRENT_CONFIG;
  195.    }
  196.    else{ayuda(argv[0]);exit(1);}}
  197.    char * claveencriptada;
  198.    claveencriptada = obtenervalor(trueraizregistro,rutaregistro,nombrevalor,REG_SZ);
  199.        if(claveencriptada!="")
  200.        {char * clavedesencriptada;
  201.         clavedesencriptada=desencriptandoclave(claveencriptada);
  202.         printf("%s",clavedesencriptada);
  203.         exit(0);
  204.        }
  205.        else
  206.        {printf("Error, no se pudo encontrar la clave \n");exit(1);}
  207.    }
  208. }
  209. else
  210. {
  211. printf("Opcion no existe\n");
  212. exit(1);
  213. }
  214. }
  215.  
  216. return 0;
  217. }


Espero que le sea de utilidad y quisiera recibir consejos para optimizar el programa. Saludos ;)