Obfuskace   zodpovězená otázka

VB.NET, Bezpečnost

Zdravím,

potřebuji poradit, zda máte někdo nějaou zkušenost z obfuskací kódu. Situace: VB.NET 4.0, desktopová aplikace, používající LINQ to SQL a tudíž zhusta reflection. Schovat kód před nepovolanýma očima není žádná legrace.

Vyzkoušel jsem sympatický obfuscar; škoda, že verze která umí zpracovat .NET 4.0 kód je pouze beta, trpí řadou bugů a program už se nevyvíjí.

{smartassembly} mi po troše násilí víceméně dělala co je potřeba, ale přijde mi přeplácaná, pomalá a poněkud drahá.

Řešení by mělo umět pomocí atributů (metadat) v kódu VYNECHAT obfuskaci některých tříd, které si vyberu (např. objektů, které vygeneruje LINQ to SQL). SmartAssembly něco takového umí pomocí

<DoNotObfuscateType(), StayPublic()> Partial Public Class xyz

Jiná řešení to dle papírů umí také, ale v praxi většinou ne, zvláštní.

Nepoužívá někdo .NET Encryptor? Případně nemáte jiné řešení, které byste mi ze své praxe doporučili?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Plně doporučuji Babel Obfuscator, nic lepšího a účinnějšího jsem zatím neviděl. Je to konzolová aplikace, takže se dá začlenit do build procesu a umí obfuskovat i .NET Compact Framework a Silverlight kód, dále umí např. slučovat assembly do hlavní assembly. Do jisté chvíle to bylo freeware (naštěstí mám uložené instalační soubory poslední freeware verze 3.5.0.0), potom si autor uvědomil, že je to dost dobré na to, aby to dával zadarmo... Obfuskuji tím všechno a jak to vypadá se můžete podívat v mých free aplikacích TorrentControl nebo Friends Watcher.

http://www.babelfor.net/

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Pán Linhart, mohli by ste mi prosím poslať inštalačky na tú free verziu Babelu ?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tak vyzkoušel jsem snad všechny obfuskátory na trhu a v úvahu přicházejí tři. Babel, SmartAssembly a .NET Encryptor.

Babel má nejlepší poměr cena / výkon vzhledem k tomu, co umí. SmartAssembly toho umí nejvíc a je asi nejdražší a .NET Encryptor mi prostě učaroval.

On assembly nemodifikuje, ale šifruje a vkládá do "bootstrap" assembly, která jej následně při spuštění zase rozšifruje (pochopitelně za cenu mírné prodlevy při startu aplikace).

A proč mi učaroval?

1) Levný

2) Nemodifikuje kód, tzn. uvnitř mohu používat cokoliv a nemusím se bát, že mi to po zásahu obfuskátoru nebude fungovat

3) SmartAssembly i Babel upravují kód cca 1.5 minuty, .NET Encryptor to má zašifrované asi za dvě vteřiny.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Metoda, kterou používá .NET Encryptor je snad to nejhorší, co může být. To není žádná obfuskace, ale prachsprostý loader, takže stačí dumpnout z paměti obsah toho běžícího procesu a je vystaráno...

2) Chtěl bych vidět něco tak katastrofálního co převaří kód tak, že v něm potom něco nefunguje...

3) S projektem o cca. 10 000 řádcích se Babel pere asi tak vteřinu, větší projekty jsem nezkoušel.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

To už můžu dumpnout cokoliv

2) Cokoliv používající například LINQ to SQL, třeba třídy s <Global.System.Data.Linq.Mapping.TableAttribute ... cokoliv používající reflection a řada věcí používajících serializaci.

3) 10000 řádků? Jenom DBML soubor vygenerovaný SQLMetalem má 65200 řádků, plus v projektu mám dalších cca 650 souborů s příponou .vb. Obávám se, že se bavíme každý o jiné "velikosti" projektu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

2) To si asi nerozumíme. Dumpnutím myslím získání běžícího kódu z paměti, který je v případě .NET Encryptoru neobfuskovaný, v případě Babelu obfuskovaný.

3) Nebavím se o kódu vygenerovaném designérem, nebo podobnými nástroji, ale čistém, ručně psaném kódu.

nahlásit spamnahlásit spam -1 / 3 odpovědětodpovědět

Metoda, kterou používá .NET Encryptor je snad to nejhorší, co může být. To není žádná obfuskace, ale prachsprostý loader, takže stačí dumpnout z paměti obsah toho běžícího procesu a je vystaráno...

2) To si asi nerozumíme. Dumpnutím myslím získání běžícího kódu z paměti, který je v případě SmartAssembly neobfuskovaný, v případě Babelu obfuskovaný.

Tak teraz .NET Encryptor, alebo SmartAssembly?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

SmartAssembly ještě budu testovat, ale nelíbí se mi už jen to, že je to GUI aplikace. Doufám, že jde také ovládat pouze z příkazového řádku.

nahlásit spamnahlásit spam -1 / 3 odpovědětodpovědět

To jde, on se vytvoří jakýsi soubor s konfigurací projektu a ten pak lze pouštět dávkově, případně jako součást build skriptů. V tom problém není.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback