document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #!/usr/bin/perl -w
  2.     require Digest::MD5;
  3.     my $base = $ARGV[0];
  4.     my $arg1 = $ARGV[1] || die((\\t”x3).”Deb2Droid v0.1 by Xianur0\\n\\nUse: ./export.pl [pool dir] [deb]\\n);
  5.     my @packages = ($arg1);
  6.     our @extraidos = ();
  7.     our @depsinstaladas = ();
  8.     my $install = 1;
  9.     system(mkdir var && mkdir var/lib && mkdir var/lib/dpkg && mkdir var/lib/dpkg/info”);
  10.     open STATUS,>>var/lib/dpkg/status”;
  11.     sub copiar {
  12.     my ($origen,$destino) = @_;
  13.     open(FILES,<.$origen) || return 0;
  14.     my $contenido = “”;
  15.     binmode FILES;
  16.     while(<FILES>) {
  17.     $contenido .=$_;
  18.     }
  19.     close(FILES);
  20.     open FILED,>.$destino;
  21.     binmode FILED;
  22.     print FILED $contenido;
  23.     close(FILED);
  24.     }
  25.     sub locatedep {
  26.     my ($dir,$dep) = @_;
  27.     $dir .=/if($dir !~ /\\/$/);
  28.     my @files = <$dir*>;
  29.     foreach my $file (@files) {
  30.     my $tmpfile = $file;
  31.     $tmpfile =~ s/^.+\\///g;
  32.     if(-d $file) {
  33.     if($file !~ /^\\.+$/){
  34.     return 1 if(locatedep($file,$dep));
  35.     }
  36.     }
  37.     elsif(-f $file && $dep eq substr($tmpfile,0,length($dep)) && $file =~ /u?deb$/) {
  38.     print[-] Posible paquete encontrado:.$dep.?.$file.\\n;
  39.     print “ar x “.$file.&& (tar -xzvf data.tar.gz > archivos.list) && tar -xzvf control.tar.gz 2>&1\\n;
  40.     if($install == 1){
  41.     print[-] Extrayendo paquete…\\n;
  42.     return 1 if(extract($file,$dep));
  43.     }
  44.     }
  45.     }
  46.     return 0;
  47.     }
  48.     sub in_array
  49.     {
  50.     my ($arr,$search_for) = @_;
  51.     my %items = map {$_ => 1} @$arr; # create a hash out of the array values
  52.     return (exists($items{$search_for}))?1:0;
  53.     }
  54.  
  55.     sub finddeps {
  56.     my $searchpackagename = “”;
  57.     $searchpackagename = $_[0] if($#_ >= 0);
  58.     $searchpackagename = “” unless defined $searchpackagename;
  59.     open CONTROL,<control” || return;
  60.     open MD5,<md5sums”;
  61.     open CONFFILES,<conffiles”;
  62.     my $control = “”;
  63.     my $md5 = “”;
  64.     my $conffiles = “”;
  65.     return unless(fileno(MD5));
  66.     while(<CONTROL>) {
  67.     $control.=$_;
  68.     }
  69.     close(CONTROL);
  70.     my $packagename = “”;
  71.     $packagename = $1 if($control =~ /Package: ([^\\r\\n]+)/);
  72.     print “Paquete:.$searchpackagename.=?.$packagename.\\n;
  73.     if($searchpackagename ne “” && $searchpackagename ne $packagename) {
  74.     return 0;
  75.     }
  76.     if(fileno(MD5)){
  77.     while(<MD5>) {
  78.     $md5.=$_;
  79.     }
  80.     close(MD5);
  81.     }
  82.     my $status = “Status: install ok not-installed”;
  83.     if(fileno(CONFFILES)) {
  84.     while(<CONFFILES>) {
  85.     my $f = $_;
  86.     $f =~ s/[\\r\\n]+//g;
  87.     open F,..$f;
  88.     my $cf = “”;
  89.     while(<F>){
  90.     $cf .= $_;
  91.     }
  92.     $conffiles.=” “.$f.” “.Digest::MD5::md5_hex($cf).\\n;
  93.     }
  94.     close(CONFFILES);
  95.     $control =~ s/(Description:\\s+)/Conffiles:\\n$conffiles$1/;
  96.     $status = “Status: install reinstreq half-configured”;
  97.     }
  98.     checkmd5($md5);
  99.     my $depsstring = “”;
  100.     $depsstring = $1 if($control =~ /Depends: ([^\\r\\n]+)/);
  101.     copiar(“archivos.list”,”var/lib/dpkg/info/.$packagename..list”);
  102.     copiar(“postinst”,”var/lib/dpkg/info/.$packagename..postinst”);
  103.     copiar(“preinst”,”var/lib/dpkg/info/.$packagename..preinst”);
  104.     copiar(“postrm”,”var/lib/dpkg/info/.$packagename..postrm”);
  105.     copiar(“prerm”,”var/lib/dpkg/info/.$packagename..prerm”);
  106.     open MD5OUT,>>var/lib/dpkg/info/.$packagename..md5sums”;
  107.     print MD5OUT $md5;
  108.     $md5 = “”;
  109.     if($depsstring eq “”){
  110.     print[-] Sin dependencias… continuando…\\n;
  111.     return 1;
  112.     }
  113.     my @deps = ($depsstring =~ /[^\\,]+/g);
  114.     my $i = 0;
  115.     for $dep (@deps) {
  116.     $dep =~ s/^\\s+//g;
  117.     my $version = $dep;
  118.     $version =~ s/(.+\\()//g;
  119.     $version =~ s/\\)//g;
  120.     my $condicion = “”;
  121.     if($version=~/^(>|>=|<=|==|<)\\s+([\\:\\.\\d]+)$/){
  122.     ($condicion,$version) = ($1,$2);
  123.     } else {$version=";}
  124.    $dep =~ s/\\s+.+$//g;
  125.    $deps[$i] = $dep;
  126.    $i++;
  127.    }
  128.    print “[-]Instalando dependencias….\\n\\n”;
  129.    for $dep (@deps) {
  130.    my $cdep = $#deps;
  131.    if(!in_array(\\@depsinstaladas,$dep)){
  132.    push(@depsinstaladas,$dep);
  133.    print “[-] Buscando paquete: “.$dep.”…\\n”;
  134.    if(!locatedep($base,$dep)) {
  135.    die(“\\n[!] No se pudo resolver la dependencia: “.$dep.”\\n”);
  136.    }
  137.    }
  138.    }
  139.    print “[-] Agregando a status…\\n”;
  140.    $control =~s/^Package\\:([^\\r\\n]+)/Package:$1\\n$status/;
  141.    print $control.”\\n”;
  142.    print STATUS $control.”\\n\\n”;
  143.    print “[-] Instaladas!\\n”;
  144.    return 1;
  145.    }
  146.    sub extract {
  147.    my ($p,$packname) = @_;
  148.    if(in_array(\\@extraidos,$p)){
  149.    return 1;
  150.    }
  151.    push(@extraidos,$p);
  152.    my $descarte = “”;
  153.    system(“ar x “.$p.” && (tar -xzvf data.tar.gz > archivos.list) && tar -xzvf control.tar.gz 2>&1″);
  154.    my $estado = finddeps($packname);
  155.    system(“rm md5sums 2>&1 | rm control 2>&1 | rm archivos.list 2>&1 | rm debian 2>&1 | rm debian-binary 2>&1 | rm conffiles 2>&1 | rm postinst 2>&1 | rm preinst 2>&1 | rm postrm 2>&1 | rm prerm 2>&1 | rm data.tar.gz 2>&1 | rm control.tar.gz 2>&1 | echo “);
  156.    return $estado;
  157.    }
  158.    sub checkmd5 {
  159.    my $md5 = $_[0];
  160.    my @lineas = split(/[\\r\\n]/,$md5);
  161.    for $linea (@lineas) {
  162.    my ($md5,$objeto) = ($linea =~ /^([\\w\\d]+)\\s+(.+)$/);
  163.    open OBJETO,”<”.$objeto;
  164.    binmode OBJETO;
  165.    my $bin = “”;
  166.    while(<OBJETO>){
  167.    $bin .=$_;
  168.    }
  169.    my $md5real = Digest::MD5::md5_hex($bin);
  170.    unless($md5 eq $md5real) {
  171.    die(“\\n[!] MD5 incorrecto: “.$md5.”!=”.$md5real.” en: ${objeto}\\n”);
  172.    } else {
  173.    print “\\r[-] Probando MD5: ${md5} ${md5real} ${objeto}\\r”;
  174.    }
  175.    }
  176.    print “\\n[-] MD5′s correctos!\\n”;
  177.    }
  178.    for $package (@packages){
  179.    extract($base.$package);
  180.    }
  181.    print “[-] Paquete y dependencias extraidos correctamente!\\n”;
');