【转】逆向工程:让我们剥开软件的坚果

转自:http://www.guokr.com/blog/48489/

==============================郑重声明============================
本文旨在让大家正确理解“逆向工程”、“反汇编”等概念和过程,切记不可有违法行为!
=========================声明完毕,接正文==========================

除了自由及开源软件外,对于网上出现的所有的所谓“绿色版”、“破解版”、“汉化版”软件,不论从破解方、提供方或者下载方来说,都构成侵权等违法行为,也就是我们常说的“盗版”。那么有没有人考虑过这些软件是如何被破解掉的呢?

看过电影《变形金刚》的朋友一定还记得下面这个场景(图)吧,美国之所以拥有这么多高级的技术原来是通过对威震天进行的逆向工程开发而习得的!这当然是导演杜撰出来的。但“逆向工程”这个技术的确存在。

逆 向工程的定义为:通过对某种产品的结构、功能、运作进行分析、分解、研究后,制作出功能相近,但又不完全一样的产品过程。“某种产品”可以为电子器件、生 化用品、医药食品、纺织衣物、机械产品等等。二战和冷战期间,逆向工程还被用来对敌对势力的军事武器进行分析和信息窃取。对于程序软件的逆向工程开发,俗 称“破解”。

软件的破解主要有以下两种方法:

1.暴力破解

顾名思义,就是通过暴力破坏程序结构来达到对程序、软件自由使用的目的。这种方法因为技术含量不高而可能会被大多数黑客和破解高手所不齿,但它却往往是最有效率的一种方法。其破解思路主要如下:

一般很多注册版软件在你第一次启动它们的时候都会弹出“请输入注册码(激活码)”之类的对话框,或者是“您的剩余使用天数为XX”之类的警示窗口。这些软件的逻辑是这样的:只有输入正确的注册码才能正常或在期限到后继续使用该软件。而暴力破解所要解决的问题就是要改变软件判断的这一逻辑,改成:只有输入错误的(或者根本不输入)注册码才能正常或在期限到后继续使用该软件。简单吧?直接吧?暴力吧?当然,这只是思路,哪个程序会让你随随便便改变它的运行逻辑的?这时就需要一些必要的技术了。

第 一步,查看软件信息。我们必须先知道这个软件是用什么语言(比如是结构化语言还是面向对象语言)写出来的,才好判断它的语句结构和逻辑。之后要找到这个软 件的运行入口点。很多软件为了在入口点处迷惑破解者,会加入一些“壳”和“花指令”——可以简单理解为就是一段无用代码或加密方法,会让人在里面转圈圈或 找不到所需信息。这时就需要所谓的“脱壳技术”并正确识别程序入口点。
可使用软件:PEiD 0.95

第二步,反汇编分析。我们知道,C、PASCAL等编程语言在经过编译处理后会被转成机器语言再被计算机执行。反汇编就是把机器语言反编译成汇编语言的过程。有两种反汇编方法:静态的和动态的。静态方法就是不调试程序,直接查看软件的反汇编代码;动态则需要调试程序。
可使用软件:C32Asm、IDA Pro、OllyDbg

第 三步,破解。很多时候,像“请输入注册码(激活码)”之类的字符串就是包含在程序代码里的,我们只要找到这段字符串,分析其前后文代码语句逻辑即可。对于 不含有字符串的,可以查找代码中有无"MessageBox”(底层API函数,用来弹出对话框)。如果程序逻辑结构简单则无需动态调试,直接在静态环境 下修改代码即可,如果情况复杂,需要在上述语句(字符串、MessageBox)处设置断点以供动态调试。找到判断注册码是否为正确的那条反汇编语句。汇 编语言的逻辑判断一般是通过跳转语句来实现的。如果正确则继续执行代码段,错误则跳入错误提示段。这时我们只需要把“跳”改成“不跳”即可。对于稍微复杂 些的情况,我们也只要根据代码逻辑,找到正确的代码执行段即可。修改好代码保存退出再重新启动程序,随便输入一个错误的注册码,如果破解成功,这时就会弹 出“恭喜您注册成功”之类的消息框了。
可使用软件:(同上)

2.算法破解

这是真正的逆向工程。网上涌现的各种“注册机”就是利用这种方法产生的。它与暴力破解大致步骤相同,不同之处就在于它不破坏程序代码,而是通过分析输入注册码后判断时的反汇编语句代码,找出算法,从而找到正确的注册码。这需要有很强大的反汇编能力和汇编语言知识。

写 了这么多,不是想教大家学坏,只是觉得学习具有攻防性质的一些技术,肯定是先要知道如何“攻”,才能真正理解如何“防”。而本文仅仅是介绍了逆向工程在软 件破解应用中的一丁点儿皮毛、雕虫小技而已。有对计算机和信息安全感兴趣的朋友可以动手尝试一下,会体会和学习到的更多,但无论成功失败与否切记都不要把 你破解过的程序传播出去,这可是违法行为哦!

更多内容可以度娘“看雪”(国内做软件逆向工程分析最为出色的一个论坛)和维基本文各相关关键词。

另 外,关于软件加密,大家需要认清的真相是,不可能被破解的密码术目前是不存在的(最简单的请参考密码词典暴力破解)。现在比较优秀的软件加密技术都是在延 长破解所需时间或增加破解所需成本上下功夫。比如一个软件上市后,破解者花了一年时间终于破解掉了密码,而这个软件早在半年前就更新换代了,已经没人用或 者系统已经不支持旧版了。或者一个软件成本价是100元,而破解者要破解这个软件所需的成本是500元乃至1000元,那就得不偿失了。这是密码术比较现 实的意义。

posted @ 2014-03-10 17:09  myLittleGarden  阅读(764)  评论(0编辑  收藏  举报