Domanda [C++] BruteForce arduino

Stato
Discussione chiusa ad ulteriori risposte.

Keywatt

Utente Silver
24 Ottobre 2009
121
19
13
95
Salve a tutti, ho cercato ma non sono riuscito a trovare un sezione adatta e visto che il linguaggio di arduino è simil-C++ ho deciso di chiedere qui. Stavo cercando di scrivere un algoritmo che, inserito un certo numero di lettere/numeri che vengono poi immagazzinati all'interno di un array ( che a differenza del C++ non bisogna specificare la dimensione subito ) , dovrebbe calcolare tutte le possibili combinazioni fino a trovare la "password" inserita tramite il tastierino di arduino che è formato da numeri da 0 a 9 , # , * , A, B, C, D. Come posso strutturare l'algoritmo che genera tutte le combinazioni? attraverso dei cicli for bisognerebbe sapere in anticipo la dimensione dell'array per fare tanti cicli quanti sono i caratteri inseriti ( ?! ) avete suggerimenti? Grazie.
 
il linguaggio di arduino è simil-C++
Il wiring è un set di librerie scritte in c++

Premetto che non mi è chiaro cosa tu voglia fare
Da quello che ho capito ti basta creare un array di puntatori(char) e in un ciclo "crei" le stringhe con i caratteri che hai a disposizone, la vera domanda è, perchè proprio con arduino?
 
Prima parte
Ciao, premetto che ti consiglierei di leggere attentamente cos'è Arduino e a cosa serve.
Assicurati di aver letto attentamente prima di passare alla seconda parte della risposta

Seconda parte
Farò finta che tu intenda creare un bruteforcer in C++.
Prima cosa: l'attacco bruteforce da avviare è "online" o "offline"?

Esempi pratici:
Online: attacco bruteforce in cui l'attaccante è intenzionato a ottenere una password in comunicazione con un server
Offline: attacco bruteforce in cui l'attaccante non è intenzionato a ottenere una password in comunicazione con un server
Se l'attacco è online, la velocità d'attacco è molto limitata dal tempo di destinazione tra computer a server e server a computer (detta nabbosamente: è molto limitata dalla connessione internet) e la quantità di potenza di computazione. Per migliorare la velocità in questo caso non c'è tanto da fare.
Se l'attacco è offline, la velocità d'attacco è limitata solo dalla quantità di potenza di computazione. Per migliorare la velocità in questo caso si può fare qualcosa.

Terza parte
Deciditi su quale piattaforma devi creare il bruteforcer: Windows, Linux, o altro...

Quarta parte (salta questo passaggio se vuoi fare un attacco online a wordlist)
Implementa in un programma a parte l'algoritmo per il bruteforcing: itera (scorri) ogni password possibile. Iterarle è come contare i numeri:
- Inizia dallo "0"
- Incrementi affinchè non ottieni il "9"
- Incrementi al numero successivo e lo reimposti a 10.
- Incrementi ancora un'altra volta il primo numero: 10, 11, 12, 13
- Incrementi quello successivo: 20 ... 30
Per vedere se il procedimento è andato bene, devi stampare il risultato ad ogni scorrimento della password.

Creare un bruteforcer online (siti, ...)
- Scarica una libreria come cURL per il networking.
- Linka cURL con il compiler.
- Implementa l'algoritmo del punto 4, e ad ogni cambiamento di password, dipendentemente dalle tue esigenze: esegui una richiesta di tipo http get/post.
- Controlla le stringhe interne della pagina dopo aver effettuato il login (esempio, "password errata", "login effettuato con successo", eccetera...)

Creare un bruteforcer online a wordlist (siti, ...)
- Scarica una libreria come cURL per il networking.
- Linka cURL con il compiler.
- Leggi dal file di testo la wordlist, carica tutto il suo contenuto in un'array e scorri ogni password.
- Per ogni password che scorri, dipendentemente dalle tue esigenze: esegui una richiesta di tipo http get/post.
- Controlla le stringhe interne della pagina dopo aver effettuato il login (esempio, "password errata", "login effettuato con successo", eccetera...)

Creare un bruteforcer offline
- Determina la password da testare.
- Implementa l'algoritmo del punto 4.
- Scorri ogni password, e ad ogni volta che ne iteri una, la confronti con la determinata password.​
 
Il wiring è un set di librerie scritte in c++

Premetto che non mi è chiaro cosa tu voglia fare
Da quello che ho capito ti basta creare un array di puntatori(char) e in un ciclo "crei" le stringhe con i caratteri che hai a disposizone, la vera domanda è, perchè proprio con arduino?

Prima parte
Ciao, premetto che ti consiglierei di leggere attentamente cos'è Arduino e a cosa serve.
Assicurati di aver letto attentamente prima di passare alla seconda parte della risposta

Seconda parte
Farò finta che tu intenda creare un bruteforcer in C++.
Prima cosa: l'attacco bruteforce da avviare "offline"

Esempi pratici:
Offline: attacco bruteforce in cui l'attaccante non è intenzionato a ottenere una password in comunicazione con un server

Terza parte
Deciditi su quale piattaforma devi creare il bruteforcer: Arduino

Quarta parte (salta questo passaggio se vuoi fare un attacco online a wordlist)
Implementa in un programma a parte l'algoritmo per il bruteforcing: itera (scorri) ogni password possibile. Iterarle è come contare i numeri:
- Inizia dallo "0"
- Incrementi affinchè non ottieni il "9"
- Incrementi al numero successivo e lo reimposti a 10.
- Incrementi ancora un'altra volta il primo numero: 10, 11, 12, 13
- Incrementi quello successivo: 20 ... 30
Per vedere se il procedimento è andato bene, devi stampare il risultato ad ogni scorrimento della password.

Creare un bruteforcer offline
- Determina la password da testare.
- Implementa l'algoritmo del punto 4.
- Scorri ogni password, e ad ogni volta che ne iteri una, la confronti con la determinata password.​

Intendi di creare un file con tutte le possibili password e poi controllarle una ad una?
Io avevo pensato di farle creare al programma temporaneamente .
Esempio:
password impostata: 123A
il bruteforcer vede la lunghezza della password ( 4 caratteri ) e crea tutte le possibili combinazioni per ottenere la password
quindi al primo passaggio sarà a 0000 poi 0001 poi 0002 ecc , se la password fosse solo numerica basterebbe fare un ciclo for semplice ma dato che ci sono anche dei caratteri come posso implementarlo?
 
Intendi di creare un file con tutte le possibili password e poi controllarle una ad una?
Io avevo pensato di farle creare al programma temporaneamente .
Esempio:
password impostata: 123A
il bruteforcer vede la lunghezza della password ( 4 caratteri ) e crea tutte le possibili combinazioni per ottenere la password
quindi al primo passaggio sarà a 0000 poi 0001 poi 0002 ecc , se la password fosse solo numerica basterebbe fare un ciclo for semplice ma dato che ci sono anche dei caratteri come posso implementarlo?
Infatti ho spiegato sia il metodo che intendi tu, sia il metodo per una lista di password preimpostate, ma sei sicuro di aver letto tutta la risposta e di aver afferrato il concetto?
Rifletti meglio su questa parte:
Implementa in un programma a parte l'algoritmo per il bruteforcing: itera (scorri) ogni password possibile. Iterarle è come contare i numeri:
- Inizia dallo "0"
- Incrementi affinchè non ottieni il "9"
- Incrementi al numero successivo e lo reimposti a 10.
- Incrementi ancora un'altra volta il primo numero: 10, 11, 12, 13
- Incrementi quello successivo: 20 ... 30
Per vedere se il procedimento è andato bene, devi stampare il risultato ad ogni scorrimento della password.​
devi procedere nello stesso modo
Sì, è proprio quello che intendevo e che forse dovevo sottolineare meglio.

Forse ti potrei dare più suggerimenti o consigli se mi dicessi che tipo di attacco vuoi fare (online o offline).
 
calcolare tutte le possibili combinazioni fino a trovare la "password" inserita tramite il tastierino di arduino che è formato da numeri da 0 a 9 , # , * , A, B, C, D. Come posso strutturare l'algoritmo che genera tutte le combinazioni? attraverso dei cicli for bisognerebbe sapere in anticipo la dimensione dell'array per fare tanti cicli quanti sono i caratteri inseriti ( ?! ) avete suggerimenti?
Gestisci la password come una stringa, riservandoti lo spazio necessario a contenere il numero di caratteri scelto, poi sfrutti l'aritmetica dei puntatori per passare al carattere successivo.
Per incrementare il singolo carattere puoi scegliere di crearti un'astrazione come si deve oppure appoggiarti ad un array che contiene il tuo set di caratteri. Nel primo caso potresti proprio vedere la password come una stringa di simboli (sfruttando le classi) altrimenti, visto che è un programma abbastanza semplice, fai finta di usare il C e ti fai qualcosa del tipo: char symbols[] = {'0', '1', '2', ..., 'a', 'b', 'c', ..., '*', '#', ...}; (l'elemento successivo lo ottieni incrementando l'indice dell'elemento attuale).


se la password fosse solo numerica basterebbe fare un ciclo for semplice ma dato che ci sono anche dei caratteri come posso implementarlo?
Anche se fossero solo numeri, sarebbe una porcata gestire tutta la password come un unico intero. Quindi la differenza tra solo numeri e "altro" (eg. numeri + lettere + simboli) dovrebbe essere poco rilevante. Se è questo che ti blocca, puoi iniziare a implementare un algoritmo che scorre tutte le password formate da numeri e poi ragioniamo su come estenderlo, ma ricordati di lavorare su stringhe.

Fai conto che saranno un pugno di righe di codice, ti si può aiutare poco senza risolvere il problema al posto tuo. Inizia a pensarci su e a provare a fare qualcosa, se poi proprio non riesci vediamo...
 
Arduino non è certo la scelta migliore per questo tipo di cose. Il micro è lento e fare un bruteforcing con quello non è una pratica adeguata.
Certo non hai tutto l'alfabeto da testare, ma non si tratta di una piattaforma atta a questo. Difficilmente otterrai risultati accettabili.
 
Stato
Discussione chiusa ad ulteriori risposte.