搞定了 (1千字)
谢谢letterweb。我下载了unfoxall之后,反编译,找到如下判断注册码的代码,有了源程序显然很简单,如下:* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* 文件名: CHECKSN.PRG <-- 本文件由 UnFoxAll 创建
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
IF .NOT. FILE((CSERIAL)) .OR. .NOT. FILE((CSECRET)) //检查文件cserial.sys和csecret.sys是否存在
LREGISTER = .F. //不存在就未注册
DO CHECKEXP //检查是否过期
ELSE
NSERIAL = FOPEN((CSERIAL)) //打开cserial.sys
NSIZE = FSEEK(NSERIAL,0,2)
= FSEEK(NSERIAL,0,0)
NO = FREAD(NSERIAL,NSIZE) //读取序列号
NO = DESECRET(NO) //解密序列号
= FCLOSE(NSERIAL)
NSECRET = FOPEN((CSECRET)) //打开csecret.sys
NSIZE = FSEEK(NSECRET,0,2)
= FSEEK(NSECRET,0,0)
CKEY = FREAD(NSECRET,NSIZE) //读取注册码
CKEY = DESECRET(CKEY) //解密注册码
= FCLOSE(NSECRET)
KEY1 = SUBSTR(CKEY,1,4) //注册码的前四位
KEY2 = SUBSTR(CKEY,5,8) //注册码的后四位
CKEY = KEY2 + KEY1 //前四位和后四位交换了一下
CKEY = STR(VAL(CKEY) - 550331,8) //减去550331
IF CKEY <> NO //差等于序列号吗?
LREGISTER = .F. //不等则未注册
DO CHECKEXP //检查是否过期
ELSE
LREGISTER = .T. //注册用户
ENDIF
ENDIF
至此可以很轻易地写出注册机。checkexp.prg是对时间进行判断,即判是否过期,时间放在文件setdate.sys中。
BTW:我下载的unfoxall中带的敌后武工队的注册机怎么不灵光,只好自己把unfoxall搞定了。
