首页
社区
课程
招聘
[旧帖] [求助]大家看看这段算法怎么写注册机? 0.00雪花
发表于: 2008-4-17 21:29 5373

[旧帖] [求助]大家看看这段算法怎么写注册机? 0.00雪花

2008-4-17 21:29
5373
一个PB程序,下面是检测注册码是否正确的算法,请大家看看怎么写注册机

//Public function check_register (string as_serialno,string as_registerno) returns boolean
//string as_serialno  机器码
//string as_registerno  输入的注册码
long i
long li_first
long li_last
long li_tmp
string ls_first
string ls_last
string lc_tmp
string ls_reg  //计算注册码存放

//Has been Shielded.
IF handle(getapplication()) = 0 THEN
        RETURN TRUE
END IF
as_serialno = trim(as_serialno)  //去除输入的注册码左右的空格
IF gvar.remoteaccess THEN   //是否注册
        IF len(as_registerno) > 4 THEN
                RETURN TRUE
        END IF
        RETURN FALSE
END IF
IF len(as_serialno) < 6 THEN //如果机器码长度小于6则返回否
        RETURN FALSE
END IF
ls_first = left(as_registerno,1)  //得到注册码最左边的那个字符
ls_last = right(as_registerno,1)  //得到最右边的那个字符
li_first = integer(ls_first)      //将左边的字符转换成数值
li_last = integer(ls_last)        //将右边的字符转换成数值
FOR i = 4 TO len(as_serialno)     //设置从4循环到机器码的长度
        lc_tmp = mid(as_serialno,i,1) //从第4个字符开始,每次取机器码的一个字符
        li_tmp = mod(integer(lc_tmp) * (li_first + i - 5),8)  
                                                //integer(lc_tmp) 将取得的一个字符转成数值  (li_first + i - 5) 将li_first加上循环值-5
                                                //将integer(lc_tmp)乘以li_first
                                                //Mod(n,8) 求除以8的余数

        ls_reg = ls_reg + string(li_tmp)        //
        i ++
        IF i > len(as_serialno) THEN //如果I大于机器码的长度就退出循环
                EXIT
        END IF
        lc_tmp = mid(as_serialno,i,1)
        li_tmp = mod(integer(lc_tmp) * (li_last - i - 5),8)
        ls_reg = ls_reg + string(li_tmp)
NEXT
ls_reg = ls_first + mid(as_registerno,2,1) + ls_reg + ls_last //计算出真的注册码
IF as_registerno = ls_reg THEN    //比较注册码
        RETURN TRUE
END IF
RETURN FALSE

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人知道吗?
2008-4-18 17:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有没有高手哦,指点一下啊
2008-4-18 17:52
0
雪    币: 236
活跃值: (11)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
4
非常简单的一个算法,都是明码的,

源码都在这儿,不知道有什么难度!
2008-4-18 20:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
高手,能不能给个思路?运算过程中,输入的注册码与机器码在一起运算,这里
ls_reg = ls_first + mid(as_registerno,2,1) + ls_reg + ls_last
得到的真实注册码要与输入的注册一致
2008-4-18 23:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个真的没人帮忙吗?
2008-4-22 12:35
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
同意4楼的说法
按你给的代码,已经给出了注册码的算法。
只要有机器码,就能算出注册码。

不过我没写过PB,所以不能给你整理了。
2008-4-22 12:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
注册码的算法我知道,但输入注册码与机器码一起运算后,得出的结果,要与输入的注册码相同,那么输入的注册码就是真的注册码,如果不相同,那就返回否
ls_first = left(as_registerno,1)  //得到注册码最左边的那个字符
ls_last = right(as_registerno,1)  //得到最右边的那个字符
li_first = integer(ls_first)      //将左边的字符转换成数值
li_last = integer(ls_last)        //将右边的字符转换成数值
FOR i = 4 TO len(as_serialno)     //设置从4循环到机器码的长度
        lc_tmp = mid(as_serialno,i,1) //从第4个字符开始,每次取机器码的一个字符
        li_tmp = mod(integer(lc_tmp) * (li_first + i - 5),8)  
                                                //integer(lc_tmp) 将取得的一个字符转成数值  (li_first + i - 5) 将li_first加上循环值-5
                                                //将integer(lc_tmp)乘以li_first
                                                //Mod(n,8) 求除以8的余数

还有这里
ls_reg = ls_first + mid(as_registerno,2,1) + ls_reg + ls_last //计算出真的注册码
IF as_registerno = ls_reg THEN    //比较注册码
        RETURN TRUE

as_registerno是输入的注册码
ls_reg是输入的注册码与机器码经过运算后的结果

难道要用穷举法,一个一个注册码比较?
2008-4-22 20:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
终于搞定注册机了,哈哈哈哈
2008-4-24 12:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼上仁兄,请问是如何搞定地?写个教程给偶们菜鸟分享八~万分感谢!~~~
2008-4-26 19:33
0
游客
登录 | 注册 方可回帖
返回
//