飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7004|回复: 7

[原创] 一PB程序简单算法分析

[复制链接]

该用户从未签到

发表于 2007-3-6 17:28:06 | 显示全部楼层 |阅读模式
【破文标题】一PB程序简单算法分析
【破文作者】西岭秋风[PYG]
【作者邮箱】xlqf2005@gmail.com
破解工具】PEID PBkiller
【破解平台】Win xp
【软件名称】宇阳仓库管家3000仓库管理软件 3000.61113
【软件大小】17187KB
【更新时间】2007-3-6 10:50:17
【原版下载】http://www.newhua.com/soft/48324.htm
【保护方式】机器码+注册码
【软件简介】宇阳“仓库管家3000”软件能为您做什么?“仓库管家3000”软件集物品的进仓、出仓和库存管理为一体,主要目的是帮助您处理仓库物品的进仓、出仓和库存数据,提高工作效率,让您能有更多的时间和精力处理其它工作。您只需将每天的进货和出仓等单据数据录入电脑,"仓库管家3000"软件便会帮您处理这些数据,包括自动增减库存,自动分类统计,统计任一时间的进仓、出仓等汇总数据,物品库存数据一目了然。另外,她还能帮您按生产的用途批号统计物料成本,还能记录不同供应商、不同货品的采购价格,还有库存不足和库存积压的提示等等功能,更多的功能和用途您可在应用中慢慢体会。如果您觉得手工管理仓库的数据实在太辛苦了,请试用一下“仓库管家3000”软件,相信她一定能使您满意!

【破解声明】偶是只菜鸟,只是感兴趣。互相学习,请各位大侠赐教!
------------------------------------------------------------------------
【破解过程】
用PEID查得Microsoft Visual C++ 5.0 [Overlay] 查安装目录下有很多.pbd后缀的文件,程序应是PB写的了。
用PBkiller 打开与主程序同名的.pbd文件,在侧边目录内很容易找到gf_check_zc\functions\gf_check_zc () returns boolean这一项下面是PBkiller分析的代码,算法简单:

decimal ll_serialnumber
string ls_serialnumber_id_str
string ls_serialnumber_str_mid
string ls_jcm
string ls_1
string ls_2
string ls_3
string ls_zcm


ls_jcm = gf_return_jcm(gf_get_serialnumber())
ls_serialnumber_id_str = left(ls_jcm,len(ls_jcm) - 1)   <-------取去掉机器码最后一位值 设为A
ls_serialnumber_str_mid = right(ls_jcm,1)               <-------取机器码最后一位 设为B
ll_serialnumber = dec(ls_serialnumber_id_str)

choose case ls_serialnumber_str_mid          <-------根据B的值做以下不同的计算
        case "0"
                ls_1 = mid(string(ll_serialnumber * 31),1,5)             <--取A*31(此值因B不同,给定不同值)结果的前5位
                ls_2 = mid(reverse(string(ll_serialnumber * 37)),1,5) <--取A*37(此值因B不同,给定不同值)结果倒序后的前5位
                ls_3 = right(string(ll_serialnumber * 2),5)                <--取A*2(此值因B不同,给定不同值)结果的后5位
        case "1"                                             
                ls_1 = mid(string(ll_serialnumber * 11),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 51)),1,5)
                ls_3 = right(string(ll_serialnumber * 2),5)
        case "2"
                ls_1 = mid(string(ll_serialnumber * 17),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 29)),1,5)
                ls_3 = right(string(ll_serialnumber * 43),5)
        case "3"
                ls_1 = mid(string(ll_serialnumber * 47),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 5)),1,5)
                ls_3 = right(string(ll_serialnumber * 47),5)
        case "4"
                ls_1 = mid(string(ll_serialnumber * 3),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 13)),1,5)
                ls_3 = right(string(ll_serialnumber * 51),5)
        case "5"
                ls_1 = mid(string(ll_serialnumber * 31),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 23)),1,5)
                ls_3 = right(string(ll_serialnumber * 29),5)
        case "6"
                ls_1 = mid(string(ll_serialnumber * 41),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 11)),1,5)
                ls_3 = right(string(ll_serialnumber * 37),5)
        case "7"
                ls_1 = mid(string(ll_serialnumber * 37),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 19)),1,5)
                ls_3 = right(string(ll_serialnumber * 2),5)
        case "8"
                ls_1 = mid(string(ll_serialnumber * 31),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 19)),1,5)
                ls_3 = right(string(ll_serialnumber * 37),5)
        case "9"
                ls_1 = mid(string(ll_serialnumber * 11),1,5)
                ls_2 = mid(reverse(string(ll_serialnumber * 7)),1,5)
                ls_3 = right(string(ll_serialnumber * 47),5)
end choose         
                            以下是读取yyjxc.ini内的注册信息,并进行验证

ls_zcm = profilestring("yyjxc.ini","yyzcm","zcm","")

if ((((ls_zcm = "") or (ls_1 = "")) or (ls_2 = "")) or (ls_3 = "")) then
        return false
else

        if mid(ls_zcm,1,5) = ls_1 and mid(ls_zcm,6,5) = ls_2 and mid(ls_zcm,11,5) = ls_3 then
                return true
        else
                return false
        end if

end if


------------------------------------------------------------------------
【破解总结】
B取不同的值对应算法过程都一致,只是参与计算的"数值"不同,具体看代码中
ls_1 取A乘以"数值"结果的前5位
ls_2 取A乘以"数值"结果倒序后的前5位
ls_3 取A乘以"数值"结果的后5位

注册码保存在安装目录下yyjxc.ini文件中。
此PB程序算法简单,很适合我一样的初学者。
------------------------------------------------------------------------

[ 本帖最后由 西岭秋风 于 2007-3-7 08:00 编辑 ]
PYG19周年生日快乐!
  • TA的每日心情

    2016-6-2 20:34
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2007-3-7 08:13:56 | 显示全部楼层
    PB的要好好学习!支持!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-23 08:26:05 | 显示全部楼层
    支持,多谢了。/:good /:good
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    前天 08:10
  • 签到天数: 1383 天

    [LV.10]以坛为家III

    发表于 2008-10-14 16:49:02 | 显示全部楼层
    楼主说的既是,学习了!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-14 18:45:17 | 显示全部楼层
    看到PB的就头疼/:L
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2021-10-11 20:54
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-4-4 11:17:14 | 显示全部楼层
    对初学者这样的,我还是有些难了,最近在研究PB,所以查查点资料
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    昨天 08:32
  • 签到天数: 860 天

    [LV.10]以坛为家III

    发表于 2015-4-9 11:12:06 | 显示全部楼层
    PB的程序不太好搞啊
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2017-6-1 20:17
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2016-7-6 20:18:27 | 显示全部楼层
    路过必顶,谢谢分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表