前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PBKILLER的搜索

PowerBuilder程序暴力破解实例(PBD文件编辑法) - aini200577的日志 - 网易博客 网易 新闻 微博 邮箱 相册 阅读 有道 摄影 爱拍 优惠券 云笔记 闪电邮 手机邮 印像派 网易识字 更多 博客 手机博客 博客搬家 博客VIP服务 LiveWriter写博 word写博 邮件写博 短信写博 群博客 博客油菜地 博客话题 博客热点 博客圈子 找朋友 发现 小组 风格 手机博客 网易真人搭配社区iStyle 下载最文艺的手机博客APP> 下载最文艺的手机博客APP> 下载最文艺的手机博客APP> 创建博客 登录 加关注 显示下一条 | 关闭 温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》 | 关闭 Powerbuild PB视频 PB文章 没什么好说的 努力总是没错的!! 导航 首页 日志 相册 音乐 收藏 博友 关于我 日志 PowerBuilder程序暴力破解实例(PBD文件编辑法) 2009-12-09 23:21:45| 分类: PowerBuilder | 标签: |举报 |字号大中小 订阅 [工具]:PBKILLER,UltraEdit[破解对象]:直销业绩管理系统V5.0 PowerBuilder的伪码编译同VB伪码编译一样,同样是PB动态库解释伪码执行,伪码放在以PBD为后缀的文件中。对付它的利器就是PBKILLER,利用它几乎可以反编译出和源代码相同的语句,连我这个没学PB的人也看得很清楚。直销业绩管理系统V5.0有30天的试用期,过期就不能运行。用PBKILLER反编译dot.pbd后找到其注册代码(w_wrcode-controls-cb_1-events-clicked):string ls_codeinteger li_rnls_code = trim(parent.em_1.text) + trim(parent.em_2.text) + trim(parent.em_3.text) + trim(parent.em_4.text)if len(ls_code) <> 16 then messagebox("提示","注册码长度必须16位")end ifli_rn = f_checkregcode(ls_code)if li_rn = 0 then f_setreg("9",f_encode(ls_code)) f_setreg("3",f_encode("89")) messagebox("提示","注册成功,请重新进入系统!") halt closeelse messagebox("提示","注册码错误!")end ifreturn代码很好懂,属重启校验型,注册算法是f_checkregcode函数。这里就不贴出代码了,其基本思路是先取C盘的8位序列号,再对注册码进行算法转换得到8位字符串与前面所取得的序列号进行比较。由于不是明码比较,注册算法中的16位到8位的转换要找出其逆算法也不容易。因此我就考虑暴破的方法,即修改PBD文件,但网上这方面的资料很少,只能自己摸索了。首先找到其重启校验代码(dotnew-Events-open):rt_chk_value = myreg.f_check_reg()if rt_chk_value = -100 then messagebox("提示","系统时间有误!") halt closeend ifif rt_chk_value = -200 then messagebox("提示","注册码有误!") halt closeend ifif rt_chk_value = -300 then messagebox("提示","试用期到,请注册!电话:xxxx网址:xxxxx") open(w_wrcode) returnend ifif rt_chk_value = -400 then messagebox("提示","系统破坏,请联系开发商!") returnend if 来至f_check_reg:ls_right = f_encode(f_redreg("0"))ls_wrong = f_encode(f_redreg("1"))if ls_right <> "wright" or ls_wrong <> "wrong" then return -400end ifls_regflag = f_redreg("3")....后面还有就不贴了。其中的f_encode(f_redreg(""))可根据不同的参数在注册表的不同项中读取出加密过的字符串并进行解密,之后进行校验,返回值为-100、-200、-300、-400其中一个的话程序就会报错退出。 至此,程序加密部分算法基本分析完毕,现在就要找出暴破点。我选择的是f_check_reg,即想办法让其所有返回值都为100(经分析,返回100表明是注册版)。难就难在PBKILLER虽然能反编译出源代码,却不能编辑它。注意到其中的-100、-200等数字,转换为十六制后就是FF9C、FF38,考虑到存储时的高低位互换特性,因此实际存储的十六进制代码应为9CFFFFFF、38FFFFFF(PB中是这样的,花费了我好一会时间才摸索出规律),OK,用UltraEdit打开PBD文件,搜索十六进制9CFFFFFF,结果会有很多,注意到地f_check_reg中有代码段: if check_result = 0 then return 200 else return -200 end if说明200和-200相离很近,因此选择搜索-200的十六进制表示(搜索200也可以),并且每搜索到一个就向上看,找找附近有没有C800(200的十六进制表示),这样用不了多久就能确定其位置了,在其附近还能找到100、-300、-400等的十六进制表示,用UltraEdit将找到的-100、-200、-300、-400十六进制表示全部改为100的十六进制表示。存盘退出,将系统时间延后两个月,程序正常运行。 小结:PBD文件经过反编译后能看到其源代码,结合汇编知识,理论上应该能利用UltraEdit找出每一句代码及数据对应的地址并进行修改。但确实比较繁琐,其实PBKILLER自带了一个PBL阅读器,能比较好的区分PBD的相应函数、窗口代码段,再在其中利用本文介绍的方法应该能更快的确定要修改的代码段。可惜的是我水平实在有限,也没那么时间去研究PB伪代码中跳转、判断的对应十六进制代码及其修改方法,希望有高手能总结出来。好累,到此为止了。  免费下载380套商业源码企业ERP源码、医院HIS源码、酒店餐饮源码、超市POS源码、进销存源码、药店连锁源码、学生学校源码、人力资源源码、财务管理源码、图书管理系统、考勤工资源码、邮件发送源码、档案管理源码、华软大型商业源码下载、物业管理源码、视频监空源码、企业管理源码、销售系统源码、设备维修源码、美容管理源码、网吧管理源码、物流管理源码、连锁店铺源码、通讯录源码、生产管理源码、汽车行业源码、客户管理源码、仓库管理源码、固定资产管理源码、租售系统源码、OA办公源码、聊天软件源码、商务系统源码、售后客服源码、培训考试源码、彩票抽奖源码、政府机构源码、VOD点歌系统等 评论这张 转发至微博 转发至微博 阅读(1098)| 评论(1) | 分享到: 喜欢 推荐 0人 | 转载 历史上的今天 最近读者 热度 评论 this.p={ m:2, b:2, id:'fks_083064082084084065085087094095081095083074080094087067', blogTitle:'PowerBuilder程序暴力破解实例(PBD文件编辑法)', blogAbstract:'[工具]:PBKILLER,UltraEdit[破解对象]:直销业绩管理系统V5.0 PowerBuilder的伪码编译同VB伪码编译一样,同样是PB动态库解释伪码执行,伪码放在以PBD为后缀的文件中。对付它的利器就是PBKILLER,利用它几乎可以反编译出和源代码相同的语句,连我这个没学PB的人也看得很清楚。直销业绩管理系统V5.0有30天的试用期,过期就不能运行。用PBKILLER反编译dot.pbd后找到其注册代码(w_wrcode-controls-cb_1-events-clicked):string ls_codeinteger li_rnls_code = trim(parent.em_1.text) + trim(parent.em_2.text) + trim(parent.em_3.text) + trim(parent.em_4.text)', blogTag:'', blogUrl:'blog/static/59294810200911911214534', isPublished:1, istop:false, type:0, modifyTime:1316951157894, publishTime:1260372105034, permalink:'blog/static/59294810200911911214534', commentCount:1, mainCommentCount:1, recommendCount:0, bsrk:-100, publisherId:0, recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[], vote:{}, groupInfo:{}, friendstatus:'none', followstatus:'unFollow', pubSucc:'', visitorProvince:'', visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000', mcon:'', srk:-100, remindgoodnightblog:false, isBlackVisitor:false, isShowYodaoAd:false, hostIntro:'', hmcon:'', selfRecomBlogCount:'0', lofter_single:'' } {list a as x} {if !!x} {if x.visitorName==visitor.userName} {else} {/if} {if x.moveFrom=='wap'} {elseif x.moveFrom=='iphone'} {elseif x.moveFrom=='android'} {elseif x.moveFrom=='mobile'} {/if} ${fn(x.visitorNickname,8)|escape} {/if} {/list} {if !!a} ${fn(a.nickname,8)|escape} ${a.selfIntro|escape}{if great260}${suplement}{/if} {/if} {list a as x} {if !!x} ${fn(x.title,26)|escape} {/if} {/list} 推荐过这篇日志的人: {list a as x} {if !!x} ${fn(x.recommenderNickname,6)|escape} {/if} {/list} {if !!b&&b.length>0} 他们还推荐了: {list b as y} {if !!y} &#183;${y.recommendBlogTitle|escape} {/if} {/list} {/if} 转载记录: {list d as x} &#183; ${x.referBlogTitle|escape} ${x.referUserName|escape} {/list} {list a as x} {if !!x} ${x.title|default:""|escape} {/if} {/list} {list a as x} {if !!x} ${x.title|default:""|escape} {/if} {/list} {list a as x} {if !!x} ${x.blogTile|default:""|escape} {/if} {/list} {list a as x} {if x_index>4}{break}{/if} {if !!x} ${fn1(x.title,60)|escape}${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')} {/if} {/list} {list a as x} {if !!x} ${fn(x.title,26)|escape} {/if} {/list} {if !!(blogDetail.preBlogPermalink)} ${blogDetail.preBlogTitle|escape} {/if} {if !!(blogDetail.nextBlogPermalink)} ${blogDetail.nextBlogTitle|escape} {/if} {list a as x} {if !!x} {if x.publisherUsername==visitor.userName} {else} {/if} ${fn(x.publisherNickname,8)|escape} {/if} {/list} 被推荐日志 最新日志 该作者的其他文章 博主推荐 随机阅读 首页推荐 更多>> {list a as x} {if !!x} ${x.nickName|escape} 投票给 {var first_option = true;} {list x.voteDetailList as voteToOption} {if voteToOption==1} {if first_option==false},{/if} “${b[voteToOption_index]}” {/if} {/list} {if (x.role!="-1") },“我是${c[x.role]}” {/if} ${fn1(x.voteTime)} {if x.userName==''}{/if} {/if} {/list} 页脚 公司简介 - 联系方法 - 招聘信息 - 客户服务 - 隐私政策 - 博客风格 - 手机博客 - VIP博客 - 订阅此博客 网易公司版权所有 &copy;1997-2014 帮助 ${u} {list wl as x} ${x.g} {list x.l as y} ${y.n} {/list} {/list} {if defined('wl')} {list wl as x}${x.n}{/list} {/if}