2015-10-17 57 views
-1

我试图创建一个软件,允许用户登录和流式传输一个dll的字节[]用于注入。例如我是否应该担心我的软件被反编译?

public static byte[] getDLL() 
{ 
    using (WebClient wc = new WebClient()) 
    { 
     Uri url = new Uri("http://mysite/dll.dll"); 
     return wc.DownloadData(url); 
    } 
} 

我成功设法使用visual studio在C#中做到这一点。但是,您可以轻松地反编译该程序,并使其在您的计算机上的特定位置创建DLL,从而泄漏它。而且我几乎没有办法阻止这种情况发生。

我会更好地使用一种难以反编译的语言,比如说C++或C,或者我只是想碰到同样的问题,我使用的是什么语言?这真的值得付出吗?

+2

任何运行在用户机器上的软件都可以被反编译/被黑客入侵如果他们有足够的知识和动机,则由用户/ /等等。你可以让它变得更难,但并非不可能。 – TheUndeadFish

+0

你是什么意思通过蒸汽一个DLL的字节[]?加载DLL并从中获取一个字节数组?你担心的是有人用另一个返回不同的字节替换DLL?也许你正在寻找的解决方案是代码签名,你知道你加载的DLL是你的。我想象的另一个潜在的含义是,您关心的是其他人打开您的DLL并获取数据而无需通过您的前端应用程序。解决这个问题的方法是模糊处理,再加上应用程序和DLL之间的非握手协商。 DRM概率。 – harningt

+0

嗨,哈宁特感谢您的回复。我用代码片段更新了这篇文章,希望能够展示我的意思。我正在使用下载的dll中的byte []注入进程。 –

回答

-2

我不是很清楚你的问题的第一段。但这里有一些想法给你。

简单反编译不是一个问题,如果外人不能使用生成的代码来劫持你的程序集。

据我所知,有很多工具可以“合理的反编译”或浏览.NET程序集内容。 如果您使用C++或C,有反编译器,它们生成的源代码不准确,需要大量的手动工作。

其次,如果您使用的是C或C++等本机语言,则会存在大量漏洞。你必须使用所有的良好做法来避免注入一些问题。 https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637

有工具可以避免反编译。你可以谷歌Obfuscator。一些着名的Dotfuscator,Secure Team。

而且你也可以考虑项目体系结构的变化。如将DLL代码包含在主EXE等中...

此外,您可以使用密钥生成机制来验证DLL。刚刚加载DLL中的DLL调用通用函数并获取one time key并进行验证。

2

你不能阻止反编译任何东西,既不是C#,也不是C++或其他任何东西。
与例如C++相比,像C++这样的语言需要更多的手动工作。 C#和混淆器可能会让代码更难理解,但是一切都会减慢执行代码的速度,而不是阻止它。
(而像DLL和加密的东西不能帮助所有用于固定码)

如果它是程序的某些用户可以看到完整的代码有问题,你做错了什么。任何密码,如密码等不属于用户获得的文件,但在您控制的某些服务器上,只能通过网络连接等方式访问用户。

相关问题