能力值:
( LV13,RANK:970 )
|
-
-
2 楼
先坐个沙发。
我想就是把序列号分步算,分步验证,就算泄漏也不会同时全部泄漏。再就是算法中故意出来很多假的明码,迷惑破解者。
|
能力值:
(RANK:760 )
|
-
-
3 楼
偶的讨论:
F(序列号)==F(用户名)
F(序列号)==用户名
比如对序列号采用一种算法处理,生成tempSn,然后对用户名采用另外一种算法处理,生成tempName,如果tempSn==tempName,刚验证成功.
这些算法可以采用对称密码学算法或者公钥密码学算法来实现.
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
编程的时候写个字符串加密类继承处理所有处理的明文的字符串类,并且修改编译器的头文件,将所有定义字符串和字符的关键字改名,并用具有加密性质的宏替代 嘿嘿~ 想在程序中加明文都难了!
|
能力值:
( LV9,RANK:140 )
|
-
-
5 楼
我也坐坐。我比较认同3楼的,前天我就见过这种比较方法的,还没找到算法呢。
|
能力值:
(RANK:460 )
|
-
-
6 楼
最初由 vcasm 发布 编程的时候写个字符串加密类继承处理所有处理的明文的字符串类,并且修改编译器的头文件,将所有定义字符串和字符的关键字改名,并用具有加密性质的宏替代 嘿嘿~ 想在程序中加明文都难了!
偶想到了敬爱的Ken爷爷
|
能力值:
(RANK:300 )
|
-
-
7 楼
如果真的需要储存计算出来的数据,又不想直接存放到 stack 或 heap ,可以考虑用 linked list 把每一个字节分散储存
typedef struct tagDATA
{
char data;
struct tagDATA *next;
}DATA;
每一个新建的结构都用 malloc 或 VirtualAlloc ( 可以指明位置 ) 来取得空间
|
能力值:
( LV8,RANK:130 )
|
-
-
8 楼
利用加密算法将注册码变换成一个函数地址,建立异常处理后去执行,如果注册码不正确,将无法得到正确的执行地址,同时这种方法没有比较和跳转。
我认为方法很多,提出方法之一。
|
能力值:
(RANK:650 )
|
-
-
9 楼
最初由 cnbragon 发布 偶的讨论: F(序列号)==F(用户名) F(序列号)==用户名
比如对序列号采用一种算法处理,生成tempSn,然后对用户名采用另外一种算法处理,生成tempName,如果tempSn==tempName,刚验证成功. ........
用密码学来解决问题
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
最初由 nbw 发布 先坐个沙发。
我想就是把序列号分步算,分步验证,就算泄漏也不会同时全部泄漏。再就是算法中故意出来很多假的明码,迷惑破解者。
这个我赞同。分步算大大增加难度。
此外与随机数进行运算,和保存,任何时候都不在内存出现明码字串。
|
能力值:
( LV12,RANK:770 )
|
-
-
11 楼
俺也做个沙发。。。
把密码计算拆分N个分组,分组之间在通过函数影射,每个分组函数是正确密码的一个部分,只有得到全部的N个分组的函数数值,才能正确。
!!!!!关键最后还是转化成数学问题了
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
最初由 cnbragon 发布 偶的讨论: F(序列号)==F(用户名) (1) F(序列号)==用户名 (2)
比如对序列号采用一种算法处理,生成tempSn,然后对用户名采用另外一种算法处理,生成tempName,如果tempSn==tempName,刚验证成功. ........
方法(2)和明码无异
方法(1)中序列号和用户名殊途同归,要求两个函数多次相交(理论上应有无数个交点),并且其中至少一个算法恐怕要可逆(即由函数值反推出自变量的值),不然,作者自己怎么处理?也有可能被做出注册机。另外,在函数F(序列号)中,若不采取措施,序列号还是会以明码出现的!
|
能力值:
( LV4,RANK:50 )
|
-
-
13 楼
最初由 qiweixue 发布 俺也做个沙发。。。 把密码计算拆分N个分组,分组之间在通过函数影射,每个分组函数是正确密码的一个部分,只有得到全部的N个分组的函数数值,才能正确。 !!!!!关键最后还是转化成数学问题了
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
F(序列号)==F(用户名) 这种方法不错,只要选择好了函数,要想反汇编找到函数并求逆是很困难的
|
能力值:
( LV9,RANK:1060 )
|
-
-
15 楼
看看,学习,再鼎鼎
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
函数1(用户名)计算出中间值A;
函数2(用户输入的注册码)计算出中间值B;
比较A和B;
|
能力值:
( LV9,RANK:450 )
|
-
-
17 楼
我的方法更加简单
Hash(注册码)==Hash(真注册码)
这样就算出现拉。如果Hash是md5等等,也没有办法。
|
能力值:
( LV4,RANK:50 )
|
-
-
18 楼
都用到了密码学的东西,偶菜鸟看不懂,但理解各位的意思,有没有一些简单并凑效的办法啊,不用密码学那套算法什么的。
|
能力值:
( LV9,RANK:250 )
|
-
-
19 楼
最初由 netsowell 发布 我的方法更加简单 Hash(注册码)==Hash(真注册码) 这样就算出现拉。如果Hash是md5等等,也没有办法。
老大,是不是打错了?计算md5前还压入真码?
|
能力值:
(RANK:410 )
|
-
-
20 楼
最初由 lordor 发布
老大,是不是打错了?计算md5前还压入真码?
我也以为。。。
他的意思应该是Hash(注册码) == 和经过Hash(真注册码)加密的Hash值比较吧。
|
能力值:
( LV9,RANK:450 )
|
-
-
21 楼
最初由 lordor 发布
老大,是不是打错了?计算md5前还压入真码?
表达错误
Hash(注册码)==真注册码的hash值
|
能力值:
(RANK:300 )
|
-
-
22 楼
最初由 netsowell 发布
表达错误 Hash(注册码)==真注册码的hash值
真正注册码的 hash 值,是固定的,还是根据注册名字在程序里计出来的 ?
如果是以注册名字计算出来,这样便跟普通的注册码检查同样存在 stack 出现明码的问题
|
能力值:
( LV9,RANK:290 )
|
-
-
23 楼
最初由 riijj 发布
真正注册码的 hash 值,是固定的,还是根据注册名字在程序里计出来的 ? 如果是以注册名字计算出来,这样便跟普通的注册码检查同样存在 stack 出现明码的问题
同意楼上兄弟的说法
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
设f1 f2满足交换律:
f2( f1(m) ) = f1( f2(m) )
设m=f1(user); 真实的key=f2(user);
检验f1(inputkey) == f2(m)即可.
本法的弊端是不能泄漏加密机制,所以也有一定局限性。
|
能力值:
( LV9,RANK:770 )
|
-
-
25 楼
关键是能不能求逆,不然自己都不知道注册码了.
|
|
|