Des-ofuscando emails protegidos por CloudFlare!

Haciendo un poco de scraping con perl, me encontre una página en CloudFlare que ofusca/cifra los emails para evitar ser leidos por bots. Por supuesto yo justo necesitaba los emails.  Así que tuve que buscar una solución para esto…

Estas medidas solo aumentan la dificultad para obtener la información, pero no la hacen imposible.

Googleando un poco me encontre con un post de hace 2 años escrito por Jesse Li quien explica como funciona dicha ofuscación y los solventa con JavaScript.

function hex_at(str, index) {
  var r = str.substr(index, 2);
  return parseInt(r, 16);
}
function decrypt(ciphertext) {
  var output = "";
  var key = hex_at(ciphertext, 0);
  for(var i = 2; i < ciphertext.length; i += 2) {
    var plaintext = hex_at(ciphertext, i) ^ key;
    output += String.fromCharCode(plaintext);
  }
  output = decodeURIComponent(escape(output));
  return output;
}

Con un poco de traducción de lenguajes lo escribi en Perl.

#!/usr/bin/perl -w
my $encodedEmail = $ARGV[0];

sub unDecode {
    return my $val = sprintf("%d", hex(substr $_[0], $_[1], 2));
}

sub deCrypt {
    my $email = "";
    my $key = unDecode($_[0], 0);
        for ( my $i = 2; $i < length $_[0] ; $i += 2) {
            my $a = unDecode($_[0], $i);
            my $char = chr(int($a) ^ int($key));
            $email = $email . $char;
        }
    return $email;
}
print deCrypt($encodedEmail) . "\n";

En este punto solo lo integré con mi programa y VOILA!

El código esta disponible en mi github