一个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 探索篇!