📄 winrar20.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 + -