[Cascavel-pm] Teste para "Perl Job Developer"

Solli Honorio shonorio em gmail.com
Terça Janeiro 2 04:07:02 PST 2007


Nilson, obrigado pela ajuda... e já que você inicio estou com algumas
dúvidas, sedo elas :

On 1/2/07, Nilson Santos Figueiredo Junior <acid06 em gmail.com> wrote:
>
> On 1/1/07, Solli Honorio <shonorio em gmail.com> wrote:
> > Já o "Senior Perl Developer" tem que explicar o código :
> > s;(?:SEEKING)?;PERLqny~%|fsyx%~tz&;?$^X=~m.\w+$.
> > :DEVELOPERS;s"$&"Ktsf"i;s^.^chr ord($&)-5^eg;$\=$/;print||" ;) "
> > ... e este eu compreendi nada.
>
> Nem souberam fazer o golf ser cross platform. Fonality--.
>
> Enfim, basta rodar um "perl -MO=Deparse" no código e o próprio Perl
> desobfusca pra você, ele só perde as constantes. Um código equivalente
> ao acima é o seguinte:
>
>   s/(?:SEEKING)?/PERLqny~%|fsyx%~tz&/ ? $^X =~ /\w+$/ : 'DEVELOPERS';
>   s/$&/Ktsf/i;
>   s/./chr ord($&) - 5;/eg;
>   $\ = $/;
>   ' ;) ' unless print $_;
>
> O golf não é cross platform porque ele assume que a variável $^X vai
> terminar em "perl", o que nem sempre vai ser verdade (às vezes, nem
> mesmo em um Unix isso será verdade).
>
> Mas vamos lá, linha a linha.
>
>   s/(?:SEEKING)?/PERLqny~%|fsyx%~tz&/ ? $^X =~ /\w+$/ : 'DEVELOPERS';


Ah... agora ví o operador ternário '?' que executará o "$^X =~ /\w+$/" ou
apenas atribuirá "DEVELOPERS" de acordo com o retorno de
"s/(?:SEEKING)?/PERLqny~%|fsyx%~tz&/", que acredito eu sempre será true.

Essa linha pode ser quebrada em duas partes:
>
>   s/(?:SEEKING)?/PERLqny~%|fsyx%~tz&/


 o que significa "(?:SEEKING)?" ? Eu não consegui encontrar alguma coisa
sobre este agrupamento.

Só serve pra colocar a string "PERLqny~%|fsyx%~tz&" na variável $_
> (ela substitui a string vazia por isso).
>
>   $^X =~ /\w+$/
>
> Essa parte serviria pra popular a variável especial $& com a palavra
> "perl", porém, sob Windows, ela popula a variável com a palavra "exe".
> Isso acontece porque a expressão regular tenta pegar a última
> seqüência de caracteres alfanuméricos dentro da variável $^X, que
> contém o caminho do binário do perl. No Windows, o conteúdo de $^X
> será algo como "C:\perl\bin\perl.exe" (última seqüência = "exe") no
> Linux isso será algo como "/usr/bin/perl" (última seqüência = "perl").
>
> A variável $& será populada com isso porque ela guarda o valor do
> último match de uma expressão regular. Na prática, seu uso é
> desaconselhado pois ela infere problemas de performance em todo o
> aplicativo do seu uso pra frente.


Sério ? Eu não tinha este informação de performance... então não é
aconcelhável utilizar o $& nos programas ? Deve apenas fazer a atribuição
"my $a = $&" !

Em seguida, vem a linha:
>
>   s/$&/Ktsf/i;
>
> Que seriviria pra substituir o "PERL" na string anterior em "Ktsf"
> (funciona pois tem /i ou seja, case-insensitive).
>
> Por fim, vem a substituição propriamente dita:
>
>   s/./chr ord($&) - 5;/eg;
>
> Que simplesmente substitui cada um dos caracteres pelo caracter de
> código 5 unidades menor na tabela ASCII. Por exemplo, o caracter 'f'
> (102) será substituído pelo caracter 'a' (97). O lado direito da
> expressão regular é executado por causa da flag /e.
>
> Por fim, a linha
>
>   $\ = $/;
>
> É apenas o toque final, pra imprimir o \n no final da mensagem. A
> variável $\ guarda o "output record separator" que é um conjunto de
> caracteres que sera usado como sufixo de todos os print()s. A variável
> $/ é o "input record separator" que contém o caracter \n por padrão.
>
> Depois, vem um print() que faz com que a mensagem seja impressa na tela.


E a mensagem será "Fonality wants you!".... que meigo hein ?

Na seção de Obfuscation do PerlMonks tem alguns bem mais complexos e
> difíceis de enteder que esses.


Temos que começar de algum lugar, e uma das minhas promessas para este ano é
estudar estes Obfuscation, e quem sabe no final do ano publicar o meu
primeiro código obfuscation :).

-Nilson Santos F. Jr.
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070102/eb747260/attachment-0001.html 


Mais detalhes sobre a lista de discussão Cascavel-pm