Cal*_*ius 27 .net c# cil reverse-engineering managed
当我启动.NET exe时会发生什么?我知道C#被编译为IL代码,我认为生成的exe文件只是启动运行时并将IL代码传递给它的启动器.但是怎么样?它的过程有多复杂?
IL代码嵌入在exe中.我认为它可以从内存中执行而不将其写入磁盘,而普通的exe不是(好的,是的,但它非常复杂).
我的最终目标是提取IL代码并编写我自己的加密启动器,以防止scriptkiddies在Reflector中打开我的代码并轻松窃取我的所有类.好吧,我无法完全阻止逆向工程.如果他们能够检查内存并抓住我将纯IL传递给运行时的那一刻,那么无论是否是.net exe都没关系,是吗?我知道有几个混淆器工具,但我不想弄乱IL代码本身.
编辑:所以似乎不值得尝试我想要的.无论如何他们都会破解它...所以我会寻找一个混淆工具.是的,我的朋友也说,将所有符号重命名为无意义的名称就足够了.毕竟逆向工程并不那么容易.
Ken*_*nky 36
如果你绝对坚持加密你的程序集,可能最好的方法是将程序代码放入类库程序集并加密它们.然后,您将编写一个小的存根可执行文件,将程序集解密到内存中并执行它们.
这是一个非常糟糕的主意,原因有两个:
Eri*_*ert 26
与数千人分享的"秘密"并不是秘密.请记住,你的攻击者只需要打破你的琐碎 - 破解 - 因为这个关键是正确的"加密"方案.
如果您的代码非常有价值,必须保密,那么请保密.将代码仅保留在您自己的服务器上; 将您的软件编写为Web服务.然后保护服务器.
Joe*_*orn 20
生成的exe文件只是启动运行时并将IL代码传递给它的启动程序.
不完全是.您可以通过不同的方式设置程序,但通常将IL代码编译为与运行时一起运行的本机机器代码.
至于小孩 - 如果你认为你可以卖给他们或任何使用他们重新分配的东西的人,你就是在欺骗自己.如果他们无法解锁您的应用,他们将继续前进并找到他们可以或不可以的人.它们的潜在销售额恰好为0美元; 因为你的投资没有回报,花费太多力气试图阻挠他们是没有意义的.一个基本的混淆器可能没问题,但不要超过这个.
实际上,大多数开发人员面临着来自默默无闻而非盗版的更大挑战.你做的任何事情都会阻止你对你的产品说出来,这比海盗更能伤害到你.这包括让人们付钱来获得它.大多数情况下,更好的方法是拥有一个免费版本的应用程序,孩子们甚至不需要解锁; 已经适合他们的东西,破解你的应用程序只会浪费他们的时间,而不仅仅是时间或功能有限的试用.让他们和尽可能多的其他人广泛传播.
现在我知道你最终需要一些付费用户.关键是现在使用从免费产品中获得的所有关注来追加销售或推广其他更有利可图的产品.这里的一个选择是还有一个高级版本,其中包含主要针对商业用户的附加功能; 比如让它易于部署到整个网络并以这种方式管理.企业拥有更大的资金,更有可能支付许可费.您的免费版本可用于宣传您的产品,并为您的企业客户提供合法性.
当然,还有其他型号,但无论你做什么,都值得记住,默默无闻是一个更大的挑战,你的软件的盗版副本永远不会转化为销售.最终(当然这取决于你的执行)你将能够通过一个利用这些点的商业模式赚取更多的钱,而不是试图与它们作斗争.
"...阻止scriptkiddies在Reflector中打开我的代码,并轻松窃取我的所有课程."
不幸的是,无论你如何模糊启动,调试器中的六个命令都要将当前运行的程序集转储到用户选择的文件中.所以,即使你可以像Brian建议的那样启动你的应用程序,一旦它运行就把这个应用程序的组件放到Reflector中并不困难(如果有人觉得它很有趣,我可以从WinDbg发布一个样本).
混淆工具是从大量技术经验中创建的,并且通常旨在使调试器难以可靠地附加到进程或从中提取信息.正如布莱恩所说:我不确定为什么你决定保留IL,如果你想从脚本小子那里得到任何有意义的保护,那么你可能需要改变主意.