Test Foro de elhacker.net SMF 2.1

Programación => Ingeniería Inversa => Mensaje iniciado por: Graphixx en 16 Septiembre 2014, 17:53 PM

Título: [AYUDA] Script para generar seriales los crea repetidos
Publicado por: Graphixx en 16 Septiembre 2014, 17:53 PM
Buenas, junte 3 ejemplos que encontre en la red de generar seriales en 1 solo codigo, la cosa es que si estoy cojiendo 3 datos diferentes, no entiendo por que el script me repite seriales.

Código (php) [Seleccionar]

<?php
function RandomString($length=10,$uc=TRUE,$n=TRUE,$sc=FALSE)
{
    
//$source = 'abcdefghijklmnopqrstuvwxyz';
    //if($uc==1) $source .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if($uc==1$source .= 'abcdefghijklmnopqrstuvwxyz';
    if(
$n==1$source .= '1234567890';
    
//if($sc==1) $source .= '|@#~$%()=^*+[]{}-_';
    
if($length>0){
        
$rstr "";
        
$source str_split($source,1);
        for(
$i=1$i<=$length$i++){
            
mt_srand((double)microtime() * 1000000);
            
$num mt_rand(1,count($source));
            
$rstr .= $source[$num-1];
        }
 
    }
    return 
$rstr;
}

//echo "<font size=38>a".RandomString(6,TRUE,true,false)."</font>";

    
function generateKey($webroot,$shortname,$version){
     
    
$webroot strtolower(trim($webroot));
    for(
$i=0;$i<strlen($webroot);$i++){
    
$alpha substr($webroot,$i,$i+1);
    
$key1="";
    
$thisS=getValue($alpha);
    
$key1$key1 $thisS;
    }
     
    
$shortname strtolower(trim($shortname));
    for(
$i=0;$i<strlen($shortname);$i++){
    
$alpha substr($shortname,$i,1);
     
    
$key3="";
    
$key3$key3 $thisS;
    }
     
    
$version strtolower(trim($version));
    for(
$i=0;$i<strlen($version);$i++){
    
$alpha substr($version,$i,1);
    
$key4 ="";
    
$key4 =$key4+$thisS;
    }
     
    
$hkey1 = ($key1 $key3 $key4) * 9;
    
$hkey2 = ($key1 $key3 $key4) * 2;
    
$hkey3 = ($key1 $key3 $key4) * 3;
    
$hkey4 = ($key1 $key3 $key4) * 5;
    
$ckey1 substr(strtoupper(crypt($hkey1,$key1)),3,4);
    
$ckey1 str_replace(".","A",$ckey1);
    
$ckey1 str_replace("/","Z",$ckey1);
    
$ckey2 substr(strtoupper(crypt($hkey2,$key1)),3,4);
    
$ckey2 str_replace(".","G",$ckey2);
    
$ckey2 str_replace("/","3",$ckey2);
    
$ckey3 substr(strtoupper(crypt($hkey3,$key3)),3,4);
    
$ckey3 str_replace(".","6",$ckey3);
    
$ckey3 str_replace("/","D",$ckey3);
    
$ckey4 substr(strtoupper(crypt($hkey4,$key4)),3,4);
    
$ckey4 str_replace(".","K",$ckey4);
    
$ckey4 str_replace("/","W",$ckey4);
     
    return 
$ckey1."-".$ckey4;
    }
     
    function 
getValue($alpha){
    switch(
$alpha){
    case 
'a': return 6678 ; break;
    case 
'b': return 1712 ; break;
    case 
'c': return 5513 ; break;
    case 
'd': return 6648 ; break;
    case 
'e': return 7626 ; break;
    case 
'f': return 4581 ; break;
    case 
'g': return 7221 ; break;
    case 
'h': return 4891 ; break;
    case 
'i': return 4441 ; break;
    case 
'j': return 8503 ; break;
    case 
'k': return 7567 ; break;
    case 
'l': return 8028 ; break;
    case 
'm': return 2074 ; break;
    case 
'n': return 1770 ; break;
    case 
'o': return 2442 ; break;
    case 
'p': return 3321 ; break;
    case 
'q': return 3899 ; break;
    case 
'r': return 2474 ; break;
    case 
's': return 5313 ; break;
    case 
't': return 7505 ; break;
    case 
'u': return 9808 ; break;
    case 
'v': return 3571 ; break;
    case 
'w': return 3352 ; break;
    case 
'x': return 3410 ; break;
    case 
'y': return 7058 ; break;
    case 
'z': return 5847 ; break;
    case 
'0': return 15058 ; break;
    case 
'1': return 89739 ; break;
    case 
'2': return 27663 ; break;
    case 
'3': return 53044 ; break;
    case 
'4': return 74136 ; break;
    case 
'5': return 89338 ; break;
    case 
'6': return 17816 ; break;
    case 
'7': return 93186 ; break;
    case 
'8': return 84464 ; break;
    case 
'9': return 58450 ; break;
    default: return 
1419 ; break;
    }
 }
 
function 
encrypt($string$key) {
   
$result '';
   for(
$i=0$i<strlen($string); $i++) {
      
$char substr($string$i1);
      
$keychar substr($key, ($i strlen($key))-11);
      
$char chr(ord($char)+ord($keychar));
      
$result.=$char;
   }
   return 
base64_encode($result);
}


 
$link=mysql_connect("localhost","root","");
mysql_select_db("seriales",$link);
 
for (
$i 0$i 90$i++) {
    
$cod1 "a".RandomString(6,TRUE,true,false);
$webroot $cod1;
$shortname strrev($cod1);
    
$cadena_encriptada encrypt($cod1,$shortname);
$version $cadena_encriptada;
echo $cod1." / ".$version." / ".$shortname." <br/>";
    
$serial generateKey($webroot,$shortname,$version);

    
mysql_query("insert into seriales(qr,serial) values('$cod1','$serial')",$link);
}

mysql_close($link);
?>



Esta convinacion de 3 ejemplos fue lo mejor que encontre, si conocen de mas ejemplos de generar serial en php, se agradece...
Título: Re: [AYUDA] Script para generar seriales los crea repetidos
Publicado por: MCKSys Argentina en 16 Septiembre 2014, 19:55 PM
Hola!

Desconozco la sintaxis de PHP, pero si se me ocurren algoritmos para generar seriales.

En realidad, es cuestion de jugar un poco con los datos y evitar colisiones de seriales para distintos valores de entrada (lo cual solucionas facil con hashes).

La pregunta es: en base a qué quieres generar los seriales? A parametros como los del ejemplo (webroot, shortname y version)?

Saludos!
Título: Re: [AYUDA] Script para generar seriales los crea repetidos
Publicado por: Graphixx en 16 Septiembre 2014, 21:11 PM
Cita de: MCKSys Argentina en 16 Septiembre 2014, 19:55 PM
La pregunta es: en base a qué quieres generar los seriales? A parametros como los del ejemplo (webroot, shortname y version)?
Saludos!

El ejemplo traia 3 llaves, yo solo necesito en base a 1 sola llave... me parece que con este ejemplo me voy a bastar:
http://www.phpclasses.org/package/6823-PHP-Generate-serial-numbers.html#screenshots

Yo lo adapte para generar seriales en base a un string random, os dejo mi codigo por aca:
http://www.4shared.com/zip/NQrYs3kPba/cod04.html
El ejemplo generaba 4 bloques de serial, yo modifique de la libreria "Serial.php" de la linea 87:
Cambie:
      while(++$blockCount < 4)
Por:
      while(++$blockCount < 2)
Asi que ya solo genera 2 bloques, vale.

De todas formas sigo abierto a que me recomienden mas librerias de generar seriales en PHP.