Domanda Risolto Reversing hex to ascii

Stato
Discussione chiusa ad ulteriori risposte.
Ultima modifica:
Sei sicuro esista davvero una key valida @A77ila e non sia "inutile"?
Ti stai sbagliando, la chiave esiste ma non è detto che sia hardcodata.

La stringa che inserisci nel primo campo in pratica è composta da 4 caratteri, perchè gli altri vengono sovrascritti dalla stringa che inserisci nel secondo input.
Il registro 8-bit al contiene la prima lettera della stringa, nel caso ti riferissi a questo.

Se anche si passassero i primi due controlli la call successiva effettua un controllo differente
I controlli sono due, call non sottintende alcun nuovo controllo bensì chiama il secondo blocco di codice.

Ci sono due offset: 0x402165 e 0x402169.
Quelli sono indirizzi di memoria, non offset. L'offset è la distanza posizionale tra un indirizzo di memoria e l'altro.
Messaggio unito automaticamente:

Mettiamo il caso che l'ultimo controllo sia quello a 0x4012BD
Tra quello che hai postato non c'è alcun riferimento a questo indirizzo di memoria, non sono sicuro di che controllo tu stia parlando.
 
  • Mi piace
Reazioni: A77ila
@nullptr non ho voglia di polemizzare francamente.

Comunque mi stavo riferendo all'offset inteso come valore che viene utilizzato come base per il calcolo dello spiazzamento. 0x402165 è la locazione dove si trova il primo carattere.

Il registro 8-bit al contiene la prima lettera della stringa, nel caso ti riferissi a questo.

Contiene la prima lettera della stringa, ma il mio riferimento era un altro. Il primo carattere è in 0x402165 mentre l'ultimo (della prima stringa inserita) è 0x402165 + 3, in quanto la locazione successiva è già l'inizio della seconda stringa immessa in input nell'altro campo 0x402169.

Ho fatto riferimento ad una call che richiama la funzione alla quale probabilmente facevi riferimento tu:

Codice:
00401308 | E8 44000000              | call <uno.sub_401351>

dove si nota la differenza nel check; sopra veniva utilizzato 0x45 e qui 0x44 (indirizzi 0x004012B1 e 0x00401381):

Codice:
004012A9 | 8A81 65214000            | mov al,byte ptr ds:[ecx+402165]                |prendo il quarto carattere del nome nel mio caso 7 in hex 37 e lo metto in al
004012AF | 34 16                    | xor al,16                                      |xor con 16    37^16=21
004012B1 | 04 45                    | add al,45                                      |aggiungo 45    21+45=66
004012B3 | 02C1                     | add al,cl                                      |aggiungo cl che al momento vale 3(sarebbe il contatore di prima) 66+3=69
004012B5 | 32C1                     | xor al,cl                                      |xor con cl(sempre 3) 69^3=6A
004012B7 | 8A99 69214000            | mov bl,byte ptr ds:[ecx+402169]                |sposto in bl il quarto carattere della pass nel mio caso "j" che è proprio 6A
004012BD | 3AC3                     | cmp al,bl

Codice:
00401379 | 8A81 65214000            | mov al,byte ptr ds:[ecx+402165]                |
0040137F | 34 16                    | xor al,16                                      |
00401381 | 04 44                    | add al,44                                      |
00401383 | 02C1                     | add al,cl                                      |
00401385 | 32C1                     | xor al,cl                                      |
00401387 | 8AA1 69214000            | mov ah,byte ptr ds:[ecx+402169]                |
0040138D | 3AC4                     | cmp al,ah
 
  • Mi piace
Reazioni: A77ila

A77ila

Utente Silver
31 Agosto 2014
207
12
28
99
Salve ragazzi,
chiedo anticipatamente scusa se la domanda può sembrare stupida,ma onestamente non sapevo nemmeno come cercare.
Ho da poco iniziato a fare reversing e mi stavo divertendo con alcuni crackme(quelli molto stupidi per intederci),dove viene chiesto nome e password
Ora dopo aver capito la routine di generazione del seriale(passaggi stupidi,qualche xor,qualche addizione),ho cercato sia di creare un seriale partendo da un nome casuale (perchè in questo crackme vengono usati alcuni caratteri del nome per generare il seriale),sia il contrario,entrambe le volte mi sono trovato davanti allo stesso problema,prendendo ad esempio un carattere "s" che in hex corrisponde a 73 facendo le varie xor e addizioni mi genera un hex che non corrisponde a nessun ascii,quindi non so cosa inserire nel riquadro.
Provando con vari caratteri sono riusciti a ricavarmi alcuni hex che potevo convertire in ascii dopo le varie xor e addizioni,e il programma effettivamente funzionava,ma non credo che andare con numeri a caso sia il modo corretto di risolvere il problema.
Per riassumere,non ho capito come devo comportarmi quando partendo da un nome utente casuale ad esempio "Luca" prendo un carattere alla volta(in esadecimale ovviamente l=6c, u=75... ecc ) ci svolgo sopra alcuni operazione e ottengo un hex che non può piu essere convertito in ascii
Dove sbaglio,che nozioni mi mancano?
Vi ringrazio anticipatamente
 
Credo di aver capito che intendi, anche se non ne sono sicuro.
In primis, sei certo di aver compreso bene i dati sui quali opera questo algoritmo?
Scopo del crackme è individuare un seriale? Che dati in input devi inserire?

Se è un crackme in genere puoi anche diffonderlo (tranne se esplicitamente viene chiesto di non farlo). In caso linka/uppa.
Se non puoi copia/incolla la parte di codice coinvolta nella generazione/validazione della chiave (usando il tag CODE).
 
"Luca" prendo un carattere alla volta(in esadecimale ovviamente l=6c, u=75... ecc )
Nota che L != l. Sono due caratteri diversi.

Stai cercando di modificare le istruzioni assembly del programma in modo che nome e seriale specificati da te vengano registrati? Potresti postare il codice con cui vengono convalidati?
 
Ultima modifica:
Allora premetto che nelle regole viene date assoluta libertà di movimento,cambiando i jmp diventa facile,però visto che molti spesso richiedono di non patchare il codice,ho cercato di trovare il seriale mi viene chiesto un nome ed un password,questi sono quelli che ho inserito
1.png


Codice:
00401221 | BB 69214000              | mov ebx,uno.402169                             | ebx:"jyyj", 402169:"jyyj" sposto in ebx la pass che ho inserito
00401226 | 8BD0                     | mov edx,eax                                    |
00401228 | 33C9                     | xor ecx,ecx                                    |azzero ecx
0040122A | 8A81 65214000            | mov al,byte ptr ds:[ecx+402165]                |sposto in al la prima lettera del nome nel mio caso "A" 41 in hex
00401230 | 04 12                    | add al,12                                      |aggiungo 12 41+12=53
00401232 | 32C1                     | xor al,cl                                      |xor con cl che in questo momento vale 0 quindi non cambia nulla
00401234 | 04 15                    | add al,15                                      |aggiungo 15 ad al 53+15=68
00401236 | 04 02                    | add al,2                                       |aggiungo 2 ad al 68+2=6A
00401238 | BB 69214000              | mov ebx,uno.402169                             | ebx:"jyyj", 402169:"jyyj" metto la pass in ebx
0040123D | 8A240B                   | mov ah,byte ptr ds:[ebx+ecx]                   |sposto in ah il primo carattere della pass nel mio caso "j" 6A in hex
00401240 | 3AC4                     | cmp al,ah                                      |vedo se sono uguali,nel mio caso si,infatti al=6A ah=6A
00401242 | 0F85 C9000000            | jne uno.401311                                 |se sono diversi mostro il messaggio di errore
00401248 | 41                       | inc ecx                                        |incrementa ecx che prima era 0
00401249 | 40                       | inc eax                                        |incrementa eax prima era 0
0040124A | 83F9 03                  | cmp ecx,3                                      |ecx viene incrementanto fino a 3 quindi testa le prime 3 lettere
del nome,le mie sono state scelte dopo varie prove casuali,ho scelto caratteri che dopo queste operazioni mi facciano ottenere hex che possono essere convertiti in ascii se cosi non fosse io non saprei che scrivere nel riquadro pass,e da qui sorge il mio dubbio,perchè nonostante questi caratteri siano stati scelti apposta
non mi permettono comunque di completare l'intero programma,infatti nella generazione della 2 parte del seriale ottengo hex non convertibili
0040124D | 75 DB                    | jne uno.40122A                                 |codice spazzattura
0040124F | 83F9 03                  | cmp ecx,3                                      |
00401252 | 75 D6                    | jne uno.40122A                                 |
00401254 | 83F9 03                  | cmp ecx,3                                      |
00401257 | 75 D1                    | jne uno.40122A                                 |
00401259 | 83F9 03                  | cmp ecx,3                                      |
0040125C | 75 CC                    | jne uno.40122A                                 |
0040125E | 83F9 03                  | cmp ecx,3                                      |
00401261 | 75 C7                    | jne uno.40122A                                 |
00401263 | 83F9 03                  | cmp ecx,3                                      |
00401266 | 75 C2                    | jne uno.40122A                                 |
00401268 | 83F9 03                  | cmp ecx,3                                      |
0040126B | 75 BD                    | jne uno.40122A                                 |
0040126D | 83F9 03                  | cmp ecx,3                                      |
00401270 | 75 B8                    | jne uno.40122A                                 |
00401272 | 83F9 03                  | cmp ecx,3                                      |
00401275 | 75 B3                    | jne uno.40122A                                 |
00401277 | 83F9 03                  | cmp ecx,3                                      |
0040127A | 75 AE                    | jne uno.40122A                                 |
0040127C | 83F9 03                  | cmp ecx,3                                      |
0040127F | 75 A9                    | jne uno.40122A                                 |
00401281 | 83F9 03                  | cmp ecx,3                                      |
00401284 | 75 A4                    | jne uno.40122A                                 |
00401286 | 83F9 03                  | cmp ecx,3                                      |
00401289 | 75 9F                    | jne uno.40122A                                 |
0040128B | 83F9 03                  | cmp ecx,3                                      |
0040128E | 75 9A                    | jne uno.40122A                                 |
00401290 | 83F9 03                  | cmp ecx,3                                      |
00401293 | 75 95                    | jne uno.40122A                                 |
00401295 | 83F9 03                  | cmp ecx,3                                      |
00401298 | 75 90                    | jne uno.40122A                                 |
0040129A | 83F9 03                  | cmp ecx,3                                      |
0040129D | 75 8B                    | jne uno.40122A                                 |
0040129F | 83F9 03                  | cmp ecx,3                                      |
004012A2 | 75 86                    | jne uno.40122A                                 |
004012A4 | 83F9 03                  | cmp ecx,3                                      |
004012A7 | 75 81                    | jne uno.40122A                                 |
004012A9 | 8A81 65214000            | mov al,byte ptr ds:[ecx+402165]                |prendo il quarto carattere del nome nel mio caso 7 in hex 37 e lo metto in al
004012AF | 34 16                    | xor al,16                                      |xor con 16    37^16=21
004012B1 | 04 45                    | add al,45                                      |aggiungo 45    21+45=66
004012B3 | 02C1                     | add al,cl                                      |aggiungo cl che al momento vale 3(sarebbe il contatore di prima) 66+3=69
004012B5 | 32C1                     | xor al,cl                                      |xor con cl(sempre 3) 69^3=6A
004012B7 | 8A99 69214000            | mov bl,byte ptr ds:[ecx+402169]                |sposto in bl il quarto carattere della pass nel mio caso "j" che è proprio 6A
004012BD | 3AC3                     | cmp al,bl                                      |vedo se sono uguali al e bl
004012BF | 75 50                    | jne uno.401311                                 |se non sono uguali mostro il messaggio serial sbagliato
004012C1 | 41                       | inc ecx                                        |incremento ecx
Ora come dicevo prima la mia scelta non è stata casuale,però qua sorge un problema,anzi due,il programma prende solo i primi 4 caratteri del nome(anche per questo non ne ho inseriti di piu) i successivi controlli li fa sulla pass che deve essere di 7 caratteri anche se il contatore si incrementa fino ad 8(credo sia uno scherzone di chi ha fatto il programma,quindi in realtà anche scrivendo il keygen non penso che il programma possa essere lasciato intatto al 100%,ma lasciamo perdere il mio problema sorge molto prima adesso ve lo vado ad illustare).
Eravamo rimasti all'incremento di ecx,come ho detto prima dal nome vengono presi solo 4 caratteri,ora i prossimi confronti prendono i caratteri dalla campo password infatti adesso vediamo che sposta in al la "j" in hex 6A,xor con 16    6A^16=7C
poi aggiunge 45    7C+45=C1,aggiunge cl che vale 4    C1+4=C5,xor di nuovo con cl    C5^4=C1,ora sposta in bl il quinto carattere delle pass,se ricordate io ne ho inseriti solo 4 qundi ovviamente non trova niente e ci sposta 0.
Facciamo però finta che io lo voglio calcolare,so che deve essere uguale a C1,ora C1 corrisponde ad Á,già inserendo questo valore(copiandolo e incollandolo),il programma già non va perchè questa Á me la conta come C3, ma lasciando stare questo il problema ho cambiato il valore dello stack manualmente e ho fatto finta fossero uguali,e procediamo al prossimo carattere;prendo la "y"(secondo char della pass) in hex vale 79.
Ripetiamo il ciclo xor con 16   79^16=6F,aggiungo 45    6F+45=B4,aggiungo cl che vale 5     B4+5=B9,xor con cl B9^5=BC.
Ed eccoci al mio fatidico problema,ora come sappiamo abbiamo un cmp al,bl se sono uguali il ciclo continua,bl deve essere un carattere della password,ma per far si che sia uguale ad "al" deve bl essere BC che in ascii non corrisponde a niente.
Ora questo problema si è presentato solo ora,ma stamattina avevo provato a mettere come mio username "sasi" e non riuscivo a superare nemmeno il primo ciclo,perchè quando andavo a calcolare la pass,mi uscivano solamente valori hex che non potevano essere tradotti in ascii,valori insomma che io non potevo inserire da tastiera.

004012C2 | 83F9 08                  | cmp ecx,8                                      |codice spazzattura
004012C5 | 75 E2                    | jne uno.4012A9                                 |
004012C7 | 83F9 08                  | cmp ecx,8                                      |
004012CA | 75 DD                    | jne uno.4012A9                                 |
004012CC | 83F9 08                  | cmp ecx,8                                      |
004012CF | 75 D8                    | jne uno.4012A9                                 |
004012D1 | 83F9 08                  | cmp ecx,8                                      |
004012D4 | 75 D3                    | jne uno.4012A9                                 |
004012D6 | 83F9 08                  | cmp ecx,8                                      |
004012D9 | 75 CE                    | jne uno.4012A9                                 |
004012DB | 83F9 08                  | cmp ecx,8                                      |
004012DE | 75 C9                    | jne uno.4012A9                                 |
004012E0 | 83F9 08                  | cmp ecx,8                                      |
004012E3 | 75 C4                    | jne uno.4012A9                                 |
004012E5 | 83F9 08                  | cmp ecx,8                                      |
004012E8 | 75 BF                    | jne uno.4012A9                                 |
004012EA | 83F9 08                  | cmp ecx,8                                      |
004012ED | 75 BA                    | jne uno.4012A9                                 |
004012EF | 83F9 08                  | cmp ecx,8                                      |
004012F2 | 75 B5                    | jne uno.4012A9                                 |
004012F4 | 83F9 08                  | cmp ecx,8                                      |
004012F7 | 75 B0                    | jne uno.4012A9                                 |
004012F9 | 83F9 08                  | cmp ecx,8                                      |
004012FC | 75 AB                    | jne uno.4012A9                                 |
004012FE | 83F9 08                  | cmp ecx,8                                      |
00401301 | 75 A6                    | jne uno.4012A9                                 |
00401303 | 83F9 08                  | cmp ecx,8                                      |
00401306 | 75 A1                    | jne uno.4012A9                                 |
00401308 | E8 44000000              | call <uno.sub_401351>                          |
0040130D | 3C 01                    | cmp al,1                                       |
0040130F | 74 27                    | je uno.401338                                  |
00401311 | B8 65214000              | mov eax,uno.402165                             | 402165:"AQN7jyyj"
00401316 | 83C0 2D                  | add eax,2D                                     |
00401319 | 83F0 0F                  | xor eax,F                                      |
0040131C | 8BD8                     | mov ebx,eax                                    | ebx:"jyyj"
0040131E | 33C0                     | xor eax,eax                                    |
00401320 | 6A 10                    | push 10                                        | UINT uType = MB_OK | MB_ICONSTOP
00401322 | 68 8C204000              | push uno.40208C                                | LPCTSTR lpCaption = "Erroreeeeeeee!!!!"
00401327 | 68 00204000              | push uno.402000                                | LPCTSTR lpText = "Serial errato, ritenta!!!"
0040132C | 6A 00                    | push 0                                         | HWND hWnd = NULL
0040132E | E8 C3000000              | call <JMP.&MessageBoxA>                        | MessageBoxA
00401333 | E9 24FEFFFF              | jmp <uno.sub_40115C>                           |
00401338 | 6A 20                    | push 20                                        | UINT uType = MB_OK | MB_ICONQUESTION
0040133A | 68 E1204000              | push uno.4020E1                                | LPCTSTR lpCaption = "Crackato!!!"
0040133F | 68 66204000              | push uno.402066                                | LPCTSTR lpText = "Serial esatto....Bravo!!!"
00401344 | 6A 00                    | push 0                                         | HWND hWnd = NULL
00401346 | E8 AB000000              | call <JMP.&MessageBoxA>                        | MessageBoxA
0040134B | E9 0CFEFFFF              | jmp <uno.sub_40115C>                           |
00401350 | C3                       | ret                                            |
00401351 | BB 69214000              | mov ebx,uno.402169                             | ebx:"jyyj", 402169:"jyyj"
00401356 | 8BD0                     | mov edx,eax                                    |
00401358 | 33C9                     | xor ecx,ecx                                    |
0040135A | 8A81 65214000            | mov al,byte ptr ds:[ecx+402165]                |
00401360 | 04 12                    | add al,12                                      |
00401362 | 32C1                     | xor al,cl                                      |
00401364 | 04 15                    | add al,15                                      |
00401366 | 04 02                    | add al,2                                       |
00401368 | 8AA1 69214000            | mov ah,byte ptr ds:[ecx+402169]                |
0040136E | 3AC4                     | cmp al,ah                                      |
00401370 | 75 9F                    | jne uno.401311                                 |
00401372 | 41                       | inc ecx                                        |
00401373 | 40                       | inc eax                                        |
00401374 | 83F9 03                  | cmp ecx,3                                      |
00401377 | 75 E1                    | jne uno.40135A                                 |
00401379 | 8A81 65214000            | mov al,byte ptr ds:[ecx+402165]                |
0040137F | 34 16                    | xor al,16                                      |
00401381 | 04 44                    | add al,44                                      |
00401383 | 02C1                     | add al,cl                                      |
00401385 | 32C1                     | xor al,cl                                      |
00401387 | 8AA1 69214000            | mov ah,byte ptr ds:[ecx+402169]                |
0040138D | 3AC4                     | cmp al,ah                                      |
0040138F | 75 0A                    | jne uno.40139B                                 |
00401391 | 41                       | inc ecx                                        |
00401392 | 83F9 08                  | cmp ecx,8                                      |
00401395 | 75 E2                    | jne uno.401379                                 |
00401397 | B0 01                    | mov al,1                                       |
00401399 | EB 04                    | jmp uno.40139F                                 |
0040139B | B0 00                    | mov al,0                                       |
0040139D | EB 00                    | jmp uno.40139F                                 |
0040139F | 33DB                     | xor ebx,ebx                                    | ebx:"jyyj"
004013A1 | C3                       | ret                                            |
Scusate se mi sono dilungato,in ogni caso questo è il link del download http://spin.quequero.org/prj/corso01/uic01.zip.
Spero di essermi fatto capire,grazie mille ancora.

EDIT
Da premettere che verso la fine c'è un altro controllo che ancora non ho calcolato,però penso che per il mio problema,l'esempio possa bastare
 
E' giusto quanto dici, è sicuramente uno dei modi per patcharlo.
Però da quanto dice lui vuole inserire dati corretti e superare i controlli secondo me (immagino poi scrivendo un "keygen").
Ti ringrazio per la risposta,ma come ha detto @DispatchCode volevo fare un keygen.
Ed inoltre in vari crackme ho avuto questo problema della conversione,quindi volevo risolvermi questo dubbio una volta per tutte.
Infatti se aveste letto bene il codice avreste notato chiaro e tondo che si può passare esclusivamente il primo controllo, il programma sembra essere fatto per essere patchato. Nel primo controllo c'è un add al,45, nel secondo (che avviene similmente) c'è un add al,44 e non sono concomitanti per soddisfare ambo le condizioni.
 
Mi ci sono soffermato un attimo anche io questa sera.
Sei sicuro esista davvero una key valida @A77ila e non sia "inutile"?

Stavo considerando questo:

C:
004012A9  |> /8A81 65214000 /MOV AL,BYTE PTR DS:[ECX+402165]
004012AF  |. |34 16         |XOR AL,16
004012B1  |. |04 45         |ADD AL,45
004012B3  |. |02C1          |ADD AL,CL
004012B5  |. |32C1          |XOR AL,CL
004012B7  |. |8A99 69214000 |MOV BL,BYTE PTR DS:[ECX+402169]
004012BD  |. |3AC3          |CMP AL,BL
004012BF  |. |75 50         |JNE SHORT 00401311

Ci sono due offset: 0x402165 e 0x402169.
La stringa che inserisci nel primo campo in pratica è composta da 4 caratteri, perchè gli altri vengono sovrascritti dalla stringa che inserisci nel secondo input.

Esempio pratico con in input: "AAA0" e "jihm".
Con questa sequenza arrivi a passare il primo controllo; il problema è che 0x402165 + 4 = 0x402169, che è quindi la locazione di memoria nella quale si trova la 'j'.

Infatti se aveste letto bene il codice avreste notato chiaro e tondo che si può passare esclusivamente il primo controllo, il programma sembra essere fatto per essere patchato. Nel primo controllo c'è un add al,45, nel secondo (che avviene similmente) c'è un add al,44 e non sono concomitanti per soddisfare ambo le condizioni.

Non ho mica detto il contrario @nullptr . Ieri sera/notte stavo proprio facendo caso al primo controllo e al secondo e poi alla chiamata che avviene più sotto. Se anche si passassero i primi due controlli la call successiva effettua un controllo differente.
È fatto apposta per non aver senso come seriale.

EDIT: pensavo di averlo inviato ieri sera, invece l'avevo lasciato in bozze
 
Innanzitutto grazie ad entrambi,
a stringa che inserisci nel primo campo in pratica è composta da 4 caratteri, perchè gli altri vengono sovrascritti dalla stringa che inserisci nel secondo input.
SI si,avevo notato sta cosa,al quinto controllo viene prese il primo char della pass,viene manipolato e confrontato con la quinta lettera della pass,infatti se inserisco come tu hai detto" AAA0" e "jihm123",viene prese la "j" manipolato e poi confrontata con "1".Ora non voglio farvi perdere tempo con questo stupido crackme e i miei dubbi da nabbo,quindi se facessimo finta che il secondo controllo sia inesistente,quello dove @nullptr ha detto che viene aggiunto 44(quello piu in basso).
Mettiamo il caso che l'ultimo controllo sia quello a 0x4012BD,ora io per far proseguire il programma partendo da questa dati "AAA0" e "jihm",quando la "j"viene manipolata ottengo C1 che viene confrontata con il quinto carattere del riquadro pass,questa però corrisponde a nessun ascii,per spiegarmi ancora meglio,per completare completamente questo secondo controllo mi servirebbe una cosa del genere "AAA0" e "jihmC1CCCFC0",ma C1,CC,CF,C0 non li posso inserire da tastiera,è questo che non capisco,devo mettermi a tirare username a caso fin quando non trovo hex che siano tutti convertibili in ascii,o c'è un modo diverso?Oppure è compito di chi fa il programma fare in modo che da ogni username si possa ottenere un seriale valido?

Infatti se aveste letto bene il codice avreste notato chiaro e tondo che si può passare esclusivamente il primo controllo, il programma sembra essere fatto per essere patchato. Nel primo controllo c'è un add al,45, nel secondo (che avviene similmente) c'è un add al,44 e non sono concomitanti per soddisfare ambo le condizioni.
Hai ragioneee! è impossibile soddisfare le due condizioni.
 
@nullptr non ho voglia di polemizzare francamente.
Stai tranquillo, volevo semplicemente chiarirvi le idee in quanto leggermente date dalla disattenzione. Effettivamente lavorare con sta roba senza debugger is a pain in the ass.

Comunque mi stavo riferendo all'offset inteso come valore che viene utilizzato come base per il calcolo dello spiazzamento
Chiamalo indirizzo di memoria, non ha senso indicarlo come offset che si aggiunge a 0x000000.
 
Stato
Discussione chiusa ad ulteriori risposte.