当前位置: 代码迷 >> C# >> .net的程序这么轻松就破解了,请教还如何加密呢
  详细解决方案

.net的程序这么轻松就破解了,请教还如何加密呢

热度:317   发布时间:2016-05-05 02:51:54.0
.net的程序这么轻松就破解了,请问还怎么加密呢?
前些天朋友教了我两招破解的方法,其实也就是下载一些工具去脱壳和反混淆,然后就可以看到源代码。就这样,我很轻松的破解了几个.net的程序,包括同行的一些的软件,几乎不费什么劲。现在问题来了,这么轻松就可以看到源码了,那我还能怎么去加密软件呢?有的人一个软件写了半年却被人几分钟破解出来了,那岂不是徒劳,虽然我知道软件无法做到绝对安全,但是也要做到相对安全吧,起码不会让我这种新手破解得了。
还有一直听说用网络验证安全,但我想了下,好像也不安全,比如:客户端(用户),向服务端发送登陆的用户名和密码,服务端接收后进行验证,然后返回信息给客户端,客户端根据返回的信息进行相应的操作,比如是否存在此用户、用户级别、到期时间等等,然后跳到不同的功能界面,显示出不同的级别之类的。问题就在这里,客户端接收服务端的信息一般是用一个类、结构之类的存在本地的数据来接收吧?要是破解的人直接修改这个类的信息呢?或者直接把登陆的If else之类的判断逻辑给删除掉,这样不就能跳过验证吗?那网络验证岂不是多余?
在此,求各位大神支支招啊,给小弟解答一下疑问,谢谢!!!
------解决思路----------------------
网络验证安全需要服务端做一些工作,如果客户端没有通过验证,你不提供服务不就行了?
如果你的程序就是一个普通的winform程序,而不是C/S的,那还弄个服务器来验证什么啊,做个注册码不就得啦...
------解决思路----------------------
我们单位买的印度阿三的软件,可是怎么都看不到源代码的,求破解工具
------解决思路----------------------
客户端提交的数据正确,那么服务端就给他提供服务,不正确直接就拒绝服务了,服务端最多返回一个拒绝信息,客户端在本地修改这个返回信息一点用也没有吧
------解决思路----------------------
怎么简单就破解么?

dev控件你去破解吧 然后你能大赚

对了  vs跟sql 客户端工具好像也是winform开发的..

这个你也破解吧.. 然后开发一套VS2018 改个名字. 弄上你的QQ你多威风..




------解决思路----------------------

青蛙永远都说天只有井盖那么大····
------解决思路----------------------
引用:
Quote: 引用:

网络验证安全需要服务端做一些工作,如果客户端没有通过验证,你不提供服务不就行了?
如果你的程序就是一个普通的winform程序,而不是C/S的,那还弄个服务器来验证什么啊,做个注册码不就得啦...

没明白,服务端不提供服务具体指的是?winform程序不就是c/s吗?用户数据都存在服务端,肯定要服务端验证啊,也不可能将用户信息保存他到本地吧,以及用注册码,那破解起来也太简单了。

winform只是winform,还要分为C和S.
webform本身只能作为S,IE才是B.合起来是B/S
如果你将所有代码逻辑都放到一个程序里,那还要服务器干什么,就只为了做个验证?
你所有具体处理的逻辑应该是都放到服务器里,客户端只负责跟服务器通信,发送请求,返回数据,这样.
如果客户端登陆不成功,服务端不响应请求不就得啦?
客户端本身除了通信什么代码都没有,爱破译破译去呗.
真正的服务在服务器里运行呢,谁能偷走?
------解决思路----------------------
引用:
Quote: 引用:

怎么简单就破解么?

dev控件你去破解吧 然后你能大赚

对了  vs跟sql 客户端工具好像也是winform开发的..

这个你也破解吧.. 然后开发一套VS2018 改个名字. 弄上你的QQ你多威风..

我贴子都说了我是新手,你不回答就算了,还泼冷水,你说的这些软件不早被人破解了吗?难道破解的人都赚钱了吗?人家都是分享出来而已,破解别人的软件拿来卖难道不可耻吗?怎么你还觉得光荣、威风?。我破解的软件的确简单,直接修改IL代码或者模拟一些数据就可以了,破解大型的软件我没这能耐,我也从没说过。我学破解的目的仅仅是想通过这来学习保护软件。到底是我提的问题有问题,还是你的回答有问题?

保护软件,你想多了.
如果你的软件没什么实用性,没人会去破解的.
反之,连WINDOWS都有盗版的,你能研究出比微软更NB的保护策略?
------解决思路----------------------
Themida加壳就行
------解决思路----------------------
不是客户端没有逻辑,而是没有核心算法,访问数据库也不是客户端直接去访问.
参考QQ软件,做成WEB形式还能像现在这么方便么?
做成WEB还能点对点传文件么,还能远程协助么?

那么如果你不登陆,而是用破解软件去模拟,也只能做成跟飞秋一样的局域网软件,
因为到了公网上,服务器不给你信息存数据库,不告诉你对方的IP,你什么都干不了,只能玩玩截图等本地就有的功能.
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

网络验证安全需要服务端做一些工作,如果客户端没有通过验证,你不提供服务不就行了?
如果你的程序就是一个普通的winform程序,而不是C/S的,那还弄个服务器来验证什么啊,做个注册码不就得啦...

没明白,服务端不提供服务具体指的是?winform程序不就是c/s吗?用户数据都存在服务端,肯定要服务端验证啊,也不可能将用户信息保存他到本地吧,以及用注册码,那破解起来也太简单了。

winform只是winform,还要分为C和S.
webform本身只能作为S,IE才是B.合起来是B/S
如果你将所有代码逻辑都放到一个程序里,那还要服务器干什么,就只为了做个验证?
你所有具体处理的逻辑应该是都放到服务器里,客户端只负责跟服务器通信,发送请求,返回数据,这样.
如果客户端登陆不成功,服务端不响应请求不就得啦?
客户端本身除了通信什么代码都没有,爱破译破译去呗.
真正的服务在服务器里运行呢,谁能偷走?

我的问题也说了,要做的也是做到相对安全,起码不会让我这种新手破解得了,本地验证容易破解,听说网络验证难点,所以用网络验证,如果把用户信息放本地容易被修改,他只要修改本地信息就可以修改用户级别等各方面了。如果客户端没有逻辑的话那直接做成BS不就行了吗?但我的是CS,而且不可能每次操作都请求远程服务器,速度太慢。

你破解成功了吗?
等你真正的破解成功了再来讨论这个问题才会显得有意义一点。
起码你要保证你修改后的程序集可以编译,还要伪装强命名。

对于C#来说,源码的保护是个弱项,因为反编译相对来说比较简单。但是破解并不简单,不是说你看见了代码就叫做破解。
------解决思路----------------------
防止破解的方式很多,但是并不能保证绝对的有效,要破解,你必然要调试程序,简单的做法你可以在程序启动模块添加反调试代码~ 或者软件保护代码,这都是可行的。

至于你说的网络验证,我着实没看明白或者我看完后,感觉太过于简单的,真实的网络验证不会这么简单的,在实践中我到时用过本地验证(本地搭建WCF服务) 

关于你说的反编译查看源码,这可能是net的一个弱项了,但是通过多种混淆和壳还是可以做到很好的预防的,而且自身的编码方式也很重要的
------解决思路----------------------
一般来说用c#语法糖+Dotfuscator 混淆  基本很难变回原样了的
------解决思路----------------------
http://www.cnblogs.com/TianFang/archive/2012/12/01/2797048.html
http://blog.csdn.net/wonsoft/article/details/3187916
------解决思路----------------------
XP就这么给你们破解了,还装了几E台PC,你让微软怎么办,哥们,别想太多,你的加密技术肯定没微软高的。
------解决思路----------------------
直接引用 dll 调用里面的方法不可以吗
------解决思路----------------------
没有用的,C++也一样,破解了,只要是客户端限制都几乎没用了,就像现在全宇宙最无敌的 VS studio都逃不过破解,windows系统也都逃不过的,你说一个小小的C#程序能逃得掉?

不过混淆貌似是可以通过密匙混淆的,没有指定的密匙是反编译不出来源代码的,看到的变量都是abcd之类的,也没有注释,你要是还搞得清楚那一定是世界级牛人了

我们能做到的就是,验证不仅仅在本地验证,服务器能验证的都验证,就好像现在的网络游戏出刀信息、吃药等待都要进行双向验证,不能让你一秒钟出个几百万刀吧,对不对,服务器要验证的

或者我们还可以让客户端冲服务端下载dll运行,或者下载C#源代码进行编译运行  
举例:加入窗口上有一个按钮,计算A+B 的值,
int a=1,b=2,c;
点击按钮执行的代码我们这样写
/*
请求执行代码:服务器GetCode();//结果 return {0}+{1};
*/
var code=GetCode();
c=RunCode(string.format(code,a,b));
这样子,就算你破解了有用吗?代码是服务器的
当然这样也花费了大量的性能,没人会采取的,呵呵呵呵呵  

如果别人直接修改内存地址呢?
就说那么风靡的游戏 盛大传奇吧  那么多外挂,你说要是防得住,那外挂还开发得出来?手游刚出来,八门神器。烧饼神马的App 马上就出来了
------解决思路----------------------
最主要的是服务,程序给拿去没有服务提供有啥用.
------解决思路----------------------
引用:
Quote: 引用:

Themida加壳就行

谢谢推荐,刚试过下exe可以加壳,dll好像加不了,提示:Error: .NET DLLs cannot be protected with current version of WinLicense.  请问知道原因么?还是不支持.net的dll?



Themida 2.1.8.0 Repacked  
------解决思路----------------------
引用:
Quote: 引用:


青蛙永远都说天只有井盖那么大····

作为一个新手懂的并不多,通过某种想法进行推测、尝试,其间有错误的地方是正常的,难道学习不是以这样目的开始的吗?而是像你样互相BS?你这种回答就像“XXXX”,到底XX在哪里,你又说不出来,像你这种超级大牛其实完全可以不用回复,当然如果你喜欢BS别人来建立自己智商的话,请便

咋还进行人身攻击了····
------解决思路----------------------
我也有类似的困惑过,不过我后来想开了。
1、C#代码到处都是的,真正做开发的时候也是到处拿现成代码来改
2、现在破解软件很简单,别指望写一些单机的软件然后去赚钱,不好的软件没有人理,好的软件高手一下就破了,看看windows都逃不开被破的命运。
3、卖软件不如卖服务,看看oracle,ibm
4、如果想靠做软件卖钱,不如去给人做定制软件。
5、可以考虑一部分功能放在服务器上,一部分功能放在本地。

我其实想走的是第4条路,找找关系,拉拉项目。
------解决思路----------------------
很多类型的程序其实是不怕破解的
不是说技术上无法破解,而是破解永远无法保证是100%把一个软件破解掉

比如说ERP软件,可以在程序中设置很多很多个破解检查点,通过各种方法来检查自身是否被破解

有的检查点检查到破解以后会进行提示或者直接阻止程序使用
而有检查点则作为暗桩隐藏起来,等到软件使用个一年半载,让它莫名其妙出现一些故障,比如莫名其妙的给员工加工资;莫名其妙的库存没了或多了,


很多类型的程序甚至游戏都可以这样
比如前段时间出的游戏<英雄萨姆>,如果是破解版,游戏并不会不让你进入,而是安排一个打不死的大怪物把玩家虐了一遍又一遍

你可以再想象一下,如果破解版的愤怒小鸟 里面随机出现一些怎么打都打不破的墙会怎么样

你可以把这样的声明写在程序里面
你再来看看谁会破解你的软件,破解了又有谁会去用
------解决思路----------------------
学习了。。。。
------解决思路----------------------
想多了哦,亲 如楼上有人所说 其实现在主要是服务 不是软件
------解决思路----------------------
引用:
XP就这么给你们破解了,还装了几E台PC,你让微软怎么办,哥们,别想太多,你的加密技术肯定没微软高的。

其实WIN7和SERVER 2008也都破解了的.VS也破解了.

不过可以学习AUTO CAD和PS,允许你破解,但是藏个后门,在网络上能查到哪些终端使用的是破解版.
个人用他们管不过来,但是大公司也要用破解版,就要面临被起诉
只要大公司肯掏钱买正版,他们就有利润了.
------解决思路----------------------
我觉得这个话题的分成两部分,一部分是源代码保护,另外一部分是软件防破解。破解这个话题其实就是无解的,所以现在大家都愿意做基于web的东西,你拿不到总没法破解吧,除非黑服务器。

源代码保护才是lz的正题啊,我写dotnet和android的程序也不太注意保护,如果能随随便便反编译还是太可怕了
------解决思路----------------------
引用:
我觉得这个话题的分成两部分,一部分是源代码保护,另外一部分是软件防破解。破解这个话题其实就是无解的,所以现在大家都愿意做基于web的东西,你拿不到总没法破解吧,除非黑服务器。

源代码保护才是lz的正题啊,我写dotnet和android的程序也不太注意保护,如果能随随便便反编译还是太可怕了

有什么区别么?不需要源代码也可以破解?暴力破?
------解决思路----------------------
真正来说,一般的软件是没有人去破解的,因为可用性不大的软件破解了也没用啊。。不是吗
------解决思路----------------------
正所谓 道高一尺,魔高一丈,破解与反破解永远在较量。然而,纵观历史,我们从未发现有哪个是靠着破解别人的软件发家致富的,因为任何一个头脑清醒的买家都不会花钱去买一个偷盗而来的软件,任何一个有远见的公司也不会聘请一个性格有缺陷,良知有问题的人留在公司。一个破解高手尽管你才华再横溢,也不可能得到社会公众的认同,因为大家只会把你当做夜壶,需要的时候拿来用一用,不需要的时候恨不得把你踢得远远的。
------解决思路----------------------
引用:
怎么简单就破解么?

dev控件你去破解吧 然后你能大赚

对了  vs跟sql 客户端工具好像也是winform开发的..

这个你也破解吧.. 然后开发一套VS2018 改个名字. 弄上你的QQ你多威风..



VS SQL其核心还是C++。。。我不确定界面是不是,但绝大多数都是本机代码。

LZ一天到晚防止别人破解,倒不如用心去好好设计一个程序。一般定制软件客户就那么几个,破解别人也不会有需求去用的。
想加壳我可以帮忙
------解决思路----------------------
现在软件卖的主要还是服务了,服务卖的好了,源码神马被破解了倒是没啥危险。一但用户依赖上了你的软件服务,基本就上瘾了
------解决思路----------------------
哎,楼主就问了一个才C#写的程序怎么加密,不被别人反编译出来,一群人在讨论破解的意义...这让楼主情何以堪...
------解决思路----------------------
你又不是卖单机版war3,你怕毛破解啊。你服务端的验证策略怎么做得,他拿到源码又咋样,最多整一堆非法报文攻击服务器
------解决思路----------------------
引用:
哎,楼主就问了一个才C#写的程序怎么加密,不被别人反编译出来,一群人在讨论破解的意义...这让楼主情何以堪...


你觉得大家让你觉得无语?这么告诉你把,只要不是编译成native code的都能反编译,无论你怎么混淆。C#这样,java也这样,除非你加壳到虚拟机都不认识他了,当然,程序也就跑步起来了,失去了意义。所以大家才说纠结这个问题没意义
------解决思路----------------------
引用:
Quote: 引用:

哎,楼主就问了一个才C#写的程序怎么加密,不被别人反编译出来,一群人在讨论破解的意义...这让楼主情何以堪...


你觉得大家让你觉得无语?这么告诉你把,只要不是编译成native code的都能反编译,无论你怎么混淆。C#这样,java也这样,除非你加壳到虚拟机都不认识他了,当然,程序也就跑步起来了,失去了意义。所以大家才说纠结这个问题没意义

是啊,不管如何加密,如何混淆,最终还是得翻译成电脑能识别的机器码,电脑能识别,就能被反汇编.
------解决思路----------------------
唉,真真的验证实在服务器端的,如果你的验证在客户端,那这程序写的也太死了,客户端最多做个验证看输入的数据是否符合输入要求而已!唉!
------解决思路----------------------
软件防盗必须是在线模式,把软件部分核心功能放到服务端,如果是离线软件必须结合加密狗硬件设备。
------解决思路----------------------
每个人都可以想想,如果你曾经去参加过一个比较大、比较正规的产品开发,就算把svn上几百兆的东西都下载到你的电脑上,主要是有所有的源代码,和所有必要的文档(多余的垃圾文档很少),让你读,你有多大本事读懂?

而网络软件基本上都是服务器端部署在专业的电信机房,给你源代码你也没有部署和修改的权限的。你必须循序设计好的业务逻辑、从客户端访问。

反过来就知道了,整天操心这个的人,大多都是缺少产品应有的完备性,原本就没有什么东西可拿出的(或者靠关系卖点软件,而不是靠软件技术)。你最好还是先找个大点的公司团队、或者具有抽象成熟度的、不断持续更新版本的产品去做何学习。
------解决思路----------------------
引用:
还有一直听说用网络验证安全,但我想了下,好像也不安全,比如:客户端(用户),向服务端发送登陆的用户名和密码,服务端接收后进行验证,然后返回信息给客户端,客户端根据返回的信息进行相应的操作,比如是否存在此用户、用户级别、到期时间等等,然后跳到不同的功能界面,显示出不同的级别之类的。问题就在这里,客户端接收服务端的信息一般是用一个类、结构之类的存在本地的数据来接收吧?要是破解的人直接修改这个类的信息呢?或者直接把登陆的If else之类的判断逻辑给删除掉,这样不就能跳过验证吗?那网络验证岂不是多余?


可能你只是见过办公室内使用的小国产OA软件。这类软件骗骗国营单位还差不多。真正的c/s程序就好像QQ那样的,人家服务器跟客户端是可以独立的系统,服务器的会不会有什么“安全”问题跟客户端程序没有关系。
------解决思路----------------------
1 maxtocode加壳
2 Dotfuscator 混淆
3 多加一些暗桩,在特殊情况才触发
4 用非对称加密算法验证
5 部分功能放在web服务端
6 部分功能放在加密狗内
目前想到的就这么多
------解决思路----------------------
求破解工具!
------解决思路----------------------
那个《加密和解密第三版》貌似有这方面的讲解,我当年不打算从事.net就没仔细看,你可以去拜读一下,说不定有用
------解决思路----------------------
ultraedit 就是楼主的模板
  相关解决方案