我试图捏造一些代码,并使用一个简短的“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字节行导致脚本抛出“摇摆不定”。
答案 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/
(您忽略的返回值除外)。摆脱[
和]
!