2013-07-28 45 views
3

我知道所有程序集都可以以某種方式反編譯,但是C#& VB應用程序是最容易使用工具(.Net Reflector)反編譯爲源代碼的。所以我的問題是,如果我使用.Net程序集和函數使用C++編寫應用程序,是否可以很容易地反編譯它,就好像它是一個帶有.Net反射器和類似工具的C#或VB應用程序? 好吧,如果我編寫它,而不使用.Net框架中的任何功能,並使用戶界面只調用.Net程序集,也很容易解密?是否可以輕鬆地對C++ .Net程序集進行反編譯?

我的問題是類似於這個:Could this C++ project be decompiled with such tools like a .NET Reflector? 但沒有人已經正確回答了他,所以任何人都可以幫助我嗎?

我想使用.Net和C++將我的應用程序編譯爲Native &託管代碼!

+2

C++/CLI編譯成IL,相同C#和VB。在反編譯方面沒有區別。 –

+0

我認爲真正的問題是*你想保護什麼,因爲任何*代碼都可以被反編譯/反彙編(所有你能做的就是讓攻擊者的生活變得更加困難)。 – I4V

+1

這是一個愚蠢的問題。如果* you *,作爲程序集的作者不能確定它是否可以反編譯,那麼這意味着更聰明的程序員必須弄清楚這是否可能。這不可避免地意味着這個聰明的程序員根本不會對你的代碼感興趣,他當然可以寫一個更好的版本。有評論。 –

回答

6

沒有「C++。Net」。有C++/CLI,它是一種類似於C++的語言,可用於將本機C++代碼與.NET世界粘合在一起。您編寫的託管代碼(ref類)將被編譯爲MSIL。 「本地」代碼將編譯爲MSIL或本地代碼。如果你想編譯某些部分爲本地代碼,你需要

#pragma managed(push, off) 

void foo() {} 

#pragma managed(pop) 

在源。可以使用managed pragma來選擇每個函數的編譯目標。或者,您可以在不使用/clr標記的情況下編譯每個模塊,並將您的項目設置爲生成混合模式程序集。

請注意,將本機類型編組爲.NET並返回可能會對應用程序造成嚴重的性能下降 - 並且每當您跨越本機管理的邊界時都會發生這種情況。但是這種嵌入式本地代碼和託管代碼之間的互操作比普通的p/invoke快得多。

參見這個問題:C++CLI. Are native parts written in pure C++ but compiled in CLI as fast as pure native C++?

+0

站正確,謝謝。 – zxcdw

+0

非常感謝,這是我正在尋找的答案。 –

相關問題