一关于C#程序反编译讨论的帖子
最近做的题库系统做完了.我把程序打包后,并安装.我把连接数据库的用户名,IP地址,密码写在了配置文件里.并用DES加密用户名和数据库名字. 我的一个朋友在试我的程序,我看它用了一个反编译程序,一会就把我写的DES加密解密的方法弄出来了,关轻易得到了加密的KEY和向量.
结果.......就直接得到了我连接数据库的用户名和密码.
怎么C#的程序这么容易就能让人看到原代码啊.郁闷.
1 楼 C#确实比较容易被反编译~
2 楼 谁叫微软有反编译工具那
3 楼 2用代码混淆器,可以让别人反编译后看你的代码累一点,哈哈
4 楼 每每对C#了解的越深,就越是感觉C#这东西没法用了。
5 楼 没有办法啦,
6 楼 用代码混淆器,只是看起来稍微累点,没解决根本问题,哈哈
7 楼 哪大家做C/S结构程序时,如果隐藏连接数据库的用户名和密码.
8 楼 这个问题与C#无关,任何编程语言都有这个问题,你把密码包含在程序或配置文件中交付给用户,无论你怎样做,都不可能绝对安全。
9 楼 就算你是用C++写的程序,要破解也不是难事
10 楼 服务器采用web services,你本地连接服务器的web services,那么本地就可以不用知道服务器的密码了。
11 楼 隐藏密码可以使用webservice处理数据
12 楼 是这样的,兄弟,命苦不能怨政府
13 楼 C#有个反编译工具,反编C#代码易如反掌,
不过只能反编大70%的代码。
14 楼 但是我看大多数都能看到代码.如封装在类里的方法\类成员变量什么的,都看得见.
"隐藏密码可以使用webservice处理数据"
这个怎么处理,没有用过,能否讲讲?
15 楼 你用什么DES,没意义,白做了.无论你用什么加密算法,无论你的加密过程多么复杂.
你最终还是要以明文发送数据包去连接数据库吧?
只要截取了数据包下来分析一下就能知道SQL连接密码了.这个问题也跟开发语言无关,你用什么语言编写的程序都跟不过最后这一关.所以说是你的设计方案本身就有问题,还是建议你还Web Services做
16 楼 哦,楼上朋友的话说得很让我茅塞顿开阿。
17 楼
18 楼 当然还是要用Web Services拉 偶们公司做的网上审批系统就是用的Web Services 8然万一用户名和密码被人知道就可以随便批拉!~
19 楼 这个跟C#没什么关系,你数据库用户名是写在配置文件里吗?
我们这里用的加密,是自己在原来的加密函数基础上,重新写的函数,调用函数需要密码的。要么反编译出来的结果会不正确。
20 楼 有谁可以告诉我怎么截获数据包.
21 楼 大家都说用Web Services来做,但哪位能讲讲思路和方法,来个例子.
22 楼 我知道,但是不告诉你,嘿嘿!!
23 楼 我想告诉你,但是我不知道,嘿嘿!!
24 楼 webservice就是放在服务器的类,你在客户端调用这个类,进行操作,在VS中加入webservice就是web引用.
25 楼 学习
26 楼 做web,有了代码肯定就能知道密码,这个没办法的.
27 楼 因为C#是与JAVA竞争,是作网络应用的,网络不存在反汇编,作WINFORM最好用C++
28 楼 C++就不好破解了么?,一大堆的脱壳工具,一大堆的PE修改工具,在C++里面只要你把字符串写在类成员里,保证五分钟之类就给你找出来并改掉
29 楼 今天看了一点关于"Web Services"的东东,你们的意思是,在服务器端在Web Services里写个类或者写个方法,把连接数据库用的东东放在里面,在客户端的WINFORM里调用这个方法,对不?
如果是这样,哪调用Web Services里方法返回的值,能不能被得到,我知道有些软件是专门监听网络流的.
30 楼
31 楼 现在有什么不能被反编译的语言?!!呵呵
32 楼 C++就是不能反编译啊,,只能反汇编吧?
33 楼
34 楼 楼主你没用过Reflector吧,没混淆的基本上源代码都能看得见的。
35 楼 c/s为了保护数据库名用户和密码,你可以在数据库上开一个公用用户名,这个用户权限只给只读访问用户表,当客户端用此用户登陆数据库效验成功后,从数据库返回另一个用户名和密码,客户端再用具有新权限的用户名登陆使用,这样就不怕被反编译了.
此乃拙见,希望各位兄弟批评指正
36 楼 楼上,截取数据的话,你的新用户名和密码一样会被看到
37 楼 不知道用MD5加密可不可以
38 楼 楼主随便看看cram-md5的rfc就可以搞定了
39 楼 你的安全机制本身设计的就有问题
40 楼 有一种办法可以解决既要以C/S方式直接登录数据库又不泄露数据库密码的问题。那就是用户登录系统时所用的密码就是登录数据库的密码,分发给用户的程序和配置文件不包含任何密码信息,数据库配置为使用安全连接,即使别人从网络上截获了数据包也无法知道所用的密码。麻烦之处在于需要为每个用户在数据库上建立一个账户。不过这个可以使用程序自动完成,数据库上也可以配置用户组来为每个数据库用户授予对表、视图或存储过程的访问权限。这个方案应该是比较安全的,建议采用。
41 楼 连接数据库的密码中插几个韩文,日文字.或其他的希奇古怪的字符.呵呵.
42 楼 混淆一下,加个壳,搞定
43 楼 使用应用服务器不知行不行
44 楼 加一个服务器验证 或者看看MAX CODE
45 楼 我测试过了 抓包 可以看到 数据 帐号 表名 SQL语句
但是就是看不到密码,密码自动被加密了的。
楼主 是把密码存在了程序里面 当然可以看到了。是通过破解程序或者反编译哈
通过抓包 还是看不到密码的
请问那位高手知道 用Sniffer抓包 可以看到密码的站出来探讨一下
46 楼 但是就是看不到密码,密码自动被加密了的
密码肯定不会明文传送的,都是做了手脚再传送的。
47 楼 可以用windows认证方式呀,这样不用写口令,直接管理服务器就可以了,适用于局域网上的程序(服务器最好是域服务器),对于互联网就采用Webservise就可以了。
48 楼
49 楼 楼上有人建议用户登录系统时所用的密码就是登录数据库的密码,我觉得这样也不行,如果这样,那么用户完成可以使用数据库的客户端来连接数据库,直接访问后台数据,这样完全可以避免应用系统的逻辑。而使用windows认证的方式,同样也有这个问题。我觉得,解决方法还是使用三层结构,使用应用服务器来达到安全的目的。其实webservise就是这样的解决思路。不过,同质系统其实没有必要使用webservise,效率比较低。
50 楼 所以以后别用C#了
51 楼 找混淆器吧.
52 楼 混淆器管一点用。
要是用了 MaxtoCode 这款国人做的佼佼工具软件,就效果不一般了。
这款工具软件就是用来防止 .NET 软件被反编译的。http://www.maxtocode.com/
不过,楼主的安全机制本身有问题。加密的东西能这么做?
对称加密的密钥最好要在非对称加密后再传输,以供进行对称解密。
53 楼 怎么知道一个文件是什么语言写的呢?
54 楼 呵呵MD5加密是不能反編譯的。但你的代碼算法還是很容易被人獲知的!
55 楼 数据库用户名密码没事丢到客户端去做什么?
你只要把服务器的ip和端口给客户端就好了
服务器与客户端全部通过tcp/ip通讯,跟数据库无关,绝对安全。
56 楼 对于直接连数据库的CS应用程序,也只能这样了,如果要避免用户直接连数据库而绕过应用逻辑,其实也有办法,那就是把所有的应用逻辑都写进存储过程,用户只有访问存储过程,或读取表或试图的权限,没有写表的权限。传统的C/S模式就是这么做的。