PDA

View Full Version : need software plssss


Nazzyyy
06-02-2010, 19:44
ragazzi!! siccome sono noob in programmazione vi volevo kiedere:

111a - 112b
222b - 223c
333c - 334d
444d - 445e
555e - ?

mi servirebbe un programmino ke mi trova ? (ovvero 556f)

ovviamente un programmino ke, una volta scoperto l'algoritmo (dando qualke teren di numeri corrispondenti tra loro), inserendo il primo numero mi da il 2° (grazie all'algoritmo)




è possibile??

grazie in anticipo


scusate se ho sbagliato sezione ^^

h1jack3r
06-02-2010, 20:34
algoritmicamente secondo me è abbastanza complesso...
Inizierei a dividere i vari problemi in sottocasi, non puoi semplicemente fornire delle cose in entrata e sperare che trovi una soluzione...

Ad esempio lì hai due colonne, ma potresti averne tre o quattro. Poi hai solo numeri o anche lettere? Dare dei limiti al tuo problema secondo me è il primo passo, poi si inizierà a pensare ad una soluzione.

Nazzyyy
06-02-2010, 21:04
nono
solo 2 colonne con la prima solo numeri e la 2° numeri+lettere

h1jack3r
06-02-2010, 21:24
noto che i numeri sono sempre in ordine...basta scorrere la matrice in verticale e fare un +1 all'elemento nascosto N+1


Esempio:
prima colonna seconda matrice:

leggi elemento 0: 1
leggi elemento 1: è 0+1? si
leggi elemento 2: è 1+1? si
leggi elemento 3: è 2+1? si
leggi elemento 4: è 3+1? si
leggi elemento 5: è 4+1? no è NULL -> then is (N-1)+1


conta che se fosse +2 e non più uno troveresti comunque la soluzione salvando l'incremento al primo loop.

leggi elemento 0: 1
leggi elemento 1: è 1. diff = elemento1 - elemento0
leggi elemento 2: è uguale a elemento1 + diff?


Spero di essere stato di aiuto :)


nota che con le lettere se leggi il valore ASCII (fai un cast ad int) dovrebbe funzionare comunque.

Nazzyyy
07-02-2010, 16:54
si ma il problema è ke...
era solo un esempio xD

le corrispondenze sono:

45664574 ddkih75vdofjde95
35453466 df09j0jnk5685566
57457577 stjjt9564ug9g9hg
74741312 sg0953vk3956igh
32467777 ??
(anke questo è un esempio)


+o- cosi

è tanto complesso da fare xD???

grazie ciau

h1jack3r
07-02-2010, 17:04
si ma il problema è ke...
era solo un esempio xD

le corrispondenze sono:

45664574 ddkih75vdofjde95
35453466 df09j0jnk5685566
57457577 stjjt9564ug9g9hg
74741312 sg0953vk3956igh
32467777 ??
(anke questo è un esempio)


+o- cosi

è tanto complesso da fare xD???

grazie ciau


si se non definisci correttamente il problema.

WarDuck
07-02-2010, 17:06
In pratica vuoi che il programmino ti trovi lo schema che sta alla base?!?

Non vorrei sbagliarmi ma credo sia pressoché impossibile.

h1jack3r
07-02-2010, 17:11
che chiave stai cercando di crackare? :D

Nazzyyy
07-02-2010, 18:39
che chiave stai cercando di crackare? :D

ahahaha

;)



...

è abbastanza difficile?

cioè, vorrei trovare l'algoritmo il quale, dando il primo numero mi da il seccondo ;DD.. e l'algoritmo lo ricavo dando i sample citati qui sopra

tutto qui (come domanda xd)

h1jack3r
07-02-2010, 18:49
Non vorrei sbagliarmi ma credo sia pressoché impossibile.


:read:

Nazzyyy
07-02-2010, 18:51
:read:

niente è impossibile ;)

gugoXX
07-02-2010, 19:41
niente è impossibile ;)

Questa e' impossibile.
Meglio, indeterminata.
Tutte le risposte sono valide.

Teorema, dati N termini successivi, e' possibile costruire infiniti polinomi di grado N+1, tali per cui il termine N+1 potra' essere uno qualsiasi dei valori tra -∞ e +∞

Poiche' i polinomi sono solo una degli infiniti possibili tipi di funzione che possano passare tra N termini, cio' implica che l'infinita' dei valori possibili corrispondenti al termine N+1 e' maggiormente suffragata.

Poiche' matematicamente non e' possibile costruire un modello che dia il valore corretto al tuo problema (poiche' ne esistono infiniti), non e' possibile nemmeno lgocamente e non sara' possibile neppure informaticamente.

Nazzyyy
07-02-2010, 20:11
esempio con qualke software:


acquistando un software e comprando la licenza; corrispondente a un nome (esempio: clubelite) viene generata automaticamente una key (esempio: 3432-3453-7766-6464)... giusto?




io mi kiedo se, con vari nomi e key( non solo 4. ma anke 20) corridpondenti, si riesce a ricavare un algoritmo con il quale viene generata la key inserendo il il primo valore..



non so se mi sono spiegato?

era solo x rendermi conto quanto è complessa la cosa..


PS: non mi serve x generare keys x software xd

gugoXX
07-02-2010, 20:53
Mettiamola cosi'.
Le password di cui sei ha disposizione sono:
3 - 5 - 7


Quale e' un'altra possibile?

Potrebbe essere 9. Tutti i numeri dispari
potrebbe essere 11. Solo numeri primi
Potrebbe essere 4. Sono buoni tutti i numeri minori di 20
Potrebbe essere 21. Sono tutti e soli gli zeri di (x-3)(x-5)(x-7)(x-21)
Potrebbe essere 22. Sono tutti e soli gli zeri di (x-3)(x-5)(x-7)(x-22)
Potrebbe essere 23. Sono tutti e soli gli zeri di (x-3)(x-5)(x-7)(x-23)
Potrebbe essere 23. E' uno degli zeri di (x-3)(x-5)(x-7)(x-23)(x-24), insieme appunto a 3,5,7 e 24
Potrebbe essere 25. E' uno dei massimi della funzione cos(3πx)cos(5πx)cos(7πx)cos(25πx)

tomminno
07-02-2010, 21:15
Ti posso assicurare che è impossibile.
Per il semplice fatto che è quasi garantito che all'interno del codice c'è un numero random che a partià di dati contenuti rende il codice generato randomico, ovvero puoi generate una grande quantità di codici apparentemente differenti ma del tutto identici per l'attivazione del programma.
Quello che chiedi è un crack per algoritmi come AES,3DES,DSA perchè quel codice potrebbe essere il risultato di ognuno di questi (più tanti altri).

WarDuck
08-02-2010, 09:59
niente è impossibile ;)

Dai uno sguardo alla teoria della computabilità. Viene dimostrata l'esistenza di funzioni NON CALCOLABILI.

La cardinalità (o numerosità) dei programmi che puoi scrivere è nell'ordine di N, ovvero esiste una biezione tra i numeri naturali e i programmi che tu puoi scrivere. E questi sono infiniti nell'ordine di N.

Se non ricordo male le funzioni da N->N e da N->{0,1} si dimostrano essere dell'ordine di R, un ordine di infinito maggiore per cui non esiste una biezione con i numeri naturali, e dunque con i programmi.

Ovviamente in alcuni casi limitando (di molto) il problema è possibile trovare una soluzione, ma che si applica solo in quel caso specifico.

Tu vuoi una soluzione generale ad un problema altrettanto generale, magari vorresti un algoritmo che termini (si spera) in un tempo umanamente accettabile.

Tuttavia ti ci vorrebbero diverse ere glaciali :D.

Spero di non aver scritto castronerie.

Nazzyyy
08-02-2010, 15:36
ma allora come è possibile ke gente riesce a fare dei key generator??

tomminno
08-02-2010, 16:09
ma allora come è possibile ke gente riesce a fare dei key generator??

Semplicemente scoprono l'algoritmo usato e soprattutto le chiavi.

Nazzyyy
08-02-2010, 16:42
Semplicemente scoprono l'algoritmo usato e soprattutto le chiavi.

e infatti
qua non è solo da scoprire l'algoritmo??
le key sono giuste e valide..


vedete ke non è impossibile ;DD



(è improbabile xd)

banryu79
08-02-2010, 16:44
La gente che riesce a fare i key generator però mica va per forum a chiedere ad altri che gliela si faccia, ti pare?
Nel senso che non è come chiedere la soluzione di un esercizio di programmazione per la scuola, ma tutto un altro paio di brache... (tralasciando poi il discorso sulla legalità della faccenda).
Capisco la tua curiosità al riguardo però.

A proposito, tu di programmazione & dintorni sai qualcosa/studi qualcosa?

yorkeiser
08-02-2010, 16:47
e infatti
qua non è solo da scoprire l'algoritmo??
le key sono giuste e valide..


vedete ke non è impossibile ;DD



(è improbabile xd)

Suppongo l'algortimo venga scoperto disassemblando l'eseguibile, dubito che ci si riesca "a mente".

gugoXX
08-02-2010, 16:50
Suppongo l'algortimo venga scoperto disassemblando l'eseguibile, dubito che ci si riesca "a mente".

Esatto.
Tant'e' che se l'algoritmo e' remoto, allora c'e' ben poco da fare.

tomminno
08-02-2010, 16:58
e infatti
qua non è solo da scoprire l'algoritmo??
le key sono giuste e valide..


vedete ke non è impossibile ;DD



(è improbabile xd)

Non le chiavi che vedi te (che è il codice fornito dal programma), ma le chiavi dell'algoritmo di cifratura! Quelle dell'AES,3DES ecc...

Se prendi un debugger avanzato, ti attacchi in debug al software di tuo interesse e capisci (ben più di) qualcosa di assembly x86 potresti anche riuscire a ottenere qualcosa...

Se il software usa le funzioni di cifratura delle API di windows potrebbe essere più semplice perchè ti basta installare un hook di sistema e sostituirti alle chiamate SystemFunction040 e similari, sarà il programma a darti tutti i dati che ti servono, credendo di darle al sistema operativo...

tomminno
08-02-2010, 17:00
Suppongo l'algortimo venga scoperto disassemblando l'eseguibile, dubito che ci si riesca "a mente".

Se il software usa le api di cifratura di windows non c'è bisogno nemmeno di disassemblare niente, basta uno dei tanti software che installano hook sulle chiamate di sistema e vedrai magicamente passare tutti i dati che ti servono...

Motivo principale per non usare mai le API di windows quando si parla di sicurezza.

tomminno
08-02-2010, 17:06
Esatto.
Tant'e' che se l'algoritmo e' remoto, allora c'e' ben poco da fare.

Anche se l'algoritmo è remoto il software deve implementare comunque la decodifica, altrimenti come fa a riconoscerne la validità?
E se ti affidi esclusivamente a comunicazioni remote chi ti dice che l'utente non simuli le stesse chiamate che esegui te, facendosi ritornare sempre qualcosa di valido?
Alla fine basta sniffare tutte le comunicazioni via socket del programma e analizzare i dati che passano.

yorkeiser
08-02-2010, 17:13
Se il software usa le api di cifratura di windows non c'è bisogno nemmeno di disassemblare niente, basta uno dei tanti software che installano hook sulle chiamate di sistema e vedrai magicamente passare tutti i dati che ti servono...

Motivo principale per non usare mai le API di windows quando si parla di sicurezza.

Beh oddio, considerando che la maggior parte dei software commerciali vengono venduti nelle varie versioni win/linux/mac/macchina da cucire, dubito che in questi casi un programmatore intelligente usi le vespe di winnezza per proteggere una versione e poi riscriva un codice totalmente diverso per un'altra... comunque, di certo negli altri casi può verificarsi lo scenario da te proposto.

gugoXX
08-02-2010, 17:29
Anche se l'algoritmo è remoto il software deve implementare comunque la decodifica, altrimenti come fa a riconoscerne la validità?
E se ti affidi esclusivamente a comunicazioni remote chi ti dice che l'utente non simuli le stesse chiamate che esegui te, facendosi ritornare sempre qualcosa di valido?
Alla fine basta sniffare tutte le comunicazioni via socket del programma e analizzare i dati che passano.

Immagina che il servizio cui vorresti fruire tramite il tuo client, sia un servizio offerto da un server remoto.
Autenticazione e utilita' del tutto stanno li' sul server, il tuo client e' solo un'interfaccia.
In questo caso, pur conoscendo N password, sara' difficile se non impossibile indovinarne una N+1esima accettabile dal server.

tomminno
08-02-2010, 18:38
Immagina che il servizio cui vorresti fruire tramite il tuo client, sia un servizio offerto da un server remoto.
Autenticazione e utilita' del tutto stanno li' sul server, il tuo client e' solo un'interfaccia.
In questo caso, pur conoscendo N password, sara' difficile se non impossibile indovinarne una N+1esima accettabile dal server.

Si, ma il caso più diffuso è indubbiamente quello della protezione di software che girano esclusivamente sulla macchina dell'utente.

gugoXX
08-02-2010, 19:10
Si, ma il caso più diffuso è indubbiamente quello della protezione di software che girano esclusivamente sulla macchina dell'utente.

Si', certo, l'algoritmo remoto era una ciliegina, tanto per dimostrare che con le sole chiavi in ingresso non si puo'. Qualsiasi risposta e' teoricamente plausibile.

Comunque, si', le protezioni locali sono il caso piu' diffuso. Finora...

cionci
08-02-2010, 19:53
Quello che vuoi fare te è praticamente impossibile.
Leggi un po' qui: http://www.oneitsecurity.it/04/09/2008/introduzione-alla-crittoanalisi/
Tu sei nel secondo caso... Solo che per sfruttare quell'attacco c'è la necessità di una grossa quantità di coppie di testi cifrati e comunque alcune caratteristiche dell'algoritmo.

Nazzyyy
08-02-2010, 20:26
Quello che vuoi fare te è praticamente impossibile.
Leggi un po' qui: http://www.oneitsecurity.it/04/09/2008/introduzione-alla-crittoanalisi/
Tu sei nel secondo caso... Solo che per sfruttare quell'attacco c'è la necessità di una grossa quantità di coppie di testi cifrati e comunque alcune caratteristiche dell'algoritmo.

grazie x l'Aiuto ;)

nikel
08-02-2010, 20:38
un programma che scopra l'algoritmo che collega 2 chiavi alfanumeriche date un numero x di chiavi valide... wow sarebbe a dir poco fantascienza!!

@ Nazzyyy il tuo secondo esempio mi ricorda molto qualcosa... ;)

fero86
08-02-2010, 21:09
Motivo principale per non usare mai le API di windows quando si parla di sicurezza. rettifica: quando si parla di security-by-obscurity.

tomminno
08-02-2010, 22:43
rettifica: quando si parla di security-by-obscurity.

Non è questo il caso, installando l'hook sulle funzioni delle cryptoapi ti interponi tra il software e il sistema operativo per cui riesci a leggere key e iv prima che vengano utilizzati per la cifratura e recuperi anche i dati in chiaro prima che vengano cifrati.
Basta una sbirciatina con dependency walker (o reflector per programmi .net) per capire quali funzioni vengono usate.
Ad esempio SecureString del .NET è una classe totalmente inutile, ti protegge dal memdump ma non dall'hook su SystemFunction040.

WarDuck
09-02-2010, 11:27
Ma questi hook possono essere installati anche senza privilegi admin?

tomminno
09-02-2010, 11:51
Ma questi hook possono essere installati anche senza privilegi admin?

Fortunatamente no.
Però per qualcuno che vuole "esaminare" nel dettaglio un software non è un problema.

fero86
09-02-2010, 16:38
Non è questo il caso, si che lo é: se il tuo avversario é un programma malizioso che gira sulla tua stessa macchina tu per lui non stai usando l'algoritmo di cifratura X con una chiave segreta, stai usando l'algoritmo X con una chiave nascosta tramite security by obscurity (che é una cosa ben diversa) perché la chiave é "nascosta" dall'assunzione errata che il nemico non riuscirá a scovarla facendo reverse engineering sul tuo programma. di fatto non stai usando l'algoritmo X noto: ne stai usando una versione X' ignota che corrisponde ad usare X con una ben determinata chiave K. ma la versione X' é vulnerabile e non resterá ignota per molto.

parliamo invece di un altro contesto dove le CryptoAPI di Windows sono estremamente utili: le comunicazioni di rete. se é ragionevole assumere che il nemico non stia sulla tua macchina, bensi ad esempio in un router intermedio, le CryptoAPI vanno benissimo, anzi bisognerebbe usare quelle perché é inutile reinventare 6000 ruote rischiando anche di produrre risultati errati; se si usano le CryptoAPI i risultati saranno orientativamente corretti e in piu hai il vantaggio di poter scaricare su Microsoft la responsabilitá di qualunque vulnerabilitá. é stupido non usarle.



Fortunatamente no. mi sa tanto di si invece :)

é vero che non posso accedere con pieni permessi ad alcuni processi che girano sulla macchina, ma posso sempre simulare il tutto all'interno del mio processo, sul quale posso fare quello che voglio, incluso modificare le DLL di sistema mettendoci degli hooks.

non é molto difficile far partire un programma all'interno del proprio processo: si carica il modulo eseguibile normalmente con LoadLibrary, si cerca l'indirizzo dell'entry point (il formato PE é ben documentato) e lo si invoca direttamente usando il prototipo della mainCRTStartup. prima di fare tutto ció é possibile installare quanti API hooks ti pare. una libreria molto buona per installare hooks é Microsoft Detours.