Quello che stai facendo è chiamato reverse engineering un eseguibile. Non è insolito per una persona che sta codificando con difficoltà una password nel codice sorgente (una strategia di sicurezza orribile) per fare un tentativo amatoriale di impedire che appaia nei dati statici intatti. Tuttavia, la password PAssw0rd potrebbe non essere affatto correlata a quella attuale. Le varie risposte del programma sono ovviamente intenzionali, quindi PAssw0rd potrebbe essere un'aringa deliberata.
Diversi strumenti sono comuni negli sforzi di reverse engineering.
- Il comando "file" che prende il percorso del file come primo parametro in modo da poter determinare (nella maggior parte dei casi) quale tipo di eseguibile si ha.
- Disassemblatori che mostrano ESATTAMENTE ciò che fa l'eseguibile ma è difficile da leggere per quelli che non scrivono codice assembly su quella specifica architettura o hanno esperienza con il disassemblaggio.
- I decompilatori come Boomerang, Hex-rays e Snowman possono fornire una maggiore leggibilità, ma non ripristinano i nomi delle variabili effettive o la sintassi del programma originale e non sono affidabili al 100%, specialmente nei casi in cui gli ingegneri che hanno creato il eseguibile testato con questi pacchetti e cercato di offuscare ulteriormente la sicurezza.
- Diagrammi o tabelle di flusso dei dati. Non conosco nessuno strumento gratuito per farlo automaticamente, ma uno script Python o Bash sopra l'analizzatore di testo dell'output dell'assembly (che può essere scritto in sed o Perl) può essere utile.
- Matita e carta, che ci crediate o no, per annotare i flussi e le idee
Un approccio comune consiste nel cercare due elementi nel codice decompilato o disassemblato.
- Funzioni crittografiche, come un algoritmo di hash o di cifratura
- L'utente richiede la password e la successiva lettura del file
voce utente
Questi sono i due endpoint nel flusso di dati. Dovrai eseguire il back-trace dal punto in cui la password immette gli algoritmi di crittografia e inoltrare la voce utente della password, sperando di trovare dove si incontrano i due estremi.
Una volta tracciato il percorso tra la voce utente e i componenti di autenticazione, sarai in grado di vedere il meccanismo in mezzo. Se la sicurezza è stata eseguita correttamente, sarà un valore hash correttamente creato e il tuo tentativo terminerà male, ma ho il sospetto che, essendo un esercizio, i risultati favorevoli saranno possibili.