hard code在代码中的db connect密码,用notepad查看生成的.exe,竟然明文一览无余!
大家可以花三分钟时间,简单实验一下:无论在Visual Studio .NET 2005或Visual Studio .NET 2008里,新建一个Project,我选的是C#语言.
类似如下定义class member变量,一个有const修饰符,另一个没有,并在一个method中引用。
public partial class Form1 : Form
{
private const string strConnectDB = @"Data Source=\My Documents\test1.sdf;password='123'";
private string strStrange = @"strange? source code was exposed in .exe!";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string strTemp1,strTemp2,strTemp3;
strTemp1 = strConnectDB;
strTemp2 = "select id,name from MyTable where id = 1999";
strTemp3 = strStrange;
}
Build Project,然后用记事本打开这个生成的 .exe查看;在文件后端,你看到了什么?!
Hard code的这两个member variables的值,以及local variable - strTemp2的值,
竟然在"二进制"结果文件里,曝漏无疑,只是变成全角而已!!
在有些简单的DB App里,某些变量(如connection string),我们希望直接hard code在code中。
但是,不希望end user,用notepad就能看到变量的值!
尤其如 connect string中的db file name & password!
怎么办?谢谢! --------------------编程问答-------------------- .net混淆进行加密 --------------------编程问答-------------------- 用.net自带的混淆进行加密 --------------------编程问答-------------------- 啊 混淆, 好高深=,=
百度了下, 很晕...
谁详解下, .net 自带混淆, 是啥? =,= --------------------编程问答-------------------- 这个..混淆了也没多大用.
或者你即使用vc也没用.
因为常量字符串不管是C++
还是C#都是明文保存的.
要加密的话录入时就加密
另外lz摆脱描述用全中文或全英文(变量名之类的除外).
中英混合会让人看着头疼. --------------------编程问答-------------------- 忘了一说,某些可以打乱常量字符串的混淆器可以达到你的要求 --------------------编程问答-------------------- 把一个加过密的连接字符串写入常量,运行时解密为一个静态变量 --------------------编程问答-------------------- 把const 去掉 --------------------编程问答-------------------- 混淆啊
或者内建一套解码函数,程序里保留解码函数和加密后的字串.
加密程序放在本地,不要公开. --------------------编程问答-------------------- 与const无关哦,没有const的那个strStrange,在.exe中也可以看到它的值,全角的。
用混淆是一个办法,比较麻烦。只是做个基本防范就可以了,没想搞得太复杂。
成员变量的值,都是ascii明文保存在.exe吗?
谢谢你的关注与答复! --------------------编程问答-------------------- 而且好像一赋值,变量的值就会暴漏,如上面例子里的“password='123'”,
在.exe里,可以看到两次!!!
大家可以实验一下!
补充:.NET技术 , C#