2012-08-22 18 views
12

Dopo aver letto How do I protect Python code?, ho deciso di provare un modulo di estensione davvero semplice su Windows. Ho compilato il mio modulo di estensione su Linux in precedenza, ma questa è la prima volta che lo compilo su Windows. Mi aspettavo di ottenere un file .dll, ma invece, ho ottenuto un file .pyd. Docs dice che sono simili, ma deve avere una funzione init[insert-module-name]().Quanto è difficile decodificare i file .pyd?

È sicuro assumere, è difficile da decodificare come file dll. In caso contrario, qual è la loro durezza di decodificare in una scala dal file .pyc ai file .dll?

+0

Se si dice "Sì, i file .pyd sono dll", qual è il punto nel chiedere se sono meno difficili da decodificare rispetto ai file DLL? Questo è ancora il codice nativo ... –

+0

@MatteoItalia Sto attraversando un periodo difficile per capire quanto siano differenti. Ad esempio, i file .pyc sono anch'essi compilati, ma sono più facili da decodificare rispetto ai file dll. – yasar

+1

@ yasar11732 I file .pyc non sono nativi. – delnan

risposta

9

Sono, come hai già scoperto, equivalenti ai file DLL con una determinata struttura. In linea di principio, sono altrettanto difficili da decodificare, sono codici macchina, hanno bisogno di pochissimi metadati e il codice potrebbe essere stato ottimizzato oltre il riconoscimento.

Tuttavia, la struttura richiesta e il fatto che molte funzioni gestiranno PyObject * s e altri tipi CPython ben definiti, potrebbero avere qualche effetto. Non sarà di grande aiuto con la mappatura del codice assembly in C (se possibile, diventa più difficile a causa di macro specifiche di CPython). Il codice che interagisce maggiormente con i tipi di Python apparirà molto diverso dal codice che manipola le strutture C (e relativamente gonfio). Ciò potrebbe renderlo ancora più difficile da comprendere, oppure potrebbe dare via un codice che non fa nulla di interessante e consente a un tecnico del reverse di saltare su di esso e ottenere i tuoi segreti commerciali in precedenza.

Nessuna di queste preoccupazioni si applica a pezzi di codice che sono codice C puro (cioè non interagiscono con Python). E probabilmente ne hai molti. Quindi non dovrebbe fare una differenza significativa alla fine.

1

Sono fondamentalmente codice nativo. Ma poiché ogni funzione ha liste di argomenti divertenti, potrebbe essere più difficile vedere cosa fa ciascuna funzione. Direi che sono duri come dll, se non di più.