Come determinare quale tipo di crittografia è stato utilizzato? [duplicare]

1

Suono un gioco Android che sembra inviare il punteggio più alto del giocatore in un formato crittografato. qualche cosa come (f11cca35236eebbdc26a0ce45876d117) un codice a 32 caratteri provato MD5 ma nessun risultato trovato. voglio sapere c'è un modo in cui posso decodificarlo o almeno trovare il metodo di crittografia? grazie

    
posta PITFAR 29.05.2014 - 13:50
fonte

2 risposte

3

Prima di tutto, sembra che tu stia cercando di imbrogliare durante una partita. Non farlo.

Ora alcuni retroscena su cosa sta succedendo. Diamo prima un'occhiata alla differenza tra crittografia e hashing:

  • La crittografia è il processo di codifica delle informazioni in modo che possa essere nuovamente decodificato in base alle informazioni corrette sul processo di codifica (come una chiave di crittografia). Viene utilizzato per comunicazioni sicure in modo che il destinatario capisca un messaggio (e sia in grado di recuperare l'originale) ma terze parti non sono in grado di leggere il messaggio. Il processo è simile a questo:

    "Messaggio" »{formula segreta}» (scramble) »{inverso di formula segreta}» "Messaggio"

    In altre parole, ciò che accade può essere eliminato se si conosce il segreto. Ovviamente in questo scenario ciò che il segreto è è piuttosto importante. Nella crittografia computerizzata di solito non è la formula stessa che è segreta, sono i valori utilizzati nella formula che sono le chiavi segrete. Maggiori informazioni su questo in un secondo.

  • L'hashing è il processo o la riduzione di un blob di informazioni fino a un valore singolo (in genere di una lunghezza fissa molto più breve dell'originale) che è univoco per l'input specificato. Questo può essere usato per confermare l'integrità di un messaggio ma in realtà non contiene il messaggio. Questo assomiglia a questo:

    [Value1] » 7a258c461b48c794c0b5110b35382d1e
    [Value2] » 926e0eddb765d66502eac40a4ead9409
    

    L'hashing è spesso usato per memorizzare le password. Si noti che questa è un'operazione a senso unico. Dato lo stesso input, otterrai sempre lo stesso hash 1 :

    [Value1] » 7a258c461b48c794c0b5110b35382d1e
    [Value1] » 7a258c461b48c794c0b5110b35382d1e
    

    Ma non si può sapere solo dall'hash l'input 2 .

A parte questo, MD5 è un algoritmo di hash. Non è probabile che il tuo gioco invii i dati hash al server perché i dati non sarebbero interpretabili. Non avrebbe detto loro quale fosse il tuo punteggio! Puoi praticamente escludere tutto ciò che è un algoritmo di hashing.

Ora ci sono due modi fondamentali in cui un processo di crittografia come nel primo punto in alto può funzionare.

  1. Lo stesso valore segreto può essere utilizzato sia per crittografare e decrittografare il contenuto.

    Questo è il solito schema per cose come documenti protetti da password.

    • L'utente A utilizza {password} per crittografare un documento.
    • Il documento crittografato viene diffuso.
    • Solo gli utenti che sanno {password} possono decifrare e leggere il contenuto.
  2. Una coppia di valori abbinati può essere generata in modo tale che una metà della coppia venga utilizzata per crittografare il contenuto che solo l'altra metà della coppia può decifrare.

    • L'utente A genera una coppia di chiavi.
    • Poi passano intorno alla metà pubblica della coppia di chiavi, ma mantengono la parte privata a loro stessi.
    • Qualsiasi utente può crittografare documenti o valori utilizzando la chiave pubblica dell'utente A, ma i dati risultanti possono essere decrittografati solo dall'utente A utilizzando la propria chiave privata.

Se il gioco utilizza un modello di password di base come in # 1, la password e l'algoritmo utilizzati saranno codificati in modo difficile da qualche parte nel codice sorgente e sbavati da qualche parte nell'app reale. Chiunque faccia qualche lavoro di dissezione sarà in grado di capire quale sia quel valore e decrittografare tutti gli ulteriori messaggi che intercettano. Spero che la tua applicazione NON lo abbia fatto!

Il modo corretto sarebbe per la crittografia a chiave pubblica come in # 2 sopra. Lo sviluppatore del software avrebbe generato una coppia di chiavi per il loro software. La metà pubblica sarebbe incorporata nel software da qualche parte e tutti i valori possono essere codificati usando quella chiave prima di essere inviati sul filo. Una volta raggiunti i server dello sviluppatore, i dati possono essere decodificati utilizzando la metà privata della chiave.

Conclusione

Se lo sviluppatore ha utilizzato la tecnologia appropriata per il lavoro, non sarà possibile decrittografare i dati inviati perché non si dispone della chiave privata necessaria per decodificarlo. La chiave pubblica può essere seppellita nel software da qualche parte, ma questo non ti porterà i dati.

Se non hanno svolto correttamente il loro lavoro, potrebbero esserci tracce nel software stesso che ti forniscono abbastanza informazioni per decifrare i dati da solo.

L'identificazione effettiva del metodo e dell'algoritmo specifico utilizzato in questo caso va oltre lo scopo di questa risposta e viene lasciato al lettore per ulteriori ricerche. Speriamo che questa panoramica delle possibilità fornirà una migliore comprensione del tipo di cose che stai cercando.

2 Ecco perché l'uso degli hash salati è fondamentale per la sicurezza dei sistemi di password!

2 Nota Ho detto solo dall'hash perché è possibile indovinare o utilizzare tabelle predefinite per sapere quale input ha generato un hash, ma un l'hash sicuro in sé non conterrà effettivamente i dati utilizzati per generarlo.

    
risposta data 29.05.2014 - 14:53
fonte
1

Va bene. Questo è abbastanza bello. Un ottimo modo per conoscere la crittografia.

Poche cose, non proprio la tua risposta.

Anche se sai come è stato crittografato, non saresti in grado di fare nulla con esso. La cosa più importante è la chiave utilizzata per crittografarlo. Quello che hai postato potrebbe essere un semplice hash del testo, crittografato con byte hash o codificato.

Se vuoi solo scoprire come è stato fatto, puoi provare a eseguire un dubugger sul kernel di Android e setacciare le chiamate di sistema per vedere quale lib di ssl usano se non sono integrate nel loro codice. Sono sicuro che a quel livello, puoi anche provare a eseguire un debugger sul loro processo e guardare le chiamate di sistema.

Guarda questo , e questo e fai ancora qualche ricerca su google.

La mia altra domanda per te è, come vedi che viene inviato? Wireshark, tcpdump ecc ...?

Se è così, potresti vedere i pacchetti https e questo non è il racconto dell'intera storia.

Esamina mitmProxy . Hanno una parte sul loro sito per fare un gioco di hacking come stai dicendo. Qualcosa come questo .

Consiglierei di fare un'esperienza con questo.

Tutto sommato, se viene crittografato lato client (il tuo androide) è possibile capire come eventualmente annullarlo. Potrebbe non valerne la pena per un gioco, ma una grande esperienza di apprendimento non di meno.

    
risposta data 29.05.2014 - 15:24
fonte

Leggi altre domande sui tag