Dark side tale
Compro una scheda hardware di cui mi riprometto di condividere maggiori dettagli e che viene venduta in due bundle diversi.
1. Scheda + Applicazione A
2. Scheda + Plugin per applicazione B
Siccome mi interessa tantissimo il secondo bundle, comincio ad informarmi su come comprarlo. Sul mercato americano non è mai comparso. Sembra disponibile forse in Giappone ed è in vendita al pubblico in Australia, ma il negozio online non sembra voler spedire verso gli Stati Uniti.
Navigo sul sito dell’azienda che produce la scheda scoprendo che il bundle B è abbastanza supportato, infatti è possibile scaricare un aggiornamento che però richiede che la versione precedente sia già attivata. È giusto, non mi oppongo anche se mi da un po’ fastidio il fatto che non riesca a poter comprare quello che voglio. Scompatto ed installo l’aggiornamento e scopro l’esistenza di una fantomatica libreria “ApplicazioneA.Dll”, ovvero il plugin venduto da una società terza usa codice di chi ha scritto l’applicazione A in licenza per poter implementare il plugin per B. Ad occhio e croce il formato del codice seriale, 6 gruppi alfanumerici di quattro cifre, sembra essere identico con quello dell’Applicazione A. Nel frattempo scopro l’esistenza di un’offerta limitatissima per il bundle numero 1. Mi azzardo, provo, ricevo.
Tento di usare il PID dell’applicazione A con il plugin B ma non funziona. Ogni volta che il plugin viene lanciato parla con un server internet per chiedere se la chiave è valida. La cosa mi infastidisce tanto, saranno pure cacchi miei quando e come voglio lanciare l’applicazione/plugin? Ci attacco un proxy, guardo la connessione HTTP (che tapini, manco usare SSL per questo tipo di dialogo) e sorpresa il plugin B parla con i server dell’applicazione A.
Mi incazzo, hanno abbondantemente gonfiato le siffatte ciufole. È ora di adattare il software alle _MIE_ esigenze. Tento di carpire come comunicano client e server sperando di usare il trucco del proxy ma c’è bisogno di una attivazione riuscita per tentare un replay attack. Guardare codice in assembler e cercare di fare il reverse engineering di quale sia il messaggio di sblocco non è più alla mia portata; tra l’altro penso che un replay attack non è il modo più semplice per riattivare il software qualora dovesse servire. Tento disperatamente la patch binaria, non saranno mica così pirla da non aver perlomeno da qualche parte “firmato” il codice tramite una banale checksum.
Trovo un pezzo di codice che fa più o meno questo:
int EAX = 0;
EAX = Call_ProceduraMisteriosaX();
if (EAX == 0)
{
return 0;
}
EAX = Call_ProceduraMisteriosaY();
if (EAX == 0)
{
return 0;
}
EAX = Call_GetPointerForError(EAX);
return EAX;
Sostituisco i due if(EAX == 0) con return 0; in assembler equivale a sostituire TEST EAX, EAX con XOR EAX, EAX. Ovvero rimpiazzare due volte l’opcode 33 (TEST) con l’opcode 85 (XOR), cambiando lo stato di 10 bit in tutto su una ventina di milioni.
Sono scettico ma funziona molto bene.
La coscienza? È a posto. Il prezzo dei due bundle è identico. L’applicazione A non mi interessa. Ho cercato in tutti i modi di comprare il secondo bundle senza successo; e dal punto di vista economico non mi sembra di danneggiare nessuno, visto che la distribuzione degli introiti dei due bundle sembra essere la stessa. E a suggerirlo c’è il fatto che l’azienda di B distribuisca un’applicazione a riga di comando simile all’applicazione A in maniera totalmente gratuita. Sinceramente certe manovre distributive tafazzi-style mi lasciano completamente allibito; nel frattempo s’è fatta ora di tornare al lavoro di tutti i giorni nel bright side.
-quack