请问混淆器可以产生什么样的效果?

shijies 2019-01-13 09:53:26
使用混淆器处理C#的源代码后,能有多大效果?反编译后函数名和字符串是不是不能还原出来?
...全文
954 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mk_lucifer 2019-01-22
  • 打赏
  • 举报
回复
效果很赞,看的你想死。。。混淆分两种,
1.只混淆程序文件中的,私有对象或建构体,枚举等等的名称,以及他们的私有成员名称,这种类库不影响外部引用。
2. 全部混淆,即使外部引用,名称也全变了,需要整个工程下的dll一起混淆,才能保证能正常使用。。
字符串不会被混淆,但可以用加密手段来避免反编译。。
加密可以破解,混淆是不可以还原的,因为旧名和新名不是靠具有映射关系的算法获得的,而是完全随机生成的,新名和旧名没任何联系和规律,无法还原。。 。
张天星 2019-01-20
  • 打赏
  • 举报
回复
引用 15 楼 圣殿骑士2018 的回复:
怎么可能还原的出来。

你可以假想,混淆的过程,就是有一个奇怪的人,他写代码的时候,就是用没有意义的字符来命名函数,命名变量,写的代码只有他能读懂,其他人都很难读懂。那么代码那么难读的样子,就是混淆前的样子。那你说,你反混淆能反到哪里去?

再给你讲个人工混淆的例子。我曾经看有些人建数据库,那个字段,都是Column1,Column2,Column3,,,
这种命名方式,为的什么?就是防止别人能很好的理解你的程序。你说你这个能反混淆到哪里去?

这个很溜,就不怕自己都记不住了
SoulRed 2019-01-20
  • 打赏
  • 举报
回复
混淆可以让程序的可读性降低到头皮发麻的阶段。。。
而且混淆过后,无法还原。(编译可以反编译)
圣殿骑士18 2019-01-19
  • 打赏
  • 举报
回复
怎么可能还原的出来。

你可以假想,混淆的过程,就是有一个奇怪的人,他写代码的时候,就是用没有意义的字符来命名函数,命名变量,写的代码只有他能读懂,其他人都很难读懂。那么代码那么难读的样子,就是混淆前的样子。那你说,你反混淆能反到哪里去?

再给你讲个人工混淆的例子。我曾经看有些人建数据库,那个字段,都是Column1,Column2,Column3,,,
这种命名方式,为的什么?就是防止别人能很好的理解你的程序。你说你这个能反混淆到哪里去?

张天星 2019-01-19
  • 打赏
  • 举报
回复
引用 13 楼 shijies 的回复:
如何理解以下的话语:
混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。

预设的一些常量值,以及集合中的key与value也会变成乱码?

常量的值不会改变,但常量本身的名字会变成乱码
集合中的key和value,一般来说不会被改变,但集合的名字会变成乱码。
简单点说,
混淆器,改变你的类名、方法名、属性、变量名等等,但改变之后效果相同。
比如你一个叫做GameOrder的方法名,我在所有调用的地方,都给你改成aaa,那么调用还是一样调用,只是反编译之后阅读起来很困难。
除此之外,所有的注释应该也会被全部清理掉。
对反编译本身没有影响,只是反编译之后的代码不容易理解而已
泡泡龙 2019-01-19
  • 打赏
  • 举报
回复
大部分混淆工具还是可以被反编译的,只是反编译之后不一定 能运行。
shijies 2019-01-17
  • 打赏
  • 举报
回复
如何理解以下的话语: 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。 预设的一些常量值,以及集合中的key与value也会变成乱码?
ilikeff8 2019-01-16
  • 打赏
  • 举报
回复
引用 7 楼 橘子皮zzz 的回复:
[quote=引用 5 楼 ilikeff8 的回复:]
默认混淆差不多了,混淆过头有些程序会运行错误


默认的能返回错误行号?[/quote]

不是,我是说不管用什么混淆工具,基本混淆就可以了,混淆过头各种稀奇古怪的问题
fd34gs3yf 2019-01-15
  • 打赏
  • 举报
回复
引用 2 楼 橘子皮zzz 的回复:
混淆后貌似返回不了错误行号,我一直都不知道这个问题怎么解决,很麻烦哎
稍微了解一下混淆的原理就知道这是不可能的,混淆后的代码,特别是流程混淆后的代码,和原来的结构根本不同,有一个成语来形容你的情形再合适不过了: 刻舟求剑
fd34gs3yf 2019-01-15
  • 打赏
  • 举报
回复
引用 10 楼 橘子皮zzz 的回复:
[quote=引用 8 楼 fd34gs3yf 的回复:] [quote=引用 2 楼 橘子皮zzz 的回复:] 混淆后貌似返回不了错误行号,我一直都不知道这个问题怎么解决,很麻烦哎
稍微了解一下混淆的原理就知道这是不可能的,混淆后的代码,特别是流程混淆后的代码,和原来的结构根本不同,有一个成语来形容你的情形再合适不过了: 刻舟求剑[/quote] 1:这个世界没有不可能的事,你说的太绝对了 2:你的回答也没解决我的问题,只是陈述了一个我早就已经知道的东西,就是混淆后无法返回错误行号,所以你的回答对我一点意义都没有[/quote] 不知道你是太愚钝还是太无知,我说的很清楚了
橘子皮... 2019-01-15
  • 打赏
  • 举报
回复
引用 8 楼 fd34gs3yf 的回复:
[quote=引用 2 楼 橘子皮zzz 的回复:] 混淆后貌似返回不了错误行号,我一直都不知道这个问题怎么解决,很麻烦哎
稍微了解一下混淆的原理就知道这是不可能的,混淆后的代码,特别是流程混淆后的代码,和原来的结构根本不同,有一个成语来形容你的情形再合适不过了: 刻舟求剑[/quote] 1:这个世界没有不可能的事,你说的太绝对了 2:你的回答也没解决我的问题,只是陈述了一个我早就已经知道的东西,就是混淆后无法返回错误行号,所以你的回答对我一点意义都没有
shijies 2019-01-15
  • 打赏
  • 举报
回复
程序中集合或数组的一些字符串经混淆后,也不能还原了?
xuzuning 2019-01-14
  • 打赏
  • 举报
回复
不能还原出来 混淆 的目的就是使可读性下降
橘子皮... 2019-01-14
  • 打赏
  • 举报
回复
引用 5 楼 ilikeff8 的回复:
默认混淆差不多了,混淆过头有些程序会运行错误
默认的能返回错误行号?
ilikeff8 2019-01-14
  • 打赏
  • 举报
回复
用的.net reactoer,用惯了,其它的用的不多
ilikeff8 2019-01-14
  • 打赏
  • 举报
回复
默认混淆差不多了,混淆过头有些程序会运行错误
橘子皮... 2019-01-14
  • 打赏
  • 举报
回复
引用 3 楼 ilikeff8 的回复:
基本功能就是把名字打乱, 私有变量和方法都重命名成乱码了
还能有办法让他返回正确的错误行号么,有的情况下只能在客户的机器上才能跑出错误
ilikeff8 2019-01-14
  • 打赏
  • 举报
回复
基本功能就是把名字打乱,
私有变量和方法都重命名成乱码了
橘子皮... 2019-01-14
  • 打赏
  • 举报
回复
混淆后貌似返回不了错误行号,我一直都不知道这个问题怎么解决,很麻烦哎

110,571

社区成员

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

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

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