Username: Password: oppure
C/C++ - Salvare dati nel file dell'eseguibile
Forum - C/C++ - Salvare dati nel file dell'eseguibile - Pagina 4

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
AldoBaldo (Member)
Guru


Messaggi: 708
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 1:17
Domenica, 07/01/2024
Credo di aver portato a termine "Sghèra gninta". Come promesso, ecco tutto il papocchio.
Ho aggirato il problema che non ero in grado di risolvere seguendo la linea iniziale, evidentemente incongrua rispetto alle mie possibilità di gestione.


AldoBaldo ha allegato un file: sg_1_3.zip (315467 bytes)
Clicca qui per scaricare il file


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1371
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:32
Domenica, 07/01/2024
Aldo, sono contento che tu abbia aggirato l'ostacolo (codici scaricati in attesa di esame).

Vorrei comunque continuare sull'argomento in domanda, modificare/salvare i dati in un eseguibile, visto che il problema password è universale.

L'approcio che esporrò soddisfa i seguenti requisiti:
1) password/pin non facilmente identificabili nel sorgente anche se inutile  visto che si cambiano poi
2) password/pin non identificabili nell'eseguibile se ispezionato
3) possibilità di cambio password/pin solo se si conosce quella contenuta nell'eseguibile
4) password/pin incasellate in un chiave
5) conoscendo la chiave si possono recuperare le password/pin
6) per l'uso non serve la chiave

Funzionamento:
Si sta creando un programma che abilita delle funzionalità attraverso l'inserimento di password/pin.
Le password/pin vengono incasellate a pettine in una chiave nota solo al programmatore.
Non c'è bisogno di conoscere la chiave per l'utilizzo della app.
Questo il codice che simula il programma che sarà modificato (allegato anche progetto CODE::BLOCKS 1 Crea programma.cbp):
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdint.h>
  5.  
  6. #define kVar1 "ApBaCsDsEwFoGrHd" // spiegazione in cercaInEseguibile
  7. #define kVar2 "ApBaCsDsEwF\0G\0H\0" // spiegazione in cercaInEseguibile
  8.  
  9. int main() {
  10.  
  11.     printf ("%s = ", kVar1);
  12.     for (int i = 1; i < 16; i += 2)
  13.         printf ("%c", kVar1[i]);
  14.  
  15.     printf ("\n%s = ", kVar2);
  16.     for (int i = 1; i < 16; i += 2)
  17.         printf ("%c", kVar2[i]);
  18.  
  19.     while( '\n'!=getchar() );
  20.     return 0;
  21. }



Il programma dovrà contenere le password di default incasellate nella chiave, vedi sotto.
Il secondo programma (allegato anche progetto CODE::BLOCKS 2 CercaInEseguibile.cbp) serve solo per far inserire agli utenti le password/pin senza che ne restino traccia, perché sovrascritte nell'eseguibile.

Uso:
Dopo averlo compilato si lancia: CercaInEseguibile.exe che chiede la vecchia password e se la si conosce permette di modificare quelle contenute nell'eseguibile programma.exe (che deve esitere nel percorso voluto)

Logica:
Le password/pin sono incasellate nella chiave così:
Codice sorgente - presumibilmente C/C++

  1. I caratteri chiave del test sono:               A B C D E F G H
  2. la password deve essere incasellata a pettine:   p a s s w o r d
  3. risultato incasellato:                          ApBaCsDsEwFoGrHd



La chiave A B C D E F G H può essere complicata a piacere.
Il programma scansiona l'eseguibile alla ricerca del primo carattere della chiave, nell'esempio 'A', se lo incontra memorizza nella stringa passw1 il byte succesivo che potrebbe essere il primo carattere di una password, avanza ancora di un byte e se corrisponde al secondo carattere della chiave 'B', aggiunge alla stringa passw1 il byte succesivo che potrebbe essere il secondo carattere di una password se invece la 'B' non c'è si riparte con la ricerca di 'A'. la password è trovata solo se tutti i caratteri della chiave sono stati trovati in sequenza a step di due.

Mi scuso per la rozzezza del codice in C allegato, ammetto di conoscerlo in modo approssimato.

Per testare il funzionamento dei codici inclusi nell'allegato, compilare prima 1 Crea programma.c che crea programma.exe
poi compilare  2 CercaInEseguibile.c ed eseguire CercaInEseguibile.exe

Verrano mostrate le password/pin in chiaro ma memorizzate offuscate all'interno di programma.exe (solo per test)
Verrà richiesto l'inserimento di passw1 (ben nota visto che nel test è mostrata)
Se corretta si potranno inserire le nuove password/pin
Verrà richiesto di controllare l'esattezza di quanto inserito e se si conferma programma.exe viene modificato.

Ringrazio AldoBaldo per lo stimolo dato e per alcune righe di codice.
L'approcio può essere estremizzato a piacere, con spaziatura diversa, cifratura delle password o chiavi ecc ecc.


Carlo ha allegato un file: CercaInEseguibile.zip (5489 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 08/01/2024 alle 14:15


in programmazione tutto è permesso
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 708
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 15:28
Domenica, 07/01/2024
In effetti ho fatto qualcosa di simile. Anche se non ho innestato nulla "a pettine", ho scombinato i dati scambiando i byte pari con quelli dispari, "rovesciando" la stringa risultante e sostituendo i caratteri alfanumerici originali con quelli presenti in una tabella di raffronto. Per farlo con maggiore immediatezza ho predisposto un programmino dedicato che prepara direttamente il codice C con l'array delle stringhe risultanti.

Tutte le impostazioni che può essere interessante modificare sono ora raccolte nel file impostazioni.c, con commenti che spiegano come e perché possono essere personalizzate.

Certo, col metodo sul quale ho ripiegato i dati non possono essere modificati se non ricompilando il tutto, ma al momento mi accontento.

Per il resto, ho cercato di migliorare un po' l'interfaccia e ho scritto un PDF che illustra il senso del programmino (ammesso che possa avere un senso per altri a parte me).

Se vorrai dirmi cosa ne pensi, leggerò volentieri i tuoi commenti.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1371
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:20
Domenica, 07/01/2024
Testo quotato

Postato originariamente da AldoBaldo:
In effetti ho fatto qualcosa di simile. Anche se non ho innestato nulla "a pettine", ho scombinato i dati scambiando i byte pari con quelli dispari, "rovesciando" la stringa risultante e sostituendo i caratteri alfanumerici originali con quelli presenti in una tabella di raffronto.



A mio avviso la questione non è come criptare la password, ma come modificarla nell'eseguibile senza lasciare tracce.
La tua password criptata è ancora incasellabile nella chiave e modificabile con CercaInEseguibile.exe, la password estratta sarà criptata e dovrà essere decodificata secondo le tue modalità. Una volta variata e ricodificata il programma CercaInEseguibile.exe la sovrascrive nell'eseguibile Programma.exe senza ricompilarlo.

Ho letto con attenzione il pdf molto eusastivo e dato un'occhiata ai sorgenti, non ho provato nulla.
Penso che il poter inserire sotto agli occhi di tutti dati sensibili senza che questi possano coglierli sia indispensabile e il tuo programma estende il consueto: [Password? ******]
Anche l'inserimento dei timer/data limita la possibilità di un uso non autorizzato.

Ultima modifica effettuata da Carlo il 09/01/2024 alle 15:07


in programmazione tutto è permesso
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 708
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:42
Mercoledì, 28/02/2024
Ho poi deciso di lasciar perdere questo progetto, non perché non mi sia riuscito di terminarlo (in effetti, l'ho terminato e da un punto di vista "tecnico" funziona pure piuttosto bene), ma perché si è poi rivelato ben poco vantaggioso in termini di semplificazione dei procedimenti che avrebbe dovuto contribuire ad agevolare. Eh, va be', mica tutte le ciambelle possono uscire col buco, eh!


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo