Perl库:标识符太长

时间:2016-02-24 18:01:41

标签: perl

我试图捏造一些代码,并使用一个简短的“pm”库。代码在cgi-bin中。但是我得到了“标识符太长”的错误......但它解密的行只有1016个简单的字符。

这是图书馆:

package dml;

use Filter::Simple;

FILTER {
    $_=~tr/[hjndr 9_45|863!7]/[acefbd2461507938]/;
}

实际的程序本身......

BEGIN {
    $path = 'D:/home/cristofa/';
}

use lib $path;
use dml;
! 9_44! 96476_6_68!h9d9d6666669n4!4d454_4 4|4 9n4!4d4 9d4j45634d6|6_9d4 63 ...
no dml; 

由于显而易见的原因,我缩短了代码。

除了“标识符太长”之外,我可以更改其他位,(我认为删除filter :: simple并单独使用tr~)然后获取“NO is is allowed”指的是'no dml '线。我尝试将数据放入$ _ ='! 9_44 ......'但是这会重新改变一个只读值!!!

如果你很好奇,上面的前两个数字应该转换为“3d”。我一次两个地解决了解码后的字符串,因此上面的十六进制是“=”,(因为解码文件的第一行是“$ f ='xyz';” - 我遇到了试图替换的问题美元回到变量 - 我最终在脚本中使用“= $ f ='xyz';”,然后使用$ data = ~s / = \ $ / \ $ / g;转换时)

但是我的“困境”是为什么当我有另一个程序使用一个解码2678字节而没有问题的库时,1016字节行导致脚本抛出“摇摆不定”。

1 个答案:

答案 0 :(得分:5)

$ perl -E'
    $_ = "! 9_44! 96476_6_68!h9d9d6666669n4!4d454_4 4|4 9n4!4d4 9d4j45634d6|6_9d4 63 ...";
    tr/[hjndr 9_45|863!7]/[acefbd2461507938]/;
    say;
'
3d24663d27687474703a2f2f7777772e636f61646d656d2e636f6d2f6c61796f75742f6d79d...

这确实是一个非常长的标识符。

看起来像十六进制。让我们尝试将序列从十六进制转换为字节,并在UTF-8终端上进行渲染。

$ perl -E'
    $_ = "! 9_44! 96476_6_68!h9d9d6666669n4!4d454_4 4|4 9n4!4d4 9d4j45634d6|6_9d4 63 ...";
    tr/[hjndr 9_45|863!7]/[acefbd2461507938]/;
    $_ = pack("H*", $_);
    say;
'
=$f='http://www.coadmem.com/layout/my<garbage>

宾果!您忘记了过滤器中的$_ = pack("H*", $_);

顺便说一句,tr/[abc]/[def]/相当于tr/][abc/][def/,相当于tr/abc/def/(您忽略的返回值除外)。摆脱[]