谈软件加密(解密)及逆向技术与软件开发技术的关系

 几年以前我在看雪论坛(www.pediy.com)中看到了与软件加密,解密及逆向分析相关的资料,刚开始出于好玩,有空闲的时间就去上面看看,慢慢的理解了一些基础知识,当然动手实践是必不可少的.慢慢的从静态分析,到动态调试,算法分析都有了一定的积累,也越来越感觉到软件开发,加密,解密和逆向分析之间的关系是密不可分的。

软件加密与解密本身是相互矛盾的 ,而软件开发和逆向分析技术也是相对立的,在后来的工作和生活中,这方面的知识对我在软件开发相关的知识进行了很有力的拓展,也使我对他们的认识越来越深刻,回顾以往的经历,可以找出相关的典型实例如下:
 

1.国产某文件夹加密软件
刚开始下载试用以后,发现需要注册,于是想利用自己知识破解他,后来破解的过程中,居然发现很多东西,比如:反调试技术,运行次数及运行时密码设置,通过逆向分析技术,很容易搞明白了他的保护方式,而且发现,这种简单的保护方式在逆向分析技术面前是透明的,下来分析了注册算法,这方面我能力比较欠缺,没能分析出来,但找到了破解它的方法(这也是好多软件存在的问题,加密算法很复杂,但与软件的结合点很容易找到),最后对它对文件夹的加密算法做了逆向分析,发现这种号称“国防级加密”的功能,居然是利用Windows操作系统中的回收站,把要加密的文件移动到回收站中建立特殊文件夹中来加密的,结合Windows操作系统的特点,先不要说是不是“国防级的加密”,数据是安全性都是问题,后来上网查了一下,发现果然有人通过它加密以后,在发生某些意外的情况下数据没办法还原。

我只记得我当时很是想不明白(其实现在也不太明白),这样的方式对用户负责么??没办法也许整个社会都在变迁,其实这个软件是我在长沙出差期间分析的,当时保存了分析资料,后来回公司以后,在圣诞节前整理了所有的资料,把它公开于众,详细内容可以参见看雪中的文章"国产某文件夹加密软件全面分析"(具体地址为 http://bbs.pediy.com/showthread.php?t=19718

这个实例中,使用了大量的逆向分析工具,Windows操作系统的相关知识。


2.金蝶账务系统不同版本之间数据导入导出
有个朋友是搞账务的,单位比较小,刚开始使用了K3的MSSQL库,由于某些原因,后来需要使用金蝶的单机版Access数据库,新的单机版没有什么问题,但是去年的账还在K3的MSSQL数据库中呢,为了给朋友帮忙,当时需要解决的几个问题有:

数据库如何直接进入(mssql和access):mssql可以使用NT认证方式进入,access金蝶是加密的,还使用了工作组文件加密(mdw文件),使用工具组文件加密的方式,密码是不好解破的,只能从金蝶软件入手,金蝶软件要操作access数据库,肯定要出现用户名密码的,通过这个方法,终于找到了用户名密码,直接进入access库,对其操作没有问题了。 
账务基础资料导出导入(主要是会计科目):两个软件系统的会计科目信息编码方式不一样,但可以通过一定的规则进行转换,使用excel公式把数据转换好以后,直接导入成功。
账务凭证等资料导出导入(凭证数据):账务系统每个会计期间(一个定义为自然月)都需要进行结账处理,两个系统的结账机制差别很大,结账过程也比较复杂,没有办法把mssql中的结账数据导入access,所以采用,导入当期的凭证等数据,然后结账,转到下一期。具体实现,在access中通过链接表方式把mssql的源数据链过来,通过带参数插入查询方式每次向access中添加指定参数的一期凭证数据,然后在账务系统是进行结账,转到下期的(也就是把手工录入凭证的工具通过数据导入来代替),这样风险是比较低的,也比较合理。

就这样,把一期一期的数据导入了,最后到了当前的期间,同时和原来的mssql中的账务数据作了对比,发现期末余额是一样的,任务完成!

这个实例中,前期逆向分析为数据库密码的寻找服务,后期使用了大量数据库和账务知识。


3.不重新启动电脑,实现某些注册表配置的刷新

有个搞网吧网管的朋友,说需要一个软件,类似的windows中的策略编辑器的方式,通过修改注册表限制和隐藏驱动盘,达到访问限制。查相关资料了解到很容易实现,只要修改注册表就可以了,但是修改完要重启电脑才能生效,这在网吧是个大问题。后来与他沟通后之后,他告诉我有个软件可以实现,让我做为参照,对软件使用逆向分析以后现,是通过一个API来实现不重新刷新系统配置的(具体为SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "policy"),找到了解决问题的方法,只需要调用API就可以了。

这个实例很简单,前期逆向分析很容易解决了问题。


4.丢失安装程序的软件系统,移植到另一台机器或制作新安装包
这方面的东西也做过一些,解决问题的方法是:通过分析软件相关键的文件,先找到软件运行所需要的所有文件。再通过打包工具或手工方法,进行移植安装到另一台机器(最好是在现场进行),通过对比,手工注册组件,等方式,应该可以搞定。
另外,有一个.net作的安装包,安装包中的文件需要升级,但没有原始的安装工程文件,也就是不知道这个安装包都包含哪里文件,安装过程中做了什么样的配置,要解决这一问题,一方面是通过跟踪分析文件(文件监视器),另一方面是通过.msi文件反编译器,找到这个安装包的文件列表等信息,再进行还原。

这个实例环境比较复杂,不同的问题,可能有不同的解决方法,这里只是提个思路罢了。


总结:软件解密技术依赖于逆向分析技术,逆向分析技术又和不现的语言,编译器有关。在了解和掌握这些知识以后,在软件开发过程中,对于系统出现不容易找到的bug等,都可以通过逆向分析调试等方法,找找问题。对于采用了第三方的控件,组件等,如果第三方的控件存在某些缺陷,才能进行分析,验证,从而使用软件系统更加可靠稳定的为用户服务。逆向分析技术在病毒分析领域中的作用是不言而喻的,有了逆向分析技术,做为软件开发者,也可以自己分析研究病毒发作条件,从而为预防做好准备。 建议有志于软件开发的人多了解学习这方面的知识,相信在以后的工作生活中会有所帮助。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值