[.NET] Kompilowanie do kodu binarnego

0

W .NET programy są kompilowane do MSIL (języka pośredniego, bytecode'u).
Następnie przy uruchamianiu, Framework kompiluje MSIL do kodu binarnego pod dany OS i procesor.
Ale nie robi tego przy każdym uruchomieniu, tylko wtedy, jeśli w pliku zaszły jakieś zmiany.
Więc Framework musi gdzieś trzymać skompilowany program, tylko gdzie?

Albo inne pytanie: Jak samemu skompilować program w .NET do binarki?
Jest taki program Salamender Protector który w jakiś sposób kompiluje, tylko nie wiem czy na pewno do normalnych binarek.

0

O ile dobrze kojarzę, to umieszcza prekompilowane assembly (ale nie zawsze i nie każde) w tzw. Global Assembly Cache.

%systemroot%\assembly, a zwłaszcza podkatalog NativeImages_[wersja frameworka], na przykład %systemroot%\NativeImages_v2.0.50727_32.
Normalne otworzenie tego w explorerze uruchomi specjalny ShellExtension, ale np. przez konsolę spokojnie można zawartość GAC podejrzeć.
Jeżeli potrzebujesz stworzyć tzw. native image to nie jest to trudne: http://wss.pl/WindowsServer/FaqList/21/1,3103/Comments.aspx - ale nie oznacza, to że program będzie działał jako normalna binarka.

Nie wiem czy w ogóle jest wykonalne skompilowanie programu .NET do normalnej binarki - wiem, że w przypadku Mono można dodać do programu używane biblioteki i co prawda program spuchnie jak nie przymierzając w Delphi+VCL, ale działać będzie i bez frameworka.

Moja krótka zabawa z filemonem ukazała, że program odczytywał już native images różnych assembly z tego GAC, ale sam siebie tam nie umieszczał, więc może nie zawsze jest to wrzucane.

0

rzeczywiście, jak użyje ngen.exe, to pojawia się w tych katalogach (normalnie ich tam nie było)
Relfector i IL DASM już nic nie "zdradza", tylko nie można tego uruchomić...
"nazwapliku.ni.exe jest nieprawidłową aplikacją systemu Win32"

Bo głównie mi chodzi o zabezpieczenie programu przed dekompilacją, niż działanie bez Frameworka.

Popróbuje jeszcze z Mono...

0

Przy instalacji visuala można wybrać "Dotfuscator Community Edition". Zawsze to wyłączam, ale w opisie jest "Obfuscates .NET assemblies to hinder attempts to decompile or reverse engineer .NET applications." Może to jest to czego szukasz.

0

To nie zabezpieczy przed dekompilacją, ale kod pośredni MSIL będzie cholernie nieczytelny. Jest też kilka innych miłych narzędzi do obsfukacji.

Przykładowy obsfukowany kod MSIL (ale nie wiem czy akurat Dotfuscatorem).

public x18bd40ffc704cf9c(string strLang, ToolStripStatusLabel StatusDownloadLabel) 
{ 
this. x26c511b92db96554 = null; 
this. x0596ffab9fc11182 = null; 
this. x97dffe594dccfcf9 = 0x493e0; 
this. x0b77fbf3290f0f6d = 0; 
this. x98d63c6fdda5c5ca = ""; 
this. x91aa94863bdcc64a = ""; 
this. xb7dfc13308b54974 = null; 
if (-2147483648 != 0) 
{ 
if (0 != 0) 
{ goto Label_060B; }

1 użytkowników online, w tym zalogowanych: 0, gości: 1