首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于加减密 xor 等 增强防破解!

2013-02-24 
关于加减密 xor 等 加强防破解!!!!!我编写一软件用 xor 或者其他方法 加减密 一些文字那如果软件被人拿去

关于加减密 xor 等 加强防破解!!!!!
我编写一软件用 xor 或者其他方法 加减密 一些文字;那如果软件被人拿去了;会不会容易被解密出来?
怎么样才能避免被破解?
[解决办法]
关键的关键是看有没有人对你的程序感兴趣,如果不敢兴趣,需要花钱找人破,如果感兴趣,花钱也挡不住破解
[解决办法]

引用:
我采用网络加密;这样 密钥和方法分开来的话  是不是就安全很多了;


安全重心转移到网站安全了
[解决办法]
把解密代码放到服务器上,密文发送服务器,解密后原文返回
[解决办法]
加啥密啊,你的软件如果有人感兴趣你怎么防也防不住破解,如果没人感兴趣的话搞加密浪费时间精力还加大程序运行负担。你看看你手上用的xe,是正版的吗?
[解决办法]
一定要有比较强的反调试能力
[解决办法]
有人破解你的程序,说明你的程序不错,值得去破解,或者说使用的比较广泛!这样的话估计防不住破解!如果程序一般,连破解的兴趣都没有,你还提防啥?能难住初级新手就可以了,对于比较资深的破解者来说,对你的程序感兴趣,你应该高兴才对,就像windows,这么多盗版微软不知道吗?占领市场才是正理,如果你的软件能够占领80%的市场,只要有很少一部分用正版你就偷着笑吧
[解决办法]
先用 DES 加密一次  然后再用算法加密.  然后再 DES 一次.   密钥随机生成 


顺便给你看一下我现在用的算法

// 加密一段字符串
// inBuffer :   传入明文 /*IN*/
// outBuffer:   输出密文 /*OUT*/
// inLen:   明文长度 /*IN*/
// outLen:密文长度 /*OUT*/
BOOL Encrypt( const unsigned char * inBuffer , 
unsigned char * outBuffer , 
int inLen , 
int & outLen )
{
if( outLen < inLen )
return FALSE;

int nFlag = 0 , i = 0;
register unsigned long lValue= m_key.lValue;
for( i = 0 ; i <= inLen - 4 ; i += 4 )
{
register unsigned char cTemp = m_key.mFlag[ nFlag ];

__asm 
{
mov edx , inBuffer 
mov eax , [edx]
mov cl  , cTemp
ror eax , cl
xor eax , lValue
mov edx , outBuffer
mov [edx] , eax
}

nFlag ++;
nFlag %= 4;

inBuffer += 4;
outBuffer += 4;
}

if( i < inLen )
{
if( ROUND_UP_4BYTES )
{
// 不足4字节补齐
unsigned long lTemp = 0;
memcpy( &lTemp , &inBuffer[i] , inLen - i );

i+= 4;
if( outLen < i )


return FALSE;
register unsigned char cTemp = m_key.mFlag[ nFlag ];
__asm 
{
mov edx , inBuffer 
mov eax , [edx]
mov cl  , cTemp
ror eax , cl
xor eax , lValue
mov edx , outBuffer
mov [edx] , eax
}
}else
{
// 不圆整就1字节移位异或
for( int j = i ; j < inLen ; j ++ )
{
register unsigned char cTemp = m_key.mFlag[ j-i ];
__asm 
{
mov edx , inBuffer
mov al , [edx]
mov cl  , cTemp
ror al , cl
xor al , cTemp
mov edx , outBuffer
mov [edx] , al
}

++inBuffer;
++outBuffer;
}

i = inLen;
}
}

outLen = i;
return TRUE;
}

// 解密一段字符串
// inBuffer :   传入密文 /*IN*/
// outBuffer:   输出明文 /*OUT*/
// inLen:   密文长度 /*IN*/
// outLen:明文长度 /*OUT*/
BOOL Decrypt( const unsigned char * inBuffer , 
unsigned char * outBuffer , 
int inLen , 
int & outLen )
{
if( outLen < inLen )
return FALSE;

int nFlag = 0;
int i;
register unsigned long lValue= m_key.lValue;
for( i = 0 ; i <= inLen - 4 ; i += 4 )
{
register unsigned char cTemp = m_key.mFlag[ nFlag ];

__asm 
{
mov edx , inBuffer
mov eax , [edx]
xor eax , lValue
mov cl  , cTemp
rol eax , cl
mov edx , outBuffer
mov [edx] , eax
}

outBuffer += 4;
inBuffer  += 4;
nFlag ++;
nFlag %= 4;
}

if( i != inLen )
{
if( ROUND_UP_4BYTES )
return FALSE;
else
{
// 不圆整就1字节移位异或
for( int j = i ; j < inLen ; j ++ )
{
register unsigned char cTemp = m_key.mFlag[ j-i ];
__asm 
{
mov edx , inBuffer
mov al , [edx]
mov cl  ,cTemp
xor al , cl
rol al , cl
mov edx , outBuffer
mov [edx] , al
}

++inBuffer;
++outBuffer;
}
}
}

outLen = inLen;
return TRUE;
}



热点排行