| Autor | Správa |
ha2
 Užívateľ
 Založený: 21.12.2008 Príspevky: 114
 | Zaslal: Ut 08.06.10 11:57 |   |
Ako by som mohol aplikaciiu odomykat klucom? Budem mat list vygenerovanych klucov a nenapada ma ako mam dosiahnut kontrolu v aplikacii ci je ten kluc spravny. Samozrejme ze do aplikacie nestrcim zoznam 20 klucov a nebudem prechadzat zoznam. |
| |
  |
 |
Forty-
 Užívateľ
 Založený: 01.04.2010 Príspevky: 343
 | Zaslal: Ut 08.06.10 12:18 |   |
Desktopka? Ja by som to ulozil do nejakej lightweight databazky ako SQLite kde by som mal ulozene nejake hashovane hodnoty toho zoznamu a tie by som porovnaval so zadanym klucom ktory by som dodatocne aj kryptoval podla struktury databazy. |
| |
  |
 |
ha2
 Užívateľ
 Založený: 21.12.2008 Príspevky: 114
 | Zaslal: Ut 08.06.10 12:38 |   |
ty myslis ze mat na webe hashovanu DB klucov, aplikacia posle kluc na web, ten prebehne zoznam a odosle tru/false? |
| |
  |
 |
ha2
 Užívateľ
 Založený: 21.12.2008 Príspevky: 114
 | Zaslal: Ut 08.06.10 12:47 |   |
Ide o shareware, klasika, trial a potom treba kluc. No ja by som sa len chcel vyhnut tomu aby som do programu strcil zoznam napr 100 klucov. Ono by bolo najlepsie to generovat a neobmedzovat to takto zoznamom.
A predpokladajme ze ten program ma fungovat aj bez netu. Cize riesit to externe cez web nechcem. 1 kluc = 1 user. To je tiez dovod preco by som tam nechcel strkat zoznam a porovnavat (sifrovane). |
| |
  |
 |
Forty-
 Užívateľ
 Založený: 01.04.2010 Príspevky: 343
 | Zaslal: Ut 08.06.10 12:50 |   |
Nie, myslim ze ta SQLite ma byt priamo sucastou programu. Ten zoznam bude v databaze (v pamati nepristupnej userovi) a hodnoty nebudu stringy ale kryptovane kluce, ktore sa tou kryptovaciou funkciou budu spatne porovnavat.
Inak je to bezpecnejsie mat ako pises na webe, ale ak chces aby to pracovalo offline tak musis aj takto ...
Mozno niekto pride s niecim lepsim, ale ja by som to zrejme riesil takto.
PS : Ta SQLite je len priklad. V principe sa jedna o embedded database, co to je a ako sa to pouziva najdes napriklad na tejto adrese : http://en.wikipedia.org/wiki/Embedded_database |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ut 08.06.10 13:00 |   |
| ha2 napísal: | | Ono by bolo najlepsie to generovat |
Akékoľvek generovanie alebo kontrola správnosti sériového čísla (alebo inej formy kľúča) sa dá v kóde vyhľadať. Dobrý druh ochrany je napríklad: po spustení aplikácie užívateľ zadá kľúč, ktorý sa použije na dešifrovanie DLL knižnice, z ktorej budú neskôr volané funkcie. Ak bol kľúč nesprávny, DLL nebude použiteľná. Žiadna kontrola tam neprebieha, takže úspech dešifrovania ja takmer nemožný (jediný úspech je vlastne vtedy, ak správny kľúč víjde "von" medzi verejnosť). No tu je zas nevýhoda iba jedného kľúča a ty zrejme chceš viac kľúčov. Tie sa ale kdesi v kóde musia porovnať a potom sa spustí aplikácia. Cracker buď nájde generovanie alebo jednoducho zmení jedinú inštrukciu, kde sa kontroluje správnosť (preto rozhodne nepouži niečo ako "if (generovanykluc = spravnykluc)" ale buď ho rozdeľ na viac časti alebo proste nejaký iný algoritmus). |
| |
   |
 |
ha2
 Užívateľ
 Založený: 21.12.2008 Príspevky: 114
 | Zaslal: Ut 08.06.10 13:02 |   |
Forty- dik za tip. Ale tomuto som sa chcel vyhnut. Pretoze dajme tomu ze tam strcim 100 klucov a stiahne si to 150 ludi )) kluce sa minu :o). Preto som to chcel riesit generovanim ale hmm. Asi to fakt len na ten sifrovany zoznam spravim |
| |
  |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 936
 | Zaslal: Ut 08.06.10 13:15 |   |
Fico, ani ta metoda nieje nepriestrelna, staci z programu zistit algoritmus decryptovania a nasledne bruteforce sposobom skusat rozne kluce , kedze dll musi mat predpisanu hlavicku je dost lahke overit ci bola dll spravne decryptovana. nepriestrelna metoda ani neexistuje, ved keby bola tak, neexistuje tolko warezov pokial ide o shareware tak decryptovanie nejakej dll je asi nepouzitelne lebo ta dll musi byt funkcna aj s trial klucom obmedzeny cas. jedine zeby trial verzia mala iba ciastocnu funkcionalitu a iba funkcie dostupne vo full verzii by boli obsiahnute v cryptovanej dll. |
| |
  |
 |
ha2
 Užívateľ
 Založený: 21.12.2008 Príspevky: 114
 | Zaslal: Ut 08.06.10 13:20 |   |
ono, neexistuje nepriestrelna metoda, otazka je, co sa tomu najviac priblizuje  |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ut 08.06.10 13:22 |   |
| ha2 napísal: | A predpokladajme ze ten program ma fungovat aj bez netu
...
dajme tomu ze tam strcim 100 klucov a stiahne si to 150 ludi |
Ako tvoj program bude vedieť, koľko kľúcov je v obehu, ak má fungovať offline ??? (ak som to pochopil správne a chceš na každého usera použiť práve jeden kľúč).
Už keď chceš pre každého usera špecifický kľuč, tak sa to rieši napríklad tak, že user zadá svoje meno a podľa tvojho algoritmu sa z mena vygeneruje kľúč, ktorý sa porovná s tým, ktorý mu ty zasleš pri registrácii.
| coldak napísal: | | Fico, ani ta metoda nieje nepriestrelna, staci z programu zistit algoritmus decryptovania a nasledne bruteforce sposobom skusat rozne kluce , kedze dll musi mat predpisanu hlavicku je dost lahke overit ci bola dll spravne decryptovana |
Aj keby útočník zistil algoritmus dekryptovania, ak použiješ dostatočne dlhý kód, nie je šanca aby to dešifroval minimálne do konca tohto roka. A ty vôbec nemusíš meniť hlavičku, môžeš šifrovať iba stred, alebo všetko, je to proste na tebe. |
| |
   |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 936
 | Zaslal: Ut 08.06.10 13:25 |   |
vacsina softov to riesi tak ze vygenerovane kluce maju s pouzitim urciteho algoritmu rovnaky hash a ten je ulozeny priamo v kode. nieco podobne ako MD5 pri urcitej dlzke hashovanej hodnoty uz nedokaze zabezpecit jedinecnost vystupneho kratkeho hashu, takze niekolko hodnot na vstupe ziskava rovnaky hash |
| |
  |
 |
ha2
 Užívateľ
 Založený: 21.12.2008 Príspevky: 114
 | Zaslal: Ut 08.06.10 13:28 |   |
ten druhy citat nieje moj ale neva . Fico ano. Ale tak to robit (generovat na zaklade mena) z urciteho dovodu nebudem. Pretoze tie kluce budu uz pevne predgenerovane. Ale uz viem ako. Budem kluc delit na casti a kontrolovat na neaku podmienku. Tak sa aspon vyhnem zoznamu klucov v aplikacii. Reverznut sa to da vzdy a nerobim autocad cize naco mega zlozite opatrenia. |
| |
  |
 |
ha2
 Užívateľ
 Založený: 21.12.2008 Príspevky: 114
 | Zaslal: Ut 08.06.10 13:30 |   |
| coldak napísal: | | vacsina softov to riesi tak ze vygenerovane kluce maju s pouzitim urciteho algoritmu rovnaky hash a ten je ulozeny priamo v kode. nieco podobne ako MD5 pri urcitej dlzke hashovanej hodnoty uz nedokaze zabezpecit jedinecnost vystupneho kratkeho hashu, takze niekolko hodnot na vstupe ziskava rovnaky hash |
ano tak som to chcel, ze si jednosmernou sifrou vygenerujem zoznam a ulozim do aplikacie. No a ked zaslem kluc (z ktoreho to bolo povodne generovane) program to znova prevedie a porovna. Ale je to obmedzene no |
| |
  |
 |
stopa27
 Užívateľ
 Založený: 19.09.2006 Príspevky: 729 Bydlisko: Ružomberok<->Bratislava (21)
 | Zaslal: Ut 08.06.10 14:20 |   |
| ha2 napísal: | ten druhy citat nieje moj ale neva . Fico ano. Ale tak to robit (generovat na zaklade mena) z urciteho dovodu nebudem. Pretoze tie kluce budu uz pevne predgenerovane. Ale uz viem ako. Budem kluc delit na casti a kontrolovat na neaku podmienku. Tak sa aspon vyhnem zoznamu klucov v aplikacii. Reverznut sa to da vzdy a nerobim autocad cize naco mega zlozite opatrenia. |
na oklamanie neznaleho nepriatela dobre, inak uplne nanic. Tak ci tak budes musiet mat nejaky zoznam klucov, ktore budu musiet mt nejaku vlastnost, cim spravis cracknutie o trochu zlozitejsim, no rataj s tym, ze bez poriadnej antidebugovacej metody to aj tak nebude mat zmysel. |
_________________ Quick memory editor 5.5 (RAW 0xFC58C) : Hi crackers, please don't crack me. Thank you! | |
       |
 |
Forty-
 Užívateľ
 Založený: 01.04.2010 Príspevky: 343
 | Zaslal: Ut 08.06.10 16:44 |   |
Ako by ste zlomili ten moj navrh? Nechcem vyryvat, ale zaujima ma to.
Predpokladajme funkciu databazoveho jazyka s nazvom HASH (nieco ako MD5 ale pokrocilejsie).
Teraz napisem pseudokod. V delphi som uz dlho nerobil tak to bude nejaka Java :
| kód: |
String kluc = klucTextField.getText();
// ideme na db kod, kluc je premenna hore zadefinovana
Connection con = new Connection(server_ip, db_name);
//spojenie k embedded databaze
Statemet st = con.createStatement();
int hasKey = st.executeQuery("SELECT count(*) FROM kluce WHERE orig_kluc = HASH(kluc)");
if (hasKey > 0) {
// uspech
// teraz a treba zamysliet, ci predsa len chcem kompletne offline program
// lebo jeden spravny kluc moze pouzivat viacero ludi
// chcelo by to update databazy
} else {
// neuspech - zly kluc
}
|
|
| |
  |
 |
|