5

我想用 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.

我无法获取源代码。我在网上搜索过,似乎Deparse 模块可以对perlcc -B生成的文件进行解析。

任何的想法?谢谢

指:

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

4

1 回答 1

1

这不明显的原因是字节码的存储方式。Deparse 需要有一棵 OP 树,但B::Bytecode只是按 exec 顺序存储操作而不构建树。在 Bytecode.pm 构造它之后,可以通过弄乱PL_main_rootandPL_main_start指针然后调用newPROG它们来对操作树进行线程化。

简而言之,它可以完成,但不能使用标准工具。你必须写一个东西来做,这需要一点 Perl 的知识。

于 2013-02-27T11:46:39.643 回答