⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winrar20.pl

📁 破解很多程序的序列号算法程序
💻 PL
字号:
#! /perl/bin/perl.exe
# Created by friendship_@bimamail.com
# Program : Key Generator for WinRar ver 2 above


my $div, $idx, $comp;
my $dv, $ix, $cm;
my $n1;
sub init {
   $div = 0;
   $idx = 0;
   $comp = "13568"
}

sub save {
   $dv = $div;
   $ix = $idx;
   $cm = $comp
}

sub init1 {
   $div = $dv;
   $idx = $ix;
   $comp = $cm
}

# > $75FF
@table_A1 = qw(65280 65535 65535 65535 65535 65535 0 0);
@table_A2 = qw(0 0 0 0 0 0 0 0 0 0 0 0 255);

# > $5DFF
@table_B1 = qw(32768 9216 60928 65152 65535 65535 65535 0);
@table_B2 = qw(0 0 0 0 0 0 0 2 16 218 251 0 0);

# > $35FF
@table_C1 = qw(4096 9216 32768 49152 64000 65535 65535 65535);
@table_C2 = qw(0 0 0 0 0 0 2 7 53 117 233 0 0);

# > $0DFF
@table_D1 = qw(8192 49152 57344 61440 61952 61952 63456 65535);
@table_D2 = qw(0 0 0 0 0 0 4 44 60 76 80 80 127);

# <= $0DFF
@table_E1 = qw(32768 49152 57344 61952 61952 61952 61952 61952 65535);
@table_E2 = qw(0 0 0 0 0 8 16 24 33 33 33 33 33);

print "Input Registration Name : ";
$_ = <STDIN>; chop($_);
$name = $_;

$e = &keys($_);
print "Xor of Registration Name = $e\n";
@p = &pass($_);
print "Code to Compare = @p\n\n";

print "--- Comparing = $p[0] ---\n";
&init;
$find = &get1($p[0]);

@r1 = hexi($find,6);
push(@result,shift @r1, shift @r1);
$r1=0;
for ($n=$#r1; $n>=0; --$n) {
   $r1 += hex($r1[$n]) * 16**($#r1-$n);
}
$r1 *= 256;
@r2 = hexi($r1,6);
print "--- Temporary result = @result ---\n";
print "--- Processing - @r2\n";

   $i=1;
   while ($i<5) {
      print "\n--- Comparing = $p[$i] ---\n";
      &save;
      $find = &get2($p[$i],$r1);

      @r1 = hexi($find,6);
      $n1 = (($idx-2)*2 - $#result+1)/2;
      for ($n=0; $n<=$n1; ++$n) {
         push(@result,shift @r1,shift @r1);
         push(@r1,"F","F");
      }

      $r1=0;
      for ($n=$#r1; $n>=0; --$n) {
         $r1 += hex($r1[$n]) * 16**($#r1-$n);
      }
      @r2 = hexi($r1,6);
      print "--- Temporary result = @result ---\n";
      print "--- Processing - @r2\n";
      ++$i
   }

   push(@result, @r1);
   print "\n--- Final result = @result ---\n";

   $i=0; $n=3;
   while ($i<$#result) {
      $r1 = $result[$i].$result[$i+1];
      $r1 = hex($r1)+$n;
      $r1 -= 256 if ($r1>256);
      push (@_, $r1);
      $i += 2; ++$n
   }

   print "\n\nRegistration Name : $name\n";
   print "Registration Code : ";
   for $i (0..$#_) {
      $n = $_[$i] ^ $e;
      $r1 = hexa($n);
      $r1 = "0".$r1 if ($n<16);
      print "$r1"
   }


sub get2 {
   my $cd = shift;
   my $i = shift;
   my $aa;

   while ( $i>0 ) {
      &init1;
      $aa = &check($i);
      if ($aa eq $cd) {
         return $i
      }
      $i -= 16;    # Change here if there is no RegCode match
                   # Change it smaller. And took more time to calculate
   }
}

sub get1 {
   my $cd = shift;
   my $i, $aa;

   $i=16777215;

   while ( $i>0 ) {
      &init;
      $aa = &check($i);
      if ($aa eq $cd) {
         return $i
      }
      $i -= 16;    # Change here if there is no RegCode match
                   # Change it smaller. And took more time to calculate
   }
}

sub keys {
   my $data = shift;
   my $len = length($data);
   my ($i, $v, $r);

   for ($i = 0; $i<$len; ++$i) {
      $v = ord(substr($data, $i, 1));
      $r ^= $v
   }
   return $r
}

sub pass {
   my $data = shift;
   my $len = length($data);
   my ($i, $v1, $vn, $r);

   for ($i = 0; $i<6; ++$i) {
      $j = 5;
      $v1 = 2 * ord(substr($data, $i, 1));
      while ($j+$i <= $len ) {
         $vn = ord(substr($data, $j+$i, 1));
         $v1 += $vn;
         $v1 = $v1/256;
         $v1 -= int($v1);
         $v1 = $v1 * 256;
         $j += 5
      }
      push (@_,$v1)
   }
   return @_
}

sub check {
   my $num = shift;
   my ($d1, $n1, $x1, $x2, $x3);

   $d1 = 8 - $div;
   $n1 = int($num / (2 ** $d1)) ;
   $n1 &= 65535;

   ($x1,$x2,$x3) = &table_($n1);

   $div += $x2;
   $idx += int($div/8);
   $div = $div & 7;
   $d1 = 16 - $x2;

   $n1 -= $x1;
   $n1 = int($n1 / (2 ** $d1));
   $n1 += $x3 - 1;

   $comp += $n1;
   $comp -= int($comp/256);

   return $n1
}

sub table_ {
   my $num = shift;
   my ($n1, $n2, $n3, $i);

   if ($comp > 30207) {
      for (@table_A1) {
         if ($_ > $num) {
            $n1 = $table_A1[$i-1];
            $n2 = $i+8;
            $n3 = $table_A2[$n2];
            return $n1,$n2,$n3
         }
         ++$i
      }
   }

   if ($comp > 24063) {
      for (@table_B1) {
         if ($_ > $num) {
            $n1 = $table_B1[$i-1];
            $n2 = $i+6;
            $n3 = $table_B2[$n2];
            return $n1,$n2,$n3
         }
         ++$i
      }
   }

   if ($comp > 13823) {
      for (@table_C1) {
         if ($_ > $num) {
            $n1 = $table_C1[$i-1];
            $n2 = $i+5;
            $n3 = $table_C2[$n2];
            return $n1,$n2,$n3
         }
         ++$i
      }
   }

   if ($comp >  3583) {
      for (@table_D1) {
         if ($_ > $num) {
            $n1 = $table_D1[$i-1];
            $n2 = $i+5;
            $n3 = $table_D2[$n2];
            return $n1,$n2,$n3
         }
         ++$i
      }
   } else {
      for (@table_E1) {
         if ($_ > $num) {
            $n1 = $table_E1[$i-1];
            $n2 = $i+4;
            $n3 = $table_E2[$n2];
            return $n1,$n2,$n3
         }
         ++$i
      }
   }
}

sub hexi {
   my $num = shift;
   my $n = shift;
   my $hexdigit, $i, $x1;
   my @r;
   --$n;

   while ($num>0) {
      $num /= 16;
      $x1 = 16*($num-int($num));
      $hexdigit = (0 .. 9, 'A' .. 'F')[$x1 & 15];
      unshift (@r, $hexdigit);
      $num = int($num)
   }
   $n -= $#r;
   while ($n>0) {
      unshift (@r, "0");
      --$n
   }
   return @r
}

sub hexa {
   my $num = shift;
   my $hexdigit, $i, $x1;
   my $r;

   while ($num>0) {
      $num /= 16;
      $x1 = 16*($num-int($num));
      $hexdigit = (0 .. 9, 'A' .. 'F')[$x1 & 15];
      $r = $hexdigit.$r;
      $num = int($num)
   }
   return $r
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -