2013-02-26 11 views
5

Chcę dekompilować kod bajtowy za pomocą podrzędnych, a następnie nie udało mi się. Mam następujący test: (Perl 5.8.9)jak dekompilować bajt kodu perl z perlcc -B?

1) dokonać plik o nazwie t.pl z jednej linii

print 1; 

2) kompilacji aby złożyć plc

$ perl -MO=Bytecode,-H,-ot.plc t.pl 

3) próbować dekompilować

$ perl -MO=Deparse t.plc 
    use ByteLoader 0.06; 
    t.plc syntax OK 

4) użyć modułu Zwięzły $ perl -morfolina = Con cise, -exec t.plc

Nie mogę pobrać kodu źródłowego. Przeszukałem sieć, to seems, że moduł Deparse może odrzucić utworzony plik perlcc -B.

Każdy pomysł? Dzięki

dotyczy:

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

+0

Odpowiedzi na połączone pytanie nie mówią, że można używać Deparse; mówi, że "możesz następnie skompilować go w taki sam sposób, jak B :: Deparse". – ikegami

+0

oh, myślałem, że Deparse może to zrobić. Czy istnieje narzędzie do usuwania kodu bajtowego perla? – deperl

+0

Nie wiem, czy to możliwe, czy nie. Jeśli nie wiesz, czy istnieje narzędzie, czy nie. – ikegami

Odpowiedz

1

Powód ten nie działa w oczywisty sposób z powodu jak Bytecode jest przechowywany. Deparse musi tam być drzewem OP, ale B::Bytecode po prostu zapisuje operacje op w porządku exec bez budowania drzewa. Możliwe jest powiązanie drzewa op po tym, jak Bytecode.pm je skonstruuje, rozmywając się ze wskaźnikami PL_main_root i PL_main_start, a następnie wywołując na nich newPROG.

Podsumowując, można wykonać , ale nie za pomocą standardowych narzędzi. Musiałbyś napisać coś, żeby to zrobić, a to wymagałoby odrobiny wiedzy o wnętrznościach Perla.

+0

Myśląc o tym jeszcze raz, myślę, że źle to zrozumiałem. 'newPROG' (lub raczej' op_linklist') przyjmuje drzewo op i określa kolejność exec; nie może zamienić listy operacji w porządku exec w drzewo. To jeszcze bardziej utrudnia. –

Powiązane problemy