Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Assembler
Obecné rady k ochraně softwaru
15. května 2001, 00.00 | Několik základních pravidel kterých byste se měli držet při snaze ochránit svůj software před cracknutím.
Velmi dlouho jsem přemýšlel o tom, jak mám nakousnout problematiku ochrany softwaru. Myslím si, že ona slavná Markova pravidla o ochraně softwaru budou skvělým začátkem. Řekl bych, že už byla uveřejněna snad tisíckrát, můžete je najít snad na každém crackerském serveru a všichni je dobře znáte ale...
14 Markových pravidel
1. Nikdy nepoužívejte smysluplné názvy procedur, souborů nebo funkcí - např. JeZadaneCisloSpravne (:-)). Pokud používáte funkce pro kontrolu (třeba správnosti zadaného čísla), umístěte do nich nějaký velmi důležitý kód pro správnou funkčnost programu. Pokud funkci cracker vymaže (jak se říká vyNOPuje), program nebude pracovat správně.
2. Nevarujte uživatele hned po nějaké chybě. Vyčkejte, pokud to jde, třeba i pár dnů.
3. Používejte ve vašich EXE a DLL souborech checksum. Klidně může jeden prověřovat druhý. Není to sice perfektní, ale ani nejhorší.
4. Počkejte sekundu nebo dvě před samotným prověřováním hesla. Téměř to vyloučí možnost útoku hrubou silou (BruteForce) .
5. Používejte sebe-opravující kód. Třeba modemy nebo HDD tuto techniku využívají, tak proč ji nevyužít ve vašem softwaru. Nejlepší na tom je, že pokud někdo třeba decompiluje software, může se dívat na příkazy, které tam už dávno nejsou!!
6. Patchujte svůj vlastní software. Porazte nás v naší vlastní hře!!
7. Ukládejte hesla na neobvyklá místa.
8. Ukládejte hesla na více míst. Můžete pak prověřit všechny.
9. Nespoléhejte se na systémový čas a datum. Získejte je z nějakého souboru, třeba SYSTEM.DAT, SYSTEM.DA0 nebo BOOTLOG.TXT a porovnejte je se systémem.
10. Nepoužívejte statické stringy k informování uživatele (třeba o tom, že jeho heslo je špatné…). Slouží ke snadné orientaci v souboru. Tvořte stringy dynamicky nebo je zakódujte.
11. Zaplavte crackera zbytečnými funkcemi a zakódovanými daty. Atrapy jsou zábavné.
12. Pokaždé, když ověřujete platnost uživatele, umístěte ověřovací kód "inline" s aktuálním procesem.
13. Pokud používáte zakódovaná data, pokuste se, aby vypadala jako programový kód nebo volání funkce (např. "73AF" nebo "GetWindowText"). Navíc to může zmást nějaké decompilery.
14. Nikomu neříkejte, jak chráníte svůj software!!!
No a teď některé mé vlastní postřehy:
1. Žádné NAG screeny (jak to mám vlastně přeložit??…vzhledem k tomu, že všechny dobré materiály ke crackingu jsou v angličtině, nikdy by mě to nenapadlo říkat česky) - tedy žádná okna informující o špatně či správně zadaném čísle.
2. Pokud váš program nemá v shareware verzi ukládat, nevytvářejte disablované tlačítko "Uložit". Neukládat znamená neukládat.
3. Jedině z about-boxu by se měl uživatel dozvědět o tom, že není registrovaným uživatelem.
4. Vyhněte se používání stringů jako např. "Tento program není registrován". Zbytečně tím crackerovi ulehčujete orientaci v programu. Snažte se tyto (a nejlépe všechny) stringy nějak zakódovat.
5. Snažte se alespoň část ochranného systému vložit do míst, kde se provádí nějaká složitá operace s daty. Pochopení takové datové operace, navíc ještě v assembleru není žádná legrace a může trvat velmi, velmi dlouho.
6. Ochrana, která nějakým způsobem mění data, bývá většinou ta nejlepší - například vydáte sharewarovou verzi programu, která bude tisknout až po zadání sériového čísla - toto bývá ta největší chyba začínajících programátorů. Klidně nechte váš program tisknout, ale při vytváření dat pro tisk je nějakým způsobem upravte a až těsně před tiskem je uveďte do původní podoby s využitím sériového čísla. Je mnohem těžší v nějaké složité funkci pro tisk najít příkazy, které upravují data, než funkci, která rozhoduje o tom, zda se může nebo nemůže tisknout.
7. Používejte funkce pro ochranné účely vícekrát a klidně i pro jiné potřeby. Crackeři žijí v přesvědčení, že funkce pro ochranu softwaru mohou sloužit jen k tomuto účelu. Nemusí, klidně je používejte i ke zcela jiným a banálním účelům tak, aby na nich alespoň trochu záležela správná funkčnost programu. Zabráníte tím tzv. "pěti-minutovým crackům", cracker totiž nic netušíce změní funkci tak, aby akceptovala i špatná sériová čísla a….místo toho se program vůbec nespustí, protože jste tutéž funkci použili třeba pro vygenerování ikony vašeho programu :-))
8. Nikdy nezakládejte sharewarové omezení programu na disablovaném tlačítku, popřípadě položce v menu. Udělat z něj funkční tlačítko je otázkou sekund!!!
To by tak pro dnešek stačilo. Pevně doufám, že vás tyto nápady alespoň trochu inspirovaly.
Obsah seriálu (více o seriálu):
- Ochrana software - Úvod
- Obecné rady k ochraně softwaru
- Ochrana před debuggingem - základy
- Ochrana před debuggingem – standardy
- Ochrana před debuggingem - detekce breakpointů
- Ochrana před debuggingem - detekce hardwarových breakpointů
- Ochrana před debuggingem - detekce hardwarových breakpointů 2
- Poslední poznámky k SEHu
- Anti-disassembling - základy
- Pasivní SMC
- Aktivní SMC
- Anti-code editing
- Anti-FrogsICE
- Anti-ProcDump
- PE cryptor
- PE cryptor - přidání nové sekce do souboru
- PE cryptor - kódování
- Přesměrování Program Entry Pointu
- Přesměrování Program Entry Pointu - pokračování
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007