Non c'è modo di automatizzarlo facilmente in qualsiasi modo utile, perché i protocolli sono progettati dagli esseri umani. In quanto tali, in realtà non seguono alcun modello o regole impostati. Dovrai mettere il lavoro del cervello in te stesso per sezionarli.
Tuttavia, ci sono alcuni trucchi:
- Usa Wireshark per separare le singole conversazioni e identificare i modelli di comunicazione di alto livello.
- Utilizzare un editor esadecimale "intelligente" per analizzare i pacchetti. Hex Workshop è una buona scelta (anche se non è gratuita) poiché consente di definire le strutture in stile C sui dati.
- Utilizza uno strumento di diff per identificare i cambiamenti tra i pacchetti.
- Utilizza IDA (o un altro strumento di analisi statica) per identificare dove vengono utilizzate le API di rete (ad es. Winsock) per inviare / ricevere dati e capire cosa stanno facendo.
- Utilizzare ImmunityDebugger, OllyDbg, WinDbg o un altro debugger per tracciare l'esecuzione in un ambiente live. Ciò è particolarmente utile quando si inviano pacchetti di test a un'app client o server, perché è possibile vedere dove i test di validazione passano / falliscono e perché. L'utilizzo di valori distintivi in questi pacchetti ti consente di vedere quali tipi di dati fluiscono in diverse parti del codice, permettendoti di identificare la loro funzione.
Alla fine, devi ancora essere un decente ingegnere reverse per lavorare con questo. Se non hai mai provato a fare qualcosa di simile, ti suggerisco di provarlo con un semplice protocollo apertamente documentato e di lavorare all'indietro - prova a capire come funziona, quindi confronta le tue osservazioni con la documentazione.