如何从perlcc -B反编译perl字节码?

时间:2013-02-26 07:39:51

标签: perl

我想用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 =简明,-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.

我无法获取源代码。我在网上搜索了seems,Deparse模块可以解析perlcc -B生成的文件。

有什么想法吗?感谢

是指:

http://ask.slashdot.org/story/05/11/11/0129250/protecting-perl-code

1 个答案:

答案 0 :(得分:1)

这种方法不起作用的原因是因为Bytecode的存储方式。 Deparse需要有一个OP树,但是B::Bytecode只是以exec顺序存储ops而不构造树。在Bytecode.pm构造它之后,可以通过弄乱PL_main_rootPL_main_start指针,然后在它们上面调用newPROG来对op树进行线程化。

简而言之,可以完成,但不能使用标准工具。你必须写一些东西来做这件事,这需要对Perl胆量有一点了解。