前言
本专题学习软件逆向的基本原理、方法,并针对具体案例进行逆向分析,从而学习一套完整、系统的软件逆向的方法并获取相关经验。
什么是逆向工程
逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理。
随着计算机技术在各个领域的广泛应用,特别是软件开发技术的迅猛发展,基于某个软件,以反汇编阅读源码的方式去推断其数据结构、体系结构和程序设计信息成为软件逆向工程技术关注的主要对象。软件逆向技术的目的是用来研究和学习先进的技术,特别是当手里没有合适的文档资料,而你又很需要实现某个软件的功能的时候。也正因为这样,很多软件为了垄断技术,在软件安装之前,要求用户同意不去逆向研究。【百度百科】
常用软件
分析一个简单的程序
为了说明上述软件的作用,我们以一个简单的程序为例,来展示逆向中的反汇编代码并分析。
程序使用vc6.0编译生成,c程序源文件如下:
我们的目标是通过修改程序本身,实现在不知道密码的情况下获得密码正确的提示。
使用IDA Pro对程序进行反汇编,我可以找到编译生成的汇编代码中,main函数的部分如下:
我们可以看到,一句在汇编代码中的位置如标注所示,如果和不相等,则跳转至错误提示。因此,我们只需把指令换成指令,即可达成目的。
最后,我们使用UltraEdit修改可执行程序本身,从而永久保持这种任意密码通过测试的效果。
在后续的学习中,我们还可以用其他方式来突破程序的验证,如缓冲区溢出。本次学习到这里就成功结束了。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!