热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

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

由于公司分析的软件是通过TMD保护的,而菜鸟技术不到家,无法解决TMD壳的问题,所以请人脱掉之后再做的分析。但是这个软件每个月都会更新一次,尽管我们公司是断开外网,但是这个软件仍然会在使用时

由于公司分析的软件是通过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掉代码的情况下进行打补丁。


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


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


推荐阅读
author-avatar
无痕
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有