Domanda:
Inversione del protocollo di rete
Jamie
2013-07-15 03:31:51 UTC
view on stackexchange narkive permalink

Ho un DVR che invia video su Ethernet utilizzando il proprio protocollo TCP proprietario. Voglio scrivere un modulo VLC per visualizzare il video, piuttosto che il DxClient.exe fornito. Ho catturato il traffico in WireShark e ho tentato di decodificare il client con IDA Pro, da quello che posso dire che il client esegue una sorta di autenticazione handshake, il DVR invia quindi 2 pacchetti di rete (sempre di 1514 byte), il client invia un TCP ACK e altri 2 pacchetti vengono trasmessi, ecc. Ecc ... per sempre. Da quello che posso dire, il client utilizza la libreria AVIFIL32 di Microsoft per decomprimere i pacchetti in quelli che essenzialmente diventano frame di file AVI.

Il problema è che non capisco come questi frame siano codificati o se sono anche frame AVI . Qualcuno può aiutarmi, ecco il payload dei dati da 2 pacchetti:

http://pastebin.com/2VDu2Tc2

http: / /pastebin.com/L3Zi3VqU

Sareste in grado di fornire un piccolo file di cattura pcap, che include l'handshake?
https://www.dropbox.com/s/dbtj3jy7d4s4z6p/cctv%201.pcapng https://www.dropbox.com/s/1zf1ssoyo7ur4sk/DxClient2.7.1-ENG.exe e l'eseguibile DxClient. Il protocollo sembra abbastanza mal progettato (a mio parere) l'uso di TCP invece di UDP per lo streaming multimediale sembra una decisione sbagliata. Penso che WireShark lo raccolga come traffico HTTP perché sto usando la porta 8080
Tre risposte:
Steeve
2013-07-17 12:42:02 UTC
view on stackexchange narkive permalink

Puoi provare lo strumento Netzob. Questo è uno strumento dedicato ai protocolli di reverse engineering.

Puoi anche dare un'occhiata su CANAPE: http://www.contextis.com/research/tools/canape/

samuirai
2013-07-15 19:44:41 UTC
view on stackexchange narkive permalink

Non posso darti una soluzione specifica, anche se posso dirti uno strumento per rendere più semplice il reverse engineering di un protocollo.

Scapy è uno strumento di manipolazione dei pacchetti Python. Uno dei problemi che hai è che WireShark non conosce quei pacchetti. Con Scapy è molto facile creare e sezionare pacchetti strani / propri. Questo ti aiuterà sicuramente quando inizi a decodificare con IDA come viene costruito un pacchetto.

Ecco un esempio di definizione di livello UDP:

  class UDP (Packet): name = "UDP" fields_desc = [ShortEnumField ("sport", 53, UDP_SERVICES ), ShortEnumField ("dport", 53, UDP_SERVICES), ShortField ("len", None), XShortField ("chksum", None),]  

Ora puoi creare il tuo livello e prova a dare un senso ai dati del pacchetto decodificando il processo di creazione del pacchetto con IDA e ricostruendo il protocollo con scapy.

PSS
2013-07-15 19:19:53 UTC
view on stackexchange narkive permalink

Da quanto ho raccolto di recente, DxClient è progettato come client per la tecnologia DVR Netview. Solo guardando le funzionalità di DxClient, è chiaro che è più del semplice trasferimento binario di stream in formato AVI. Penso, è lecito ritenere, che venga utilizzato un protocollo di trasferimento e controllo piuttosto proprietario. 2 fotogrammi che hai fornito non sono sufficienti per aiutarti. Penso che dovresti cercare di concentrarti sul rovesciamento del cliente. Con abbastanza tempo speso, dovresti essere in grado di approfondire il modo in cui è costruito ogni telaio.

Ti consiglio di familiarizzare con i principi generali del reverse engineering dei protocolli di rete. Un articolo sul blog An Overview of Protocol Reverse-Engineering è un ottimo punto di partenza.

Sono piuttosto inesperto in questo, ed è solo perché l'eseguibile importa funzioni come AVIFileInit, AVIFileOpenA, AVIMakeCompressedStream ecc.Credo che stia usando file AVI. Dato quello che dici, il protocollo potrebbe essere un po 'più avanzato in quanto consente cose come Pan Tilt Zoom e cambiare le visualizzazioni della telecamera.
Esattamente. Il protocollo molto probabilmente includerà più flussi e tutti i tipi di controlli. Per quanto ne so, la funzionalità del client è piuttosto ampia. La cosa migliore è impostare i punti di interruzione su send () e recv () e vedere cosa fa con i dati del messaggio: come lo mette insieme e lo smonta. In questo modo sarai in grado di identificare i componenti chiave del telaio personalizzato.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...