Ho bisogno di invertire l'algoritmo CRC/Checksum implementato dall'eseguibile di Windows CE. Essendo un protocollo proproriale, non dice nulla sull'algoritmo CRC/checksum. Tuttavia, v'è l'interfaccia della console che riporta corretto checksum/calcolato e posso costruisco i miei messaggi con bit casuali se il protocollo messaggio è corretto:Metodi per inchiodare l'algoritmo CRC/checksum a 16 bit utilizzato dall'eseguibile di Windows CE?
ho osservato che,
Modifica singolo bit nel messaggio cambia byte di checksum completamente.
Algoritmo sembra essere dipendente dalla posizione in quanto ho alimentato alcuni singoli messaggi a 1 bit in varie posizioni di dati del messaggio con il resto dei bit zero e tutte le console di tempo riportavano checksum differente. Se fosse semplice somma di controllo additiva, il checksum sarebbe stato identico.
ho applicato XOR comune, LRC, additivi algoritmi di checksum, comuni polinomi CRC (Standerd, CCITT, X-modem) e attraversato [CRC Reverse saggio di ingegneria] [2], ma purtroppo non posso andare oltre dedurre la polinomiale perché il tipo di messaggio è fisso, quindi non è possibile creare un singolo messaggio a 1 bit.
Le mie domande:
Ci sono le proprietà/checksum algoritmo CRC che posso testare contro i messaggi per determinare se algoritmo è checksum o polinomiale basato CRC?
Esiste un modo per collegare un messaggio di errore visualizzato nello smontaggio del programma con istruzioni di montaggio corrosivo?
Quali sono i modi per eseguire il debug/pinpoint del codice di disassemblaggio nel momento in cui viene segnalato il checksum corretto sulla console? Discarica della memoria o qualcosa del genere?
questo dovrebbe essere etichettato [reverse-engineering] pure, penso. – moooeeeep
Sostituito il tag "algorithm" con "Reverse-Engineering" –