我是怎么破掉公司分析的一款软件的时间检验的

由于公司分析的软件是通过TMD保护的,而菜鸟技术不到家,无法解决TMD壳的问题,所以请人脱掉之后再做的分析。但是这个软件每个月都会更新一次,尽管我们公司是断开外网,但是这个软件仍然会在使用时间不足10天的时候提示软件快要更新。恩,不更新就无法使用。按照以前的经验,一般是尝试修改系统时间,来测试软件是否是通过系统时间判断的。但是,即使是改了系统时间,也无法阻止这个提示的弹出。那么就考虑是否是软件通过下位机的时间来判断是否需要更新。根据它的更新提示,通过搜索关键字,找到了它call提示信息的地方,发现前面有个判断跳转,根据一般的思路,就是修改跳转,仔细看看,它是经过取值计算然后和0A进行比较,大于等于则跳转(jge),我们现在的值为09,那么只要改为jl就可以了。经过测试,改为jl是没有问题的,可以解决目前遇到的这个问题,但是我们不得不考虑这九天过了之后,我们难道要再改一次汇编代码吗?假如只是我们使用,那么麻烦点也可以,但是公司那么多人使用这个软件,我们就不得不考虑我们破解的优质性了。仔细看看它是拿0A和某个内存中的值进行比较,那么,哪行代码这个内存地址中的值变为09,我们就需要关注这行代码。根据观察,我们发现,它在一个call之后,变为了09。跟进call,然后继续单步同时观察内存中的值,发现在一个mov之后,内存中的值变为了09。我们就需要观察mov中的值是怎么来的。经过分析,发现它是从ss:[ebp-0x52]中取值,然后进行计算,再和4413相减,得到的值就是剩余可使用的天数。那么,我们这里不管它前面内存中是什么值,只需要mov eax,0x30就可以相减得29,这样的话就可以解决这个问题了。但是当我们想要修改代码的时候,发现我们改哪一行,他都会把后面的一至两行给nop掉,这说明长度不够,那么,这时候我们就可以考虑打补丁了,往下拉,找到一段空代码,然后记住地址,将mov那一行改为jmp 空代码,然后空代码mov eax,0x30 ,再把它冲没的一行代码也在这后面补上,然后再来一个jmp跳回去,让程序继续执行。经过这样的修改,我们发现程序完全不用担心时间检测。这里我们设置的结果是29,为了保险,我将mov那里改为了0x40,然后再次测试,发现并没有进行检验,所以,这个程序可以说永远都不会触发时间判断然后强制让你升级了。 


这里我们用到的有,根据字符串来搜索关键位置,和根据关注内存中的值来找到算法的真正核心点,以及如何在想修改代码却又会nop掉代码的情况下进行打补丁。


这里想说的是,其实工作中很多都是些基础的逆向操作,而特别高深的一些操作,我们需要慢慢研究。也就是说,工作中的技术性,也许没你想象的那么强。


本人纯属小白,若有大神观看此文,请勿喷,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值