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文件进行外壳加密,外壳加密具体步

骤请参考用户使用手册。