乐易论坛-乐易网易语言培训教程火山PC视窗中文编程交流论坛

 找回密码
 立即注册

手机号登录

用手机号号登陆

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

办理VIP,定制软件,报名培训联系QQ请牢记揰掵佲的QQ号1615457736 1615457734 其他都是骗子易语言0基础入门课程
易语言汇编快速入门课程《64位某信Hook技术实战基础教程》【投稿课程】百日Js加密分析实战课程(无密下载)
【强烈推荐】《火山视窗0基础入门系列课程》《64位某信Hook技术实战进阶教程》【投稿课程】《0基础x64位游戏内存辅助开发教程 》
《火山视窗POST基础入门课程》《64位某信数据库操作课程》【投稿课程】广告位招租联系QQ1615457736
查看: 7189|回复: 7

[图文教程] 某PB进销存暴力解除试用次数限制 一把辛酸泪~~~~~~

[复制链接]

[图文教程] 某PB进销存暴力解除试用次数限制 一把辛酸泪~~~~~~

[复制链接]
已绑定手机
已实名认证
揰掵佲
等级头衔

等級:乐易运营组

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分成就
易币
贡献
主题
精华
金钱
积分
24325
注册时间
2014-8-2
最后登录
1970-1-1

勋章墙

2014-11-22 08:59:18 | 显示全部楼层 |阅读模式
【软件名称】某进销存软件
【软件语言】powerbuilder
【所用工具】peid、OD、shudepb、powerbuilder 11.5、winhex、bcompare、SQL Server Management Studio
破解方式】暴力解除试用次数限制

那天,妹子跟我说,她在找一个进销存软件,经过几翻对比,最终决定用某知名品牌。
试用之后,妹子觉得还不错,客服告知只能用20次,如需要购买正版,需要几K软妹币。
在确定试用版和正式版没有功能差异之后,我就开始动手了。

由于妹子得到了客服不少帮助,就不透露软件名字了,看完之后猜到的,按我的过程来破解也只需要2分钟。(真的只有2分钟!!)

拿到软件后,首先尝试了开关20次,看看软件提示啥,如图

然后我才去看了下是什么语言写的。VC++7.0 ,很好,我真的天真地以为是C++写的!!!

OD,字符串,啥也没有。真的是什么也没有啊~~~

既然没办法通过字符串资源来下断点,也只能通过弹窗来了,SO EASY,bp MessageBoxA,bp MessageBoxW,bp MessageBoxExA,bp MessageBoxExW 全下了。

没想到我又跪了。如图:

这是神马啊,这么难看的堆栈让我怎么面对。一直在pbvm115.dll里面打转,根本出不来啊,关键跳转去哪了?比较20次的又去哪了?

然后我花了一天的时间,进入了一个新的世界! ----- PowerBuilder!!!

有没有被亮瞎,在网上找了好久好久好久,反编译PB的资料非常少,基本都是用 pbkiller shudepb PBDeCompiler 这三个工具。其中pbkiller对于PB10以上的版本编译出来的完全无效,而后面两个坑爹的都是收费的,网上流传的只有demo版本,而demo版本都有反编译出的代码行数限制。貌似核心的代码都看不到。我也没太多时间去一个个看了,只能换个思路先临时解决下20次的问题。

软件试用次数限制,那么使用次数一定是藏在某个地方,文件或者注册表。发现把数据库还原之后又可以继续使用了,看来使用次数在数据库当中。

通过对比使用前后的数据库,最后确定有两个字段发生了变化。sys_yh 中存储了使用次数,pbcatvcs中存储了一个MD5的值。如图:

如果只修改使用次数,就会提示数据库文件已损坏。必须两个一起修改才行。
在cmd5上查询结果:
已查到,这是一条付费记录,密文类型:md5(md5(md5($pass)))。请点击购买

哥灵机一动,难道pass就是使用次数? 果然是!
密文就是把使用次数 第一次加密后,结果转换成小写,对结果再加密一次,结果转换成小写,对结果再加密一次,再转换成小写…………

修改数据库中的字段之后,就可以继续使用了。现在写个小程序修改下字段就好了,又花费了2天。因为我脑子有问题居然用PB来写,中间遇到的问题多到 数据库怎么连接、函数怎么添加、全局变量在哪定义、是否需要datawindow………  直到写完才发现我要是用C#早就写完了。

程序运行如图:


赶紧扔给妹子,现在就不急了,我可以慢慢研究怎么破解它了,破解之路才刚刚开始。

重新打开shudepb和PBDeCompiler,对比之后发现还是shudepb更有良心,显示的代码要多一些。仔细排查之后(后来才发现有全局搜索的功能)找到了比较20次的关键代码,如下:
[Visual Basic]

  1. [/font]
  2. CHOOSE CASE gi_money //0
  3.     CASE 0 //0
  4.         runtimes = 20           //14     /*此处通过全局变量控制试用次数为20次 */
  5.     CASE 1 //0
  6.         runtimes = 5000         //88 13
  7.     CASE 2 //0
  8.         runtimes = 200          //c8
  9.     CASE ELSE //0
  10.         runtimes = 20           //14
  11. END CHOOSE //0
  12. SELECT Top 1 gz , yh_no INTO :li_gz, :ls_no From sys_yh  USING sqlca;   /*从数据库表sys_yh中读取软件使用次数 */
  13. IF sqlca.sqlcode <> 0 THEN //10
  14.     gs_errtext = sqlca.sqlerrtext
  15.     ROLLBACK USING sqlca;
  16.     messagebox("SQL ERROR",gs_errtext)
  17.     RETURN -1
  18. END IF //10
  19. SELECT cs1 INTO :ls_cs From pbcatvcs  USING sqlca;       /*从数据库表pbcatvcs中读取使用次数的密文 */
  20. IF sqlca.sqlcode <> 0 THEN //16
  21.     gs_errtext = sqlca.sqlerrtext
  22.     ROLLBACK USING sqlca;
  23.     messagebox("SQL ERROR",gs_errtext)
  24.     RETURN -1
  25. END IF //16
  26. ls_zcs = string(li_gz)           
  27. ls_mm5 = encrypt(ls_zcs)                     /*对使用次数进行加密*/
  28. IF (ls_cs <> ls_mm5 OR li_gz < 0) THEN //23
  29.     messagebox("提示","数据库文件已损坏,请联系开发公司修复.电话:*********")
  30.     HALT CLOSE
  31.     RETURN -1
  32. ELSE //23
  33.     IF runtimes < li_gz THEN //28                  /*如果使用次数大于最大试用次数,弹出对话框并且退出程序*/
  34.         messagebox("升级提示","您使用的软件需要升级后才能继续使用,请与开发公司联系!  电话:**********")
  35.         HALT CLOSE
  36.         RETURN 0
  37.     ELSEIF (runtimes - li_gz) < 5 THEN //28
  38.     END IF //28
  39.     li_gz ++
  40.     ls_zcs = string(li_gz)
  41.     ls_mm5 = encrypt(ls_zcs)           /*使用次数自加后,重新加密并写入数据库*/
  42.     update sys_yh Set gz =:li_gz Where yh_no =:ls_no  USING sqlca;   
  43.     IF sqlca.sqlcode <> 0 THEN //37
  44.         gs_errtext = sqlca.sqlerrtext
  45.         ROLLBACK USING sqlca;
  46.         messagebox("SQL ERROR",gs_errtext)
  47.         RETURN -1
  48.     END IF //37
复制代码
(在帖子里面添加代码没有PB的类别,就选了个类似的)
了解了代码之后,就确定了破解的方向了,在我的想象中,有一双滑板鞋,哦,不好意思,在我的想象中,只要把开始的 runtimes赋值为0,后面的关键比较改为        IF runtimes > li_gz THEN  ,就可以无限制地使用这个软件了。

现在的问题转化为如何在4M的代码中找到这部分的代码?????

我又查阅了无数的资料后,终于想出了一个死办法。既然这是解释性的语言,那我自己写个程序,把这个函数放进来,再加个标记不就知道这段代码长什么样子啦。
于是,我编(chao)写(xi)了人生当中第二个PB的程序,第一个可真的是我自己写的!

先编译一次生成二进制,再修改了如上图的地方,再编译一次。(为什么我要赋值为43981呢? 因为43981 = 0xABCD,方便我去找关键的代码,事实证明我的决策是英明的,因为这个二货的PB即使是完全一样的代码,连续编译两次也是多处不一样)

再用bcompare把N多个不同处一个个过了一遍,找到了关键地方,如图:


我加的ABCD到这里变成了 CDAB,不知为什么PB的二进制是把高位存在高地址的?不过也没有关系了,顺着这个标记,也找到了上面runtimes赋值的几个关键值。 0x14=20  0x1388=5000(不是8813 是1388) 0xC8=200 0x14=20
好了,现在再用winhex打开原程序,搜索这个8813,有很多个,但是只有一个地方附近的代码是和我的这个小程序长的一样的,找到了之前,把前面的那个14 改成了 0 。如下图

到这个时间,破解已经完成了一半了,第二步就是把那个< 改成 >。可是这个更难。
因为两个问题:
1、数字还好说,都是十六进制,可是这个符号编译过来之后是什么东西,我不知道啊。
2、就算我知道符号是什么二进制,在哪修改又是个问题啊
没关系,继续上大招,自己写一个,再对比(旁白:这么傻的招数真的好意思叫大招?!!)

把之前的工程文件再修改下,使它和反编译出来的那个关键代码完全一样
再编译,再对比。 得出了两个结论
1、 = 是 a8 ,<> 是 b8 ,> 是 C8,< 是 d4
2、在我的测试程序中,那个<号的地址是8120,那个代表5000的8813的地址是7f10 两者相差 0x210,如果没有意外的话,在我的想象中,进销存软件中,代表5000的8813的地址是b7394,加上0x210=B75A4就应该是我要修改的关键判断的代码,按下图进行修改。(不知道为什么这个小于号是D2,好像不同的电脑都会有些区别)


修改完成之后,修改数据库中使用次数为100次,再次打开软件,正常运行
再用shudepb反汇编一下,请看对比图:



成功!

总结:
爆破这个程序只需要用winhex修改如下两个地方
B736A处修改14为00
B75A4处修改D2为C8
就可以无限制使用了。(现在知道为什么我说破解这个只需要2分钟了吧)

程序和破解后的程序我也不提供了,毕竟也不是什么大众的软件,真猜到了就自己破解吧,反正也就两分钟
本文主要是提供思路,以及有以下问题请大神解答:

究竟怎么才能对PB的程序进行动态调试?
真的找不到资料,万一下次用shudepb看不到任何关键代码,我就歇菜了

后续:
后来想修改下程序的标题。发现标题原来是加密后存在config.ini中。
程序每次启动时都从这个中读取密文,解密之后再与程序中内置的几个名称进行匹配,不匹配也是直接退出。
所以要修改的话,需要修改config.ini和程序中的字符串资源
程序中的字符串之所以各种软件都读不到是因为,它在把字符串转为ASCII之后,又转了字节序,如:
吾爱破解  对应的ASCII码是  
54 3e 72 31 78 34 89 e3
程序中是
3d 54 31 72 34 78 e3 89
根据此办法,以后修改PB的字符串终于可以实现了。
最好有个大神写个工具,针对PB程序搜索字符串。。。。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

325019289
等级头衔

等級:程序制作者

Rank: 6Rank: 6

积分成就
易币
贡献
主题
精华
金钱
积分
4236
注册时间
2014-11-11
最后登录
1970-1-1

勋章墙

2014-11-22 10:42:52 | 显示全部楼层
这个软件界面是啥样子
回复

使用道具 举报

Tyla
等级头衔

等級:编程起步

Rank: 5Rank: 5

积分成就
易币
贡献
主题
精华
金钱
积分
890
注册时间
2014-8-26
最后登录
1970-1-1

勋章墙

2014-11-22 13:20:29 | 显示全部楼层
这么好的资源,无条件抱走。
回复

使用道具 举报

已绑定手机
已实名认证
小飞
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
1219
注册时间
2014-8-11
最后登录
1970-1-1

勋章墙

2014-11-22 15:10:26 | 显示全部楼层
貌似好犀利。。。有时间看看,谢谢啦
回复

使用道具 举报

已绑定手机
安。
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
420
注册时间
2014-10-29
最后登录
1970-1-1

勋章墙

2014-11-22 21:49:37 | 显示全部楼层
赞一个。
回复

使用道具 举报

2991239158
等级头衔

等級:编程起步

Rank: 5Rank: 5

积分成就
易币
贡献
主题
精华
金钱
积分
1661
注册时间
2014-10-18
最后登录
1970-1-1

勋章墙

2014-11-22 22:11:38 | 显示全部楼层
这个很棒,真的很不错……
回复

使用道具 举报

已绑定手机
帝释天
等级头衔

等級:编程起步

Rank: 5Rank: 5

积分成就
易币
贡献
主题
精华
金钱
积分
508
注册时间
2014-10-25
最后登录
1970-1-1

勋章墙

2014-11-23 09:26:23 | 显示全部楼层
优秀文章!神马都是浮云,支持!
回复

使用道具 举报

携寒
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
416
注册时间
2014-11-10
最后登录
1970-1-1

勋章墙

2014-11-24 11:24:27 | 显示全部楼层
来看看楼主,天天好心情
(*^__^*)
回复

使用道具 举报

如果懒得打字,请选择右侧内容快捷回复 提醒:以任何方式进行『恶意灌水』的行为,进行封号处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

热点推荐上一条 /5 下一条

QQ|网站地图|手机版|小黑屋|乐易论坛-乐易网 | 湘ICP备19007035号

拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表乐易立场!

娄底市乐易网络科技有限公司声明:乐易原创培训课程版权均为我公司所有,未经许可,不得擅自翻录,盗版,破解本站课课程,我们将保留法律诉讼的权利

GMT+8, 2025-7-8 05:24 , Processed in 0.058647 second(s), 61 queries .

Powered by Discuz! X3.4

Copyright © Tencent Cloud.

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