本文转载自: http://www.cnblogs.com/athrun/archive/2008/07/10/1239906.html 作者:Athrun 转载请注明该声明。

go google search more...
[工具]: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_code
integer li_rn
ls_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 if
li_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 close
else
 messagebox("提示","注册码错误!")
end if
return
代码很好懂,属重启校验型,注册算法是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 close
end if
if rt_chk_value = -200 then
 messagebox("提示","注册码有误!")
 halt close
end if
if rt_chk_value = -300 then
 messagebox("提示","试用期到,请注册!电话:xxxx网址:xxxxx")
 open(w_wrcode)
 return
end if
if rt_chk_value = -400 then
 messagebox("提示","系统破坏,请联系开发商!")
 return
end 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 -400
end if
ls_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伪代码中跳转、判断的对应十六进制代码及其修改方法,希望有高手能总结出来。好累,到此为止了。

PowerBuilder程序暴力破解实例(PBD文件编辑法)相关推荐

  1. Python攻防-暴力破解ZIP加密文件的密码

    文章目录 前言 Python语法 自定义迭代器 Python多线程 Python脚本 单线程数字爆破 单线程字符爆破 多线程字典爆破 总结 前言 本文继续记录学习下 Python 的有趣应用:借助 P ...

  2. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(3)暴力破解目录与文件位置

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(3)暴力破解目录与文件位置 文章目录 黑帽python第二版(Black Hat P ...

  3. Web漏洞挖掘(一)登录认证模块的暴力破解实例

    Web漏洞挖掘(一)登录认证模块的暴力破解实例 暴力破解的定义 暴力破解的分类 暴力破解的威胁 涉及的基础知识模块 相关硬件(高速GPU推荐) 基于Burp Suite的暴力破解实例 暴力破解的定义 ...

  4. python 暴力破解 excel加密文件

    python 暴力破解 excel加密文件 'wordlist.txt' 为待测试的密码列表 fdd ddd eeee 5e5e5 58d85d5e d2d4d5d 4d4d4d3 dfdf,d; l ...

  5. 前女友闺蜜给我发了一个压缩包,居然还带密码?暴力破解ZIP加密文件的密码!

    前言 今晚下班后微信收到一跳消息!是前女友的闺蜜发过来的,然后让我自己去猜密码,本来我是不打算理她的!但是她后面说里面有你想不到的福利!这句话对于一枚(lsp)不对一枚宅男程序员没有抵抗力,毕竟我对她 ...

  6. python暴力破解zip加密文件

    目录 前言: 一.破解zip加密文件的思路: 1.准备一个加密的zip文件. 2.zipfile模块可以解压zip文件. 3.itertools.permutations实现全字符的全排列. 二.实操 ...

  7. dropbox文件_Dropbox即将发布的扩展程序更新将添加更多文件编辑支持,包括Pixlr照片...

    dropbox文件 Dropbox is perhaps the best-known cloud storage platform for consumers, but it's hoping to ...

  8. 10. OD-VC程序暴力破解

    查找字符串:unregistered 找到关键位置处后,发现je跳转改为nop并没什么作用 关键在于al值为0,所有未注册 al值为 esp+4中的值获得 esp+4又是两处地址调用得到,如上图 右键 ...

  9. 11. OD-Delphi程序暴力破解

    查找关键字符串:Registration 可以看到没有任何函数跳转到此行验证成功的代码 最上面是retn返回上层函数 下面两个jmp跳转到了别处 jnz也是跳转到了别的地址 尝试jnz改为nop也没有 ...

最新文章

  1. python中使用squarify包可视化treemap图:treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比、自定义设置每一个数据格的颜色
  2. c语言作业请输入一个运算符,C语言书面作业1(有答案版)..doc
  3. 《支付宝的高可用与容灾架构演进》读后感
  4. HDU2096 小明A+B【水题】
  5. Underfull hbox (badness 10000) in paragraph at lines 83--86
  6. DSDT/SSDT综合教程
  7. 基于SpringBoot的宠物医院管理系统
  8. PCI-E x1/x4/x8/x16四种插槽区别是什么?具体有什么作用?
  9. echarts数字云
  10. C++——球的表面积和体积
  11. 苹果+android+扫码支付,苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径...
  12. Docker(容器) 部署安装
  13. SSM 高校心理测评系统
  14. 云南鲁甸县附近发生6.5级地震 震源深度12千米
  15. 什么游戏蓝牙耳机好?专业电竞玩家教你如何选择
  16. PB DES、3DES加密解密(简单便捷)
  17. iOS 开发设计常用软件及工具整理
  18. 怎么修改sqlserver用户密码_TP-Link路由器怎么修改登陆密码 TP-Link路由器修改登陆密码方法【详解】...
  19. 介绍几种最常见的加密和解密方法
  20. 单片机学习日志—电子秒表的设计(2018.07.19)

热门文章

  1. 远程电脑失败显示“CredSSP 加密数据库修正”
  2. H5网页扫码聚合支付——支付宝
  3. C++最佳实践 | 1. 工具
  4. mysql日期减后取月_MySql日期相减返回月数_MySQL
  5. 有趣的闲话:2019年总结
  6. Android Banner(无限轮播图)控件的简单使用(网络数据OkHttp3)
  7. Excel 统计符合条件不重复的个数
  8. 云计算和网格计算差别何在
  9. 5883. 判断单词是否能放入填字游戏内
  10. 计算机与高中数学的整合,信息技术与高中数学的整合