Co se jinam nevešlo > Obecné

Obsidium - ochrana kódu

(1/2) > >>

Stanislav Hruška:
Prosím o odpoveď tých, ktorí stým majú skúsenosti. Jedná sa mi o tieto veci:

  {$I OBSIDIUM_VM_START}
  {$I OBSIDIUM_VM_END}
.
  {$I OBSIDIUM_ENC_START}
  {$I OBSIDIUM_ENC_END}
.
Odporúča sa používať obe ochrany. To je všetko čo je k tomu napísané.
Citujem "Pravdepodobne najdôležitejšou a najúčinnejšou ochrannou funkciu Obsidium je šifrovanie konkrétnych častí Vašej aplikácie"
To sa mi bije s popisom {$I OBSIDIUM_ENC(LIC)_xx} bod: Relatívne ľahko získať pôvodný kód.
Mám to kombinovať, či použiť len jednu z týchto metód?
.
obsSecureStringW() - nerozumiem ako vlastne chráni ten text. Ja mu ho vložím ako parameter a funkcia mi vráti ten text späť tak ako je. V čom spočíva tá ochrana, keď ten text je priamo uvedený v zdrojáku?
Rozmýšľam, že by som to vo veľkom nasadil pri MyQuery.SQL.Text := obsSecureStringW(MyText);
.
Prosím nejakú dobrú dušu o vysvetlenie ako to mám vlastne používať. Čo, kedy a kde.
.
Poznámka:
Nemám v kóde nejaké extra tajomstvá. Ale už keď mám na to nástroj, tak prečo ho nevyužiť. Všetka ťarcha je vlastne na DB. Aj komplet celý samotný výpočet - vyúčtovanie pre vlastníkov bytov.
Pre mňa je zaujímavé chrániť:

* získanie licenčných údajov
* získanie práv v aplikácii
* ochrana voči prelomeniu obmedzení licencie - počet bytov
* samotné SQL texty
* samotný výpočet. Na to by mal stačiť prechádzajúci bod. Ak je bezpečnýVšetká ostatná činnosť je v podstate len zadávanie a aktualizácia údajov.

pf1957:

--- Citace: Stanislav Hruška  13-09-2020, 11:48:07 ---Prosím o odpoveď tých, ktorí stým majú skúsenosti. Jedná sa mi o tieto veci:

  {$I OBSIDIUM_VM_START}
  {$I OBSIDIUM_VM_END}
.
  {$I OBSIDIUM_ENC_START}
  {$I OBSIDIUM_ENC_END}
.

--- Konce citace ---
Sice s tim nemam vubec zadne zkusenosti, ale kdyz ti nikdo neodpovida...

Podle me jim to funguje tak, ze si vlozi pocatecni a koncovou znacku do prelozeneho kodu a s obsahem mezi nimi neco udelaji:

1. pro _VM_ vezmou nativni strojovy kod mezi znackami a preprasi ho pro nejakou vlastni Virtualni Machinu, ktera kod za behu interpretuje, takze to bude asi o dost pomalejsi. Smysl je v ochranne algoritmu, ze se to neda jednoduse disassemblovat a krokovat, jedine ze by ses povesil na tu jejich VM, od ktere neni zadna dokumentace a nejsis tam budou mit i nejake antitrasovaci ochrany.

2. pro _ENC_ vezmou data kod/data mezi znackami a zasifruji ho pomoci AES a nejspis ho desifruji az za behu v pameti on demand. Smysl je v ochranne dat.

Pouzivat oboje soucasne mi smysl moc nedava.


--- Citace ---{$I OBSIDIUM_ENC(LIC)_xx}

--- Konce citace ---
to je zase neco uplne jineho, ne? (nevim...)

Ale samozrejme jsou to jen moje domnenky, vsechno muze byt jinak. Snad je k tomu nejaka dokumentace, kdyz za to chteji penize

Stanislav Hruška:
Je to tak ako píšeš.

* _VM_ zapisuje údaje binárne. Upozorňujú, že spomaľuje a zväčšuje exe. Ťažšie sa dešifruje. Natívny strojový kód sa konvertuje na bajtový kód. Ten sa interpretuje počas behu programu
* _ENC_ šifruje a dešifruje kód za behu. Je to rýchle. Ľahko sa dešifruje. Šifrovanie konkrétnych častí aplikácie. Dešifruje sa za behu a po vykonaní sa znova zašifruje.Odporúčajú použiť obe metódy. Žiadna iná informácia. Z toho mi vyplýva, že obe metódy slúžia na ochranu algoritmu. Len iným spôsobom.
Predpokladám, že 1 mám použiť v naozaj kritických veciach a 2 všade inde, kde to má význam.
Majú k tomu aj pár poznámok. Ale tie vyplývajú z tu uvedeného textu.
Už sa mi to trochu vyjasnieva.
.
3 obsSecureStringW()  Umožňuje transparentne skryť reťazcové konštanty používané v celej aplikácii tak, že ich odstránite z pôvodného umiestnenia v pamäti a umiestnite ich do ochranného kódu.
Z toho múdry nie som.
Je to vhodné použiť na SQL texty? Tie sú však jedinečné a lokálne.

pf1957:

--- Citace: Stanislav Hruška  13-09-2020, 20:15:56 ---Z toho mi vyplýva, že obe metódy slúžia na ochranu algoritmu.

--- Konce citace ---
Ale ne: uz nekdy pred 50 lety napsal  Wirth, ze Program = Algoritmus + data. Proc bys mel prevadet napr. ten tvuj text SQL prikazu do bytoveho kodu pro nejaky VM? Tam ti staciho ho zasifrovat, aby se nevalel na disku v plain podobe a pred pouzitim ho desifrovat.

Naopak ma smysl prevest algoritmus pro VM, aby se nedal snadno trasovat/analyzovat.

Stanislav Hruška:
Trochu nedorozumenie/nepozornosť:
Ten text SQL patrí k 3 - obsSecureStringW()  Umožňuje transparentne skryť reťazcové konštanty...
Ale to jeho zašifrovanie beriem všetkými desiatimi :)

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi