该进销存软件,为10年前发布的,发布者给用户的license,里面的过期时间是2022年1月1日过期,登录进入系统之后,就会弹窗,提示即将过期(在2022年1月1日前,客户就反馈过来,存在即将过期的问题),点击确认或取消按钮,程序就会退出。

首先,安装该软件,该软件对应的有数据库文件,是MS SQL Server数据库 ,安装的版本是SQL Server 2000,还需要安装SP4的补丁程序(后面发现该补丁程序不安装,根本连不上,坑)

根据客户提供的数据库备份文件,恢复数据库,在数据库中可以看到,有保存license信息

深入分析该软件,发现该软件是PowerBuilder9编写的,安装目录中有几个dll文件,还有PowerBuilder的虚拟机dll文件——pbvm90.dll文件。

网上搜索PowerBuilder的pbd文件的反编译工具,其中 Shudepb PB反编译专家 收费,不付费长段的代码只能看到前面几行的。PB DeCompiler.exe也不行,同样的有限制。最终找到个比较好用的无限制的——PBKiller.exe。

PowerBuilder的pbd文件,是PowerBuilder特有格式的文件,所以必须用反编译pbd文件的专用软件才能打开,打开后发现里面也有一些是PowerBuilder的pascal语言的文本格式的代码。若在pbd文件中有license解析校验的,那么PBKiller.exe不能更改保存pbd文件,只能查看,可以用二进制编辑软件,打开,找到对应的字符文件的二进制存储位置,修改即可。

最终发现,修改pbd文件的方法行不通,至少主界面登录完成,提示过期的弹窗,不是在这些pbd文件中。使用olldbg打断点(ShowWindow上),发现是调用的htsoft模块,安装目录下就有htsoft.dll这个文件。

并且,从pbd文件中的代码中看到,通过修改系统时间,绕过过期时间的检查,不太可行。因为代码会校验单据流水号的生成的最新时间,若系统登录的时间,比流水号生成的时间早,则直接报异常退出。虽然也可以更改数据库的流水号生成时间,但是改了系统时间,会造成录入的单据时间都是错的,这样也让这个系统,业务侧没法使用。

我自己本地分析,是通过更改了系统时间,到2009年1月1日之前,暂时可实现程序登录后不退出。

通过比较长的时间,一个个查看了这些pbd文件,还好这些文件可以看到是跟进销存系统的前端模块,进行划分的。里面找到了用户自行在软件界面,输入license进行校验,并保存到数据库的代码。

最终分析,用户输入license注册,进行license校验时,调用的是htinit.dll这个文件。

把htinit.dll这个文件,拖进IDA,发现这个dll只有一个GetLicenseDate函数,从函数名称可以看出,这个是校验读取license中,还剩余多长时间过期的。

从用户机器上拿到的license,在我自己的机器上安装之后,数据库中由于已经保存了注册好的license信息,所以我本地不再需要操作注册。但是,本地的过期时间,提示是2009年1月1日过期,而不是2022年1月1日过期,所以猜测,该license中,应该还有机器名或者硬件码相关的信息,是针对特定机器的注册码,虽然用户名是ts.cxgxds,但是还需要绑定机器。

上图为软件的用户注册页面 

上图为注册界面,点击时间之后,连接服务器操作的代码。

上图为注册时,调用htinit.dll的GetLicenseDate函数,获取剩余过期天数的代码。

上图可以看到,htinit.dll只有 GetLicenseDate这一个导出函数。

用于htinit.dll只有 GetLicenseDate这一个函数,并且传入的参数,反编译后能推测出来,所以我自己用VC6.0写了一个,替换,直接返回一个较大的剩余过期天数,并且还实现了将传入的参数,保存到文本文件。后发现传入的参数是用户ID和可能经过处理的license,因为都是整数,记录下来的传入参数是变的,并且看不出来什么有用信息。

上图:拦截htinit.dll的GetLicenseDate方法,保存其传入参数

分析了GetLicenseDate的代码,发现这里面就包含了license的解密的算法相关的代码,但是具体的算法本人水平有限,并不能分析出来,网上也没找到相关资源。大致推测是des加密解密算法,不是非对称加密。

所以这一条路暂且放下了,因为这里仅仅是注册时license的校验。要最终达到破解的效果,让软件可用,去除那个主界面的过期提示,才能根本。

通过比较长时间的olldbg调试分析,发现过期的弹窗的提示,其代码在htsoft.dll文件中,并且在htsoft.dll文件中,看到了与htinit.dll的GetLicenseDate方法中,非常相似的license解密代码。到这里,离破解完成就不远了。

上图:找到了,对于license的过期判断,是否进行弹窗的关键逻辑判断位置,这个位置关键且唯一,那么改了这个地方,就能实现不再弹窗过期提示,也就达到了破解的效果。至于该软件的其余操作位置,是否也还有执行license校验的,目前经过全面的代码分析,应该是没有了,那么先改了这个

 上图:即把jnz short loc 10004286 改为jz hort loc 10004286

75是jnz指令的机器码,74是jn指令的机器码,用二进制编辑软件HexFrame把这里修改,另存未一份新的htsoft.dll替换原来的,进入系统。发现已没有过期的弹窗提示,进行一些模块的操作,也是正常的,将软件一直开着,也没出现过期的弹窗提示了。

软件:IDA、olldbg、pbkiller、HexFrame

遗憾:由于水平有限,对加解密算法的逆向没多少经验,并没有逆向出license的加密解密算法,得到license的生成算法。

教训:在自己的软件开发过程中,license的校验,不要弄唯一点,这样容易修改。

(78条消息) 记一次进销存软件的破解(补充)_liuyouzhang89的专栏-CSDN博客https://blog.csdn.net/liuyouzhang89/article/details/122914925

记一次进销存软件的破解相关推荐

  1. 进销存到底是什么意思?进销存软件有什么作用?

    ​做生意的人,肯定多多少少听说过"进销存"这个词,但这个词究竟是什么意思?进销存软件有什么作用?有必要用吗?却不是人人都知道. 今天小编就来给大家解答疑问,让各位老板一文弄懂进销存 ...

  2. 家居家纺行业的进销存软件怎么选择,门店管理系统选择

    在十几年前,中小商户绝大部分都是粗放式管理,手工记账.会员信息全本子记.采购销售也都是凭记忆,既浪费了时间,效率还低,而且很多成本不明确. 从2014年开始,信息时代快速发展,为了让广大的中小商户能够 ...

  3. 哪些进销存软件既好用又免费?

    中小企业刚起步都会面临着资金紧缺.人力资源不足等诸多管理问题,对于大部分预算不是很多的中小企业或者尚未尝试过进销存软件的企业,都会选择免费进销存软件来进行企业管理或体验进销存软件的功效. 进销存软件的 ...

  4. 在线进销存软件免费版,哪个可以用?

    免费进销存是企业选择进销存软件的首选.然而,免费购买.销售和库存管理软件并不能用几个广告词或说明来判断.企业在选择进销存软件时,要从自身需求出发,慎重选择! 在选择免费的进销存管理软件时,要多方面考虑 ...

  5. 商品管理 商品管理软件 用进销存软件做商品管理

    做生意的最不可少的软件就是进销存,告别手工记账,大大地提高运营效率. 如果光靠人工管理店铺,首先最基础的商品管理就很花时间. 商品管理是指一个零售商从分析顾客的需求入手,对商品组合.定价方法.促销活动 ...

  6. 进销存软件有哪些?进销存软件排名前10的有哪些?

    自己开店或开公司的老板,多多少少都听过进销存软件,进销存软件都有什么用?市面上比较好的进销存软件都有哪些,接下来就为大家详细解读一下. 进销存软件的含义 进销存软件从字面意思理解就是,进货.销售.库存 ...

  7. 2022年服装进销存软件排行榜重磅出炉!

    小编调研了一下身边做服装行业的老板,普遍反映如今服装实体店越来越难做了,日常经营过程中,难免会遇到各种问题:商品种类多.款式多.库存多.活动多--这些都让老板们应接不暇,尽管每天早出晚归地管理店铺,但 ...

  8. 财务软件与进销存软件,对于开发人员来说,哪一个开发比较容易

    不用我去说,大部分的开发人员都会觉得进销存软件容易开发,而集成财务软件很难开 发,好几年前,我也是这样认为集成财务软件很复杂的.       不过,现在看来,我觉得开发集成财务软件比进销存容易得多了. ...

  9. 财务软件、进销存软件、ERP中会计凭证录入模块DIY全攻略

    财务软件.进销存软件.ERP中会计凭证录入模块DIY全攻略(二) 一.需求分析   1.录入界面要求友好,直观便捷,提供多种录入途径并有容错设计:   2.凭证录入要符合现行会计制度的要求,制度规定的 ...

  10. 珠宝配饰行业的进销存软件有哪些好用的?

    市面上的服装进销存软件那么多?该如何选到适合自己的那款呢?最好的方法就是看看大家的选择. 大众的选择即是合适的,这是有道理的,顺便看看大家的评价来选择,就不会差了.小编整理了最受欢迎的十大进销存软件, ...

最新文章

  1. 字符设备之register_chrdev与register_chrdev_region
  2. linux支持表情的字体,让应用程序支持emoji字符
  3. 排序算法以及其java实现
  4. [DP/单调队列]BZOJ 2059 [Usaco2010 Nov]Buying Feed 购买饲料
  5. 【操作系统】Reboot
  6. CVPR 2021 Oral | Transformer!UP-DETR:无监督预训练检测器
  7. 扎克伯格让员工学会高效工作的26张PPT
  8. 【non-coding RNA】 非编码RNA有哪些?
  9. MySQL基础查询语句练习题
  10. amd超频软件LINUX,cpu超频软件amd
  11. 使用公众号快速申请小程序的流程
  12. mysql自旋锁_mysql 自旋锁
  13. 下载FLV资源的几种办法
  14. main函数的argc与arg
  15. Web性能压力测试工具-Webbench
  16. jstack 命令的使用和问题排查分析思路
  17. 人脸验证 DeepID 算法介绍及实战
  18. [转]北京ATM跨行取款学问多(2008年07月26日)
  19. 使用element ui + vue时出现vue.runtime.esm.js:1737 TypeError: Cannot read property ‘$options‘ of undefined
  20. 当心病毒!!安装autoCAD2007简体中文件版必看

热门文章

  1. c语言九九乘法表倒三角问题,c语言问题九九乘法表
  2. 离散数学左孝凌版答案
  3. java android实例_Android开发精典案例60个
  4. Python 机器学习经典实例
  5. unity mysql 中文乱码_解决Unity3D中文乱码问题
  6. js制作随机抽奖,(指定数字范围内随机出现一个数字)
  7. 单片机c语言常用的语句有几条,单片机C语言教程-基础语句
  8. hidl 原理分析_普通高等教育“十五”规划教材 电机学-胡虔生, 胡敏强.pdf
  9. EnvironmentPlugin 一款用来配置可动态切换App环境的Gradle插件
  10. 计算机固态硬盘安装,电脑怎么安装固态硬盘?电脑安装M.2和SATA SSD硬盘教程图解...