Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Algoritmo dongle Hardlock E-Y-E

718 views
Skip to first unread message

NicoKid

unread,
Jun 29, 2013, 8:10:52 PM6/29/13
to
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

Leonardo Serni

unread,
Jun 30, 2013, 2:48:14 AM6/30/13
to
On Sun, 30 Jun 2013 02:10:52 +0200, NicoKid <nic...@false.com> wrote:

>1) la risposta è sempre la stessa? A questo punto basta loggare le risposte
>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.

NicoKid

unread,
Jun 30, 2013, 8:57:22 AM6/30/13
to
Leonardo Serni wrote:

> On Sun, 30 Jun 2013 02:10:52 +0200, NicoKid <nic...@false.com> wrote:
>
>>1) la risposta è sempre la stessa? A questo punto basta loggare le
>>risposte con il dongle attaccato ed il gioco è fatto
>
> 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?

Enrico 'Henryx' Bianchi

unread,
Jun 30, 2013, 3:23:17 PM6/30/13
to
NicoKid wrote:

> 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

Leonardo Serni

unread,
Jun 30, 2013, 4:31:47 PM6/30/13
to
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

NicoKid

unread,
Jun 30, 2013, 5:24:45 PM6/30/13
to
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.

NicoKid

unread,
Jun 30, 2013, 6:08:59 PM6/30/13
to
Leonardo Serni wrote:

> On Sun, 30 Jun 2013 14:57:22 +0200, NicoKid <nic...@false.com> wrote:
>
>>Leonardo Serni wrote:
> 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.

Craccare il codice è quello che NON vorrei fare (a parte che al 99% non ne
sono capace).

> 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.

Questo è quello che mi piacerebbe fare.

> A questo punto, uno sostituisce le chiamate alla parallela con chiamate ad
> una apposita subroutine ed e' a posto.

Beh, una patch per dosbox che fa questo esiste già e l'ho già testata
(evviva la pappa pronta!).

> 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).

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.
0 new messages