Newsgroup: it.comp.os.linux.sys
Titolo: Algoritmo dongle Hardlock E-Y-E

Salve NG,
 
ho una chiave hardware funzionante su porta parallela che mi interessa 
emulare per far girare un vecchio programma win3.11 su dosbox.
Purtroppo gli emulatori a pagamento non sembrano supportare Win3.11 (in 
effetti la spesa sarebbe modesta).
Ho scoperto che qualcuno si era già cimentato nella cosa:
http://blog.yurichev.com/node/56
 
 
Sfortunatamente il tizio in questione ha usato un dongle diverso dal mio. 
Egli ha modificato dosbox in modo da ricevere le chiamate verso la porta 
parallela (che non esiste fisicamente nel mio pc) rispondendo adeguatamente.
Ora io con qualche tools pescato in giro ho recuperato (brute force) alcune 
cose dal mio dongle:
MODAD:  0x0A57
Seed 1: 0xB598
Seed 2: 0x233D
Seed 3: 0x1345
 
Gli emulatori di dongle a pagamento usano questi parametri per fare la 
"magia", io però non so che farmene. Mi piacerebbe che si potessero in 
qualche modo ficcare nella modifica di dosbox.
Deduco che il programma protetto invii un po' di byte sulla porta parallela 
(e questi li posso vedere) e il dongle risponda opportunamente (non lo vedo, 
devo trovarmi un pc con una porta parallela, la usb to parallel non 
funziona).
Le domande sono:
1) la risposta è sempre la stessa? A questo punto basta loggare le risposte 
con il dongle attaccato ed il gioco è fatto
2) La risposta varia in base a qualcosa? Allora ci deve essere un algoritmo 
per decifrare le richieste e che sfrutta i seeds qua sopra.
 
Ogni suggerimento è apprezzato.
Grazie, Nicola. 
 
-- 
chi va pian va san e va lontan

con il dongle attaccato ed il gioco è fatto
 
La risposta e' sempre la stessa, ma AFAIK la domanda varia. Se ricordo bene,
e non mi confondo con un altro dongle, la "domanda" e' una sequenza f(i) che
ha probabilita' dell'ordine di 1/i di essere generata.
 
Il che vuol dire (ed e' il motivo per cui fu scelto quest'algoritmo) che per
essere sicuro che il programma funzioni per tre mesi...
 
...devi registrare l'attivita' del dongle per tre mesi [1].
 
Leonardo
 
[1] virtuali
 
-- 
Were I Glenallan's Earl this tide, and were you Roland Cheyne,
My spur would be in my horse's side, the bridle upon his mane.
If they hae twenty thousand blades and we twice ten times ten,
Yet they hae but their tartan plaids, and we're mail-clad men.

 La risposta e' sempre la stessa, ma AFAIK la domanda varia.
 
Beh, se è così non importa la domanda (lato software giusto?) io rispondo 
sempre uguale appena ricevo qualcosa verso la parallela. O no?


 Ogni suggerimento è apprezzato.
 
Bypassare, se possibile, il controllo della chiave hardware da parte del 
software ('sti sistemi di codifica del software secondo me sono da 
denuncia...)
 
Enrico


Eh, no. In pratica, la funzione e' divisa in due parti e deve valere:
 
	f(x, g(x)) = 0
 
Il software di gestione della chiave genera x a caso (diciamo che genera x
con probabilita' proporzionale a 1/x), e invia x alla chiave, che effettua
il calcolo g(x).
 
A questo punto il software applica la propria f() al valore y ritornato, e
verifica che f(x, y) sia zero.
 
I vari "crack" per questo genere di cose consistono o nell'eliminare tutto
il test (sperando che non esista una funzione h(x, y), che viene usata per
fare qualche altro calcolo, tipo salvare i dati su disco), o - meglio - in
una modifica del generatore di x in modo che ritorni sempre il medesimo, o
uno di molto pochi, valori. E a questo punto la chiamata alla chiave viene
sostituita da un lookup per i valori di x.
 
In alternativa, avendo a disposizione l'algoritmo g() (che pero', spesso e
volentieri, si basa ANCHE su un "vettore di stato" in modo da avere chiavi
con informazioni diverse), si puo' simulare in software la chiave.
 
A questo punto, uno sostituisce le chiamate alla parallela con chiamate ad
una apposita subroutine ed e' a posto.
 
Per battere il trucchetto della frequenza variabile, ci sono programmi che
si interfacciano alla chiave e inviano TUTTI i valori (8K, 16K, 32K... non
serve altro che un po' di spazio disco: le chiavi nuove richiederebbero un
certo numero di terabyte, ma quelle vecchie...). Nel caso tuo, ti serve un
cosino chiamato HLdump (o hl-dump).
 
Leonardo



Daccordo, ma allora devo craccare il software originale che gira su win3.11. 
Devo trovare dei tools in grado di disassemblare msdos ma che girino su SO 
più moderni. Mi pare una roba troppo complicata per me e troppo tempo 
necessario :(. Inoltre avrei altri 3-4 software che girano con lo stesso 
modello di dongle.


 cosino chiamato HLdump (o hl-dump).
 
Si, hl-dump l'ho appunto usato per ottenere:
MODAD:  0x0A57
Seed 1: 0xB598
Seed 2: 0x233D
Seed 3: 0x1345
 
Solo che a questo punto qual'è l'algoritmo g()? Dovrebbe avere a che fare 
con la roba sputata da hl-dump che tra l'altro mi ha prodotto anche un file 
.reg con dentro anche un array di hex 512x32. Ma da quel che ho capito 
questo array serve solo per velocizzare la ricerca dei seeds (molto IMHO).
 
In pratica dovrei "SOLO" capire come ottenere g() partendo dai seeds, cosa 
che evidentemente sanno gia' fare quelli di 
http://www.dongleservice.com
 
 
Grazie, Nicola.
