首页
社区
课程
招聘
[求助]PB程序算法求助
发表于: 2009-9-14 12:38 4982

[求助]PB程序算法求助

2009-9-14 12:38
4982
反编译后的代码

//clicked (none) returns long [pbm_bnclicked]
//long ancestorreturnvalue
string ls_key
string ls_reg_code


CALL SUPER::clicked
ls_reg_code = trim(PARENT.regedit_code.text)
ls_key = "HKEY_LOCAL_MACHINE\SOFTWARE\FYSOFT"
registryset(ls_key,"registcode",regstring!,ls_reg_code)
registryget(ls_key,"registcode",regstring!,ls_regedit_code)
IF mid(f_regedit_reg_success("fy5.0"),1,15) = ls_regedit_code THEN //6
messagebox("注册","软件注册成功!")
ELSE //6
messagebox("注册","软件注册失败!请检查你输入的注册码!")
END IF //6
RETURN


//Public function f_regedit_reg_success (string soft_ver) returns string
//string soft_ver
string ls_disk_serial


ls_disk_serial = f_regedit("c:")
IF len(ls_disk_serial) > 5 THEN //4
ls_disk_serial = mid(ls_disk_serial,1,5)
END IF //4
ls_disk_serial = ls_disk_serial + soft_ver
RETURN gf_md5string(ls_disk_serial)


//Public function f_regedit (string rootpath) returns string
//string rootpath
string ls_rootpath
string ls_volumnename
ulong lul_volumenamesize
ulong lul_volumeserialnumber
ulong lul_maximumcomponentlength
ulong lul_filesystemflags
string ls_filesystemnamebuffer
ulong lul_filesystemnamesize
boolean lb_rtn


ls_rootpath = rootpath
ls_volumnename = space(256)
lul_volumenamesize = 256
lul_maximumcomponentlength = 256
ls_filesystemnamebuffer = space(256)
lul_filesystemnamesize = 256
lb_rtn = FALSE
lb_rtn = getvolumeinformationa(ls_rootpath,ls_volumnename,lul_volumenamesize,lul_volumeserialnumber,lul_maximumcomponentlength,lul_filesystemflags,ls_filesystemnamebuffer,lul_filesystemnamesize)
IF lb_rtn = TRUE THEN //19
f_encry_password("1",string(lul_volumeserialnumber))
ELSE //19
ls_rootpath = ls_rootpath + "\"
lb_rtn = getvolumeinformationa(ls_rootpath,ls_volumnename,lul_volumenamesize,lul_volumeserialnumber,lul_maximumcomponentlength,lul_filesystemflags,ls_filesystemnamebuffer,lul_filesystemnamesize)
IF lb_rtn = TRUE THEN //30
f_encry_password("1",string(lul_volumeserialnumber))
ELSE //30
HALT
END IF //30
END IF //19
RETURN string(lul_volumeserialnumber)


//Public function f_encry_password (string as_pwd,string as_action) returns string
//string as_pwd
//string as_action
string ls_temp
string ls_return
integer i
integer li_pos


IF as_pwd = "" THEN //4
RETURN ""
END IF //4
IF as_action = "1" THEN //8
FOR i = len(as_pwd) TO 1 STEP -1 //3
ls_return = ls_return + char(asc(mid(as_pwd,i,1)) + 5)
NEXT //3
ELSE //8
FOR i = len(as_pwd) TO 1 STEP -1 //7
ls_return = ls_return + char(asc(mid(as_pwd,i,1)) - 5)
NEXT //7
END IF //8
RETURN ls_return



我分析了下,软件是先取C盘序列号,然后用f_encry_password 对其加密转换,得到结果的前五位与版本号fy5.0相连,得到字符串然后用MD5加密,取加密结果的前15位即为注册码。

但用VB试了下,还是注册不成功,各位帮忙看下。

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你最好还是用对应版本的pb写程序来计算,pb的计算和其它开发语言的函数的计算结果有的有差异。
2009-9-14 13:06
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
3
mid(gf_md5string(mid(f_regedit("c:"),1,5)+"fy5.0"),1,15)=序列号

f_encry_password(),应该没用~
2009-9-14 13:09
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
f_encry_password()在f_regedit()里被调用了
2009-9-14 13:15
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
没玩过PB
这个是9.0版的
2009-9-14 13:16
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
搞定了
f_regedit("c:")其实就是程序给出的机器码,不用自己去算
汗 做了好长时间无用功
2009-9-14 13:29
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看见PB就头疼。。。。
2009-9-15 10:13
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
8
虽然被调用了,但 f_encry_password("1",string(lul_volumeserialnumber)) 没有赋值给任何变量,lul_volumeserialnumber没有任何变化~
2009-9-15 12:48
0
游客
登录 | 注册 方可回帖
返回
//