使用C#创建的DLL是否容易被反编译?

shijies 2018-05-26 10:20:25
.net程序比较容易被反编译,使用C#创建的DLL是否算是.net程序?
...全文
2237 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
shijies 2018-06-17
  • 打赏
  • 举报
回复
360会将这样处理过的软件算做病毒。
泡泡龙 2018-06-15
  • 打赏
  • 举报
回复
很多商业的加壳或者混淆软件,可以基本保证不会被轻易看到源代码
shijies 2018-06-15
  • 打赏
  • 举报
回复
引用 25 楼 m0_37137902 的回复:
反编译了又能咋,只要你代码写的自己都看不懂,别人还能看懂?
前一段时间我看了一个JAVA爬虫的反编译,想修改一下(也就是定制爬虫),但是扔感到相当吃力。
shijies 2018-06-15
  • 打赏
  • 举报
回复
我的理解是:对于win32程序软件保护一般是将相关的代码放在入口点附近,破解软件就关注不太多的代码,加上一些花指令,干扰破解者看汇编。如果靠人工反编译,一般情况下那样太不值得。以前我曾在书上看到,欲保护在服务器上运行的代码,可以将部分代码做成DLL,对于win32程序而言,DLL中的代码基本上算是安全的了。
Chasmれ 2018-06-13
  • 打赏
  • 举报
回复 1
反编译了又能咋,只要你代码写的自己都看不懂,别人还能看懂?
liulilittle 2018-06-13
  • 打赏
  • 举报
回复
引用 楼主 shijies 的回复:
.net程序比较容易被反编译,使用C#创建的DLL是否算是.net程序?
另外一点任何可以被加载的dotNET/DLL都可以被反射获取到它的IL代码,既然你的程序运行在dotNET上,那么你就不能脱离反射本身 既然反射可以反射你,那么你即便混淆代码都没有意义 照样可以获取方法的IL代码 但反射获取的IL代码是 IL字节码,但拿到IL字节码后就可以通过反射“元数据”拿到对应的“成员”信息,所以不存在不能反编译这种说法。 ----------------------- 这个就跟一个native-DLL加了密,但是我可以把它loadlibrary到进程的空间内,既然我已经loadlibrary进来了,那么我只需要通过PE信息 定位到它的入口点(DllMain)然后获取这个入口点方法的native-二进制代码(机器代码) 而机器代码是可以反译成汇编的,它是汇编代码的二进制形式;加了密的DLL到了空间就是怎么解析原始的代码的问题。 -------------------------------------------------------- 当然上面只是告诉你,没有不能反编译的东西只有不能反编译不了的人,所以你不要把你的精力耗在这些上面,一般的程序那个没事情 搞你哦,又不是什么技术含量足够牛逼的东西。 当然我个体在这块就很菜了,简单的没问题,难度上去就不行了。
liulilittle 2018-06-13
  • 打赏
  • 举报
回复
你这个反编译是什么概念?任何语言写的东西都容易反编译啊,要防护都是通过加插花代码混淆来的,可以在加壳 不过这些都是防君子不防小人,弄得跟小作坊似的,它们想要反随便他们去啊,真要搞你总会有办法的,不然为什 么谷歌、微软、苹果这些程序都不搞这些东西。 程序被反编译工具打开出现的汇编代码,这些就是反译编啊,跟ILSpy、.Net Reflector这些工具反编译dotNET程序 有什么区别,只是由于dotNet的体系,所有成员都具有相对应的元素据信息,反译编工具可以反译出更加清晰直白 几乎接近原始代码的程序,这个东西Java程序不也是差不多的? 就算是汇编也不是不可以反译编成C语言代码,这种工具又不是没人没公司整过,汇编只是多了与CPU指令集、 寄存器之间的操作指令,但都是可逆指令,只需要你掌握规则就行了(就是一些常用指令的用途,调用栈帧,流程 控制指令,标志态、调用协议、SHE长跳转结构)这些东西,类似如OD这些反编译工具都有自动分析的功能 可以(帮你把流程代码块的方括号打起来)很有好的。。各种内存与代码块的搜索工具。。那些指令不懂查个表瞬 间就能秒懂,而且很多东西它大多数功能都要调用系统的API,到时候一看这个API干啥的基本就能推断出这块代码 在做什么,所以不神奇不奇妙。 而真正复杂不在这,主要是脱壳,过滤插花代码这些东西很费劲,而且反汇编需要经验不然你走很多坑。这个东西 就跟dotNET的程序差不多混淆过后看起来就特别的累,要想真正读到正确的东西就很耗费精力与时间了。
shijies 2018-06-12
  • 打赏
  • 举报
回复
制作成DLL文件的win32代码,是不是不太容易反编译?感觉C# 与JAVA很类似,JAVA的CLASS文件可以很容易被反编译出来,所以我想用C# 制作的DLL文件也可以很容易的反编译,所以尽量复用用win32代码制作的DLL。
引用 7 楼 sp1234 的回复:
所谓”加壳“是欺负一般学生爱好者的,因为软件在内存中释放、加载 DLL,要反编译什么文件呢?真的要看源代码,就好像游戏破解一样,直接查看内存中加载模块的内容就行。而大多数给一般学生用的代码查看软件(例如 ILSpy.exe)是自己加载 DLL 文件,而并不是专门针对内存加载的 .net 模块来查看而已。这类软件本身就不是反编译为目的的,不是流氓软件,真正的流氓不用这么简单的软件。
内存中能有源代码吗?
xuzuning 2018-06-10
  • 打赏
  • 举报
回复
说句不好听的 虽然你觉得花费无数昼夜苦熬出的软件非常珍贵,其实你只要浏览一下开源库,就会发现你只不过是在重复别人的劳动
xuzuning 2018-06-10
  • 打赏
  • 举报
回复
使用C#创建的DLL是否容易被反编译? 是的! C# 编译时,将程序被编译成中间语言代码,运行时才再编译成机器指令 .Net 可能是因为专利的原因,没有像 Java 那样使用虚拟处理机去执行中间语言代码 随着模块化编程的推进,程序可视为定式的堆砌,已无所谓保护的必要了,因为完全可以以工厂化方式生产出来。要保护的是思路(创意),是很难从没有注释的代码中反推出的
shijies 2018-06-10
  • 打赏
  • 举报
回复
我的理解是:现在的市场变了,经营方式发生了变化,重视规模经营了,很少有人注意到源代码的保护了,不过市场是多样化的,以前一些市场可能尚未开发出来,由于出现了新的市场,转移了绝大多数人的注意力,以及工作方式。我感觉搞到win32程序的源代码并不容易,不然像photoshop、word和excel,甚至window还能干得下去?
  • 打赏
  • 举报
回复
如果不可能参与,那么放弃吧。
  • 打赏
  • 举报
回复
你参与过使用 js 写产品的创业公司的设计开发过程吗?
shijies 2018-06-09
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
所谓”加壳“是欺负一般学生爱好者的,因为软件在内存中释放、加载 DLL,要反编译什么文件呢?真的要看源代码,就好像游戏破解一样,直接查看内存中加载模块的内容就行。而大多数给一般学生用的代码查看软件(例如 ILSpy.exe)是自己加载 DLL 文件,而并不是专门针对内存加载的 .net 模块来查看而已。这类软件本身就不是反编译为目的的,不是流氓软件,真正的流氓不用这么简单的软件。
不知您采用什么办法解决
Jason_Mao1 2018-06-09
  • 打赏
  • 举报
回复
当然算啊,算.NET 程序集 。.net 程序集比较容易反编译,建议可以使用一些三方混肴工具,这样的话及时反编译也比较难阅读。
  • 打赏
  • 举报
回复
这方面专业实在不敢当,这方面其实我觉得主要是从历史潮流角度考虑为多。比如说 java 和 .net 是15年前的潮流,而最近几年的开源更加流行和倾向于脚本式语言的使用等等,这方面跟30年前所强调的保护源代码的想法更加不一样了。 比如说我们会刻意地多用 Linq、PLinq、各种 Lambda、语法糖和其它框架,因为这些产生的代码就算是反编译了往往也与源代码呈现完全不一样的面目,最主要地是对阅读者技术基础的要求就提高了。这就够了。 同时在开源的时候,强调分布式、面向(微)服务设计系统,要控制的是服务,而不是源代码。这就好像是自来水公司要控制的水源和地下蜘蛛网一样的管道和阀门,而不是要控制水龙头的生产制造业。 你说 c# 或者 java 甚至流行的一些脚本工具和框架是不是比 c 语言“更容易被反编译”,我只能说这是一个潮流,团队、组织、产品设计甚至运维在这个什么都讲究云计算大数据互联网的时代下,要比个人所开发的几千行代码重要100倍。如果不想赶这10几年潮流,那么很可能理解错了技术重点。
NCScan 2018-06-09
  • 打赏
  • 举报
回复
@sp1234
NCScan 2018-06-09
  • 打赏
  • 举报
回复
首先。C#写的DLL 一定是.net 程序吗?哪的看你是不是用C#.net 写的程序了。就如同VB写的程序一定是.net 程序吗? 其次反编译,楼上这位大牛@以专业开发人员为伍 有很专业的看法
  • 打赏
  • 举报
回复
所谓”加壳“是欺负一般学生爱好者的,因为软件在内存中释放、加载 DLL,要反编译什么文件呢?真的要看源代码,就好像游戏破解一样,直接查看内存中加载模块的内容就行。而大多数给一般学生用的代码查看软件(例如 ILSpy.exe)是自己加载 DLL 文件,而并不是专门针对内存加载的 .net 模块来查看而已。这类软件本身就不是反编译为目的的,不是流氓软件,真正的流氓不用这么简单的软件。
  • 打赏
  • 举报
回复
反过来说,这个时代有多少大型应用甚至是 js 做的呢?! 实际上更重要地是架构是否先进。比如说,谁允许一个程序员设计的软件,要求远程访问关系数据库、把数据库连接串都放到客户端去的?凡是在客户端直接连数据库的软件都是 xxxxx,这种问题才是最应该回避了。
加载更多回复(6)

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧