Autor Téma: Obsidium - ochrana kódu  (Přečteno 185 krát)

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5307
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Obsidium - ochrana kódu
« kdy: 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}
.
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.
« Poslední změna: 13-09-2020, 11:58:04 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2931
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Obsidium - ochrana kódu
« Odpověď #1 kdy: 13-09-2020, 19:55:01 »
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}
.
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}
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

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5307
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Obsidium - ochrana kódu
« Odpověď #2 kdy: 13-09-2020, 20:15:56 »
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.
« Poslední změna: 13-09-2020, 20:17:34 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2931
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Obsidium - ochrana kódu
« Odpověď #3 kdy: 13-09-2020, 20:28:32 »
Z toho mi vyplýva, že obe metódy slúžia na ochranu algoritmu.
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.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5307
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Obsidium - ochrana kódu
« Odpověď #4 kdy: 13-09-2020, 20:37:37 »
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 :)
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5307
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Obsidium - ochrana kódu
« Odpověď #5 kdy: 16-09-2020, 15:33:34 »

Odpoveď z Obsidium:

First of all, using any of these features increases the amount of work somebody has to do in order to reconstruct the original executable (i.e. "unpack" the protected one).

ENC marks also make it a bit harder to patch code in memory.

The main point of LIC marks is that it is not possible to recover the original code unless you have a license key.

VM marks offer the highest protection against modification and recovery of the original code, but that comes at a price. Due to the high performance impact you need to be very careful where you use them.

String protection is implemented this way s.t. it's really easy to add to existing code. The original string will actually be removed during protection:
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.