2024年4月8日发(作者:)
C#.net程序加密示例
以下为具有读写、限时功能的五型加密示例
加密对象
VC#.net环境下编写的程序(CSample),在本例中CSample是一个简单、基本的界面程
序。
加密目的
对CSample程序进行内嵌加密后,只有通过对应的加密锁才能打开CSample程序(显
示界面),否则不能打开。通过限时控制(设定一至三个期限及解开期限的相应密码),控制
用户的使用期限;达到加密强度高、程序运行稳定、使用便捷的目的。
加密工具
五型加密锁(序列号617622)、随锁KEY值(key1=51004,key2=11410,key3=46486,
key4=12938)、动态库、、接口程序、读写函数、密码修改工具、限时
限次工具等。
加密准备
先开发一个程序write来向加密锁中相应的地址写入数据。现在向加密锁中的1号地址
(该锁有32个地址,可任选)写入数据”12345”。步骤如下:
1、将复制到writebin Release目录下;
2、在中对动态库类libcdll5的函数进行声明,并在程序代码前引用命
名空间;
3、写入数据程序代码:
uint Lockdata=12345;
String password;
password = "abcdefgh";
ock(1,Lockdata,password);
4、成功写入数据后关闭该程序。
加密过程
步骤一:首先在VC#.net环境下打开CSample程序,运行几次,确保程序正常运行。
确定加密位置,现在根据需要确定在载入界面运行时进行加密。
步骤二:将光盘中的所有文件拷贝到计算机硬盘上,打开tools,使用工具ModPassw修
改密码。新密码值根据个人需要设置,这里我把它设置为“009lirog”。
步骤三:通过路径:内嵌加密实例.NET 找到并将复制到目
录:bin Release下。
步骤四:在中对动态库类libcdll5的函数进行声明,声明代码如下:
class libcdll5
{
[DllImport("",CharSet=)]
public static extern uint Lock32_Function(uint x);
[DllImport("",CharSet=)]
public static extern int Counter(String y);
[DllImport("",CharSet=)]
public static extern uint SetLock(int a,uint b,String c,String d);
}
步骤五: 在程序代码前引用命名空间。如下所示:
using System. Text; //引用 StringBuilder 所在命名空间
using pServices; //引用 DllImport 所在命名空间
using System. Data;
using System;
[DllImport("",CharSet=)]
public static extern int WriteLock(int address,int shuju,String pass);
[DllImport("",CharSet=)]
public static extern int ReadLock(int address,String pass);
[DllImport("",CharSet=)]
public static extern void UnShieldLock();
步骤六: 将程序校验函数ShieldPC( )函数直接写入界面代码的应用程序模块中。
public uint shieldpc(uint x)
{
int key1 , key2, key3, key4;
key1 = 51004;
key2 = 11410;
key3 = 46486;
key4 = 12938;
uint x1,x2;
long y,y1,y11,y22,y2;
uint outdata1,outdata2;
outdata2 = x & 0xffff0000;
outdata2 = outdata2 >> 16;
outdata1 = 0x0ffff & x;
x1=outdata1;
x2=outdata2;
y1 = x1 ^ key2;
y11 = x2 ^ key1;
y1 = y1 + y11;
if (y1 > 65535)
y1 = y1 - 65536;
y1 = y1 * 16 ;
while (y1 > 65535)
y1 = y1 - 65536;
y1 = y1 % key4;
y = y1 * key3;
while (y > 4294967295)
y = y - 4294967295-1;
y11 = x1 + key1;
if (y11 > 65535)
y11 = y11 - 65536;
y22 = y11 % key3;
y11 = key4 ^ x2;
y2 = y22 * y11;
while (y2 > 4294967295)
y2 = y2 - 4294967295-1;
y = y ^ y2;
return ((uint)y);
}
步骤七:在界面程序代码中写入基本加密接口程序:
uint randLock32,randShield,randnum;
//产生随机数
Random rnd=new Random();
randnum=(uint)(0,2094967295);
//把随机数传递给加密狗
randLock32 = 32_Function(randnum);
//把随机数传递给函数ShieldPc()
randShield = shieldpc(randnum);
if (randLock32 != randShield)
{
("加密件校样错误!","消息");
();
}
步骤八:基本加密完成后,为了进一步加强加密强度,读出1号地址中的数据与之进行
二重校验。加密程序可完善成二次加密:
Lockdata=12345;
password = "abcdefgh";
y = ck(1,password);
//产生随机数
Random rnd=new Random();
randnum=(uint)(0,2094967295);
//把随机数传递给加密狗
randLock32 = 32_Function(randnum);
//把随机数传递给函数ShieldPc()
randShield = shieldpc(randnum);
if ((randLock32 != randShield)||(y!=Lockdata))
{
("加密件校样错误!","消息");
();
}
步骤九:接着进行限时控制设置,在加密程序的产生随机数前加上检测时间期限的代
码:
password = "009lirog";
Lockdata = r(password);
int y,
uint Lockdata,randLock32,randShield,randnum;
String password;
步骤十:打开tools文件夹,使用其目录里的“”工具来设置时间期限及密
码。根据需要设置三段期限都为3天,则分别设置期限1为3天,密码8位以内例“33333333”,
期限2为6天,密码例“66666666”,期限3为9天,密码例“99999999”。加密后,当用户
从开始使用到第三、六、九天时,必须输入相应的密码才会正常运行,输入三次密码后,就
可以无限期运行。
步骤十一:到此具有读写、限时功能的五型锁加密完成,将加密好的程序保存好。
小贴士
可以在内嵌加密完成后,对生成的EXE文件进行外壳加密,外壳加密具体步
骤请参考用户使用手册。


发布评论