我想用deparse反编译字节码,但是失败了。我执行以下测试:(perl 5.8.9)
1)创建一个名为t.pl的单行文件
print 1;
2)编译得到plc文件
$ perl -MO=Bytecode,-H,-ot.plc t.pl
3)尝试反编译
$ perl -MO=Deparse t.plc
use ByteLoader 0.06;
t.plc syntax OK
4)使用简明模块$ perl -MO=Concise,-exec t.plc
1 <0> enter
2 <;> nextstate(main 174 y.pl:1) v
3 <0> pushmark s
4 <$> const(IV 1) s
5 <@> print vK
6 <@> leave[1 ref] vKP/REFC
y.plc syntax OK
with this method, we can got some valuable info, but it is hard to read.
我拿不到源代码。我在网上搜索了一下,发现解析器模块可以从perlcc -B
生成的文件中提取出来。
有什么想法吗?谢谢
参考:
http://ask.slashdot.org/story/05/11/11/0129250/protecting-perl-code
发布于 2013-02-27 19:46:40
这种方法不起作用的原因是字节码的存储方式。解析器需要有一棵操作树,但B::Bytecode
只按执行顺序存储操作,而不构造树。在Bytecode.pm构造op树之后,可以通过处理PL_main_root
和PL_main_start
指针,然后在它们上调用newPROG
来线程化op树。
简而言之,这是可以做到的,但不能使用标准工具。要做到这一点,您必须编写一些代码,而这需要一些Perl内部的知识。
https://stackoverflow.com/questions/15083825
复制相似问题