2013-02-26 11 views
5

Voglio decompilare il bytecode con deparse, quindi ho fallito. faccio il seguente test: (perl 5.8.9)come decompilare il bytecode perl da perlcc -B?

1) fare un file chiamato t.pl con la singola linea

print 1; 

2) compilo per ottenere il file plc

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

3) cercare di decompilare

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

4) utilizzare il modulo Concise $ perl -MO = Con cise, -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. 

Non riesco a ottenere il codice sorgente. Ho cercato sul web, è seems che il modulo Deparse può estrapolare il file prodotto perlcc -B.

Qualche idea? Grazie

riferisce:

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

+0

Le risposte alla domanda collegata non dicono che è possibile utilizzare Deparse; dice "potresti quindi decomprimerlo allo stesso modo di B :: Deparse". – ikegami

+0

oh, ho pensato che Deparse possa farlo. Quindi, esiste uno strumento che può eseguire il bytecode perl deparse? – deperl

+0

Non so se può o no. Se non sai se c'è uno strumento o no. – ikegami

risposta

1

La ragione per questo non funziona nel modo ovvio è causa di come Bytecode è memorizzato. Deparse ha bisogno di un albero di OP, ma B::Bytecode memorizza gli op in ordine exec senza costruire l'albero. È possibile eseguire il threading della struttura ad albero dopo che Bytecode.pm lo costruisce, facendo confusione con i puntatori PL_main_root e PL_main_start e quindi chiamando newPROG su di essi.

In breve, è possibile eseguire , ma non con gli strumenti standard. Dovresti scrivere qualcosa per farlo, e questo richiederebbe un po 'di conoscenza del coraggio di Perl.

+0

Ripensandoci, penso di averlo capito nel modo sbagliato. 'newPROG' (o meglio,' op_linklist') prende l'albero op e determina l'ordine exec; non può trasformare una lista di operazioni in ordine exec in un albero. Questo rende ancora più difficile. –

Problemi correlati