Sto provando a creare uno script python che disassembri un binario (un exe di Windows per la precisione) e ne analizzi il codice. Ho bisogno della capacità di prendere un certo buffer e di estrarre una sorta di struttura contenente informazioni sulle istruzioni al suo interno.Disassemblare con Python - nessuna soluzione facile?
Ho già lavorato con libdisasm in C e ho trovato l'interfaccia abbastanza intuitiva e comoda. Il problema è che la sua interfaccia Python è disponibile solo tramite SWIG e non riesco a farla compilare correttamente sotto Windows.
Nell'aspetto della disponibilità, diStorm fornisce un'interfaccia semplice, ma fornisce solo il Mnemonico di ogni istruzione, e non una struttura binaria con enumerazioni che definiscono il tipo di istruzione e quali no. Questo è abbastanza scomodo per il mio scopo, e richiederà molto di quello che vedo come tempo trascorso che avvolge l'interfaccia per adattarla alle mie esigenze.
Ho anche guardato BeaEngine, che di fatto fornisce l'output di cui ho bisogno, una struttura con informazioni binarie relative ad ogni istruzione, ma la sua interfaccia è davvero strana e contro-intuitiva e si blocca praticamente istantaneamente quando viene fornita con argomenti sbagliati. Il tipo CTypes di arresti anomali di ultimate-to-your-python.
Quindi, sarei felice di conoscere altre soluzioni, che richiedono meno tempo rispetto a djgcc o mingw per rendere SWIGed libdisasm o scrivere un wrapper OOP per diStorm. Se qualcuno ha delle indicazioni su come compilare il libdisasm SWIG, o, meglio ancora, un binario compilato (pyd o dll + py), mi piacerebbe sentirlo/averlo. :)
Grazie in anticipo.