什么是逆向工程?

  逆向工程(又名反向工程,Reverse Engineering-RE)是对产品设计过程的一种描述。在工程技术人员的一般概念中,产品设计过程是一个从设计到产品的过程,即设计人员首先在大脑中构思产品的外形、性能和大致的技术参数等,然后在详细设计阶段完成各类数据模型,最终将这个模型转入到研发流程中,完成产品的整个设计研发周期。这样的产品设计过程我们称为“正向设计”过程。逆向工程产品设计可以认为是一个从产品到设计的过程。简单地说,逆向工程产品设计就是根据已经存在的产品,反向推出产品设计数据(包括各类设计图或数据模型)的过程。从这个意义上说,逆向工程在工业设计中的应用已经很久了。比如早期的船舶工业中常用的船体放样设计就是逆向工程的很好实例。

  随着计算机技术在各个领域的广泛应用,特别是软件开发技术的迅猛发展,基于某个软件,以反汇编阅读源码的方式去推断其数据结构、体系结构和程序设计信息成为软件逆向工程技术关注的主要对象。软件逆向技术的目的是用来研究和学习先进的技术,特别是当手里没有合适的文档资料,而你又很需要实现某个软件的功能的时候。也正因为这样,很多软件为了垄断技术,在软件安装之前,要求用户同意不去逆向研究。 逆向工程的实施过程是多领域、多学科的协同过程。

为什么学习逆向工程?

  在2007年初,我国相关的法律为逆向工程正名,承认了逆向技术用于学习研究的合法性。获悉这个消息,国内软件逆向界人士纷纷奔走相告,雀跃不已。众所周知,我国的软件产业落后于西方列强,甚至落后于邻国印度和日本,而这个举措意味着我国的软件研发人员如果利用逆向技术去研究学习国外一流软件的开发方法,那么我国的软件技术将会有极大的提升,此举何其开明也!

  然而,逆向技术相关的实训实在少之又少,而各个大专院校虽然开设计算机相关专业,但是对此技术也尚未重视。社会上虽然涌现出大量软件开发实训机构,但是以培养软件蓝领为主要目标,对逆向技术更是避而远之。时下的IDE是极其优秀的,拜其所赐,市面上的程序员多出十几倍,但是又有多少能理解程序内部的机制呢?虽然很多人认为,去研究程序的内部原理,就是破坏了“黑盒子”封装性。但是如果只是能够在别人搭建好的平台上做开发,那么就只会被别人牵引技术方向,而自己始终只能追逐技术。如果我们能够充分掌握逆向分析的方法,就可以在一流的软件里直接学习各类先进技术,取长补短,为我所用。若如此,实为我国软件产业之幸事。

怎么学习逆向工程?

  逆向工程是一个综合性和实践性很强的学科,最需要的是耐心和毅力。初学者往往一开始就拿一个成熟软件去反汇编分析,结果被海量的指令和错综复杂的流程搞得晕头转向,然后大多数人就中途放弃了。

  我们建议大家从最简单的程序开始入手,最好从自己用汇编写的“Hello World”程序开始。然后在学习的过程中逐步将难度升级,一点点去看懂流程特性。等把汇编程序看顺眼了,就开始研究C/C++的流程特性,一边在老师的带领下去学习研究,一边勤做笔记、总结方法。几个月下来,就会形成属于自己的一套分析代码的风格或习惯,这样以来,任何软件在你眼中都没有了神秘感,只要你愿意投入时间去分析就一定会得到你所需要的知识。

到底是在家自学好还是出来参加培训好?

  坦白地说,当然是自学好。因为自学可以提高自己的独立思考能力,容易养成好的学习习惯,这对于每个人的将来都是有帮助的。实不相瞒,我们以前研究逆向技术,就是靠自学,也只能靠自学。且不谈当时没有这些方面的实训,就算是相关文档、代码等资料都是极度匮乏的。在这种恶劣的条件下,虽然我们不懈地努力,但是学习进度还是非常缓慢,花费几天几夜去研究分析一个软件的关键算法更是常有的事。在分析软件的过程中,我们体会到了难以表达的乐趣,收获了知识,但是付出了大量的时间,投入了大量的精力。也正因为如此,国内的技术高手们对自己稍有价值的技术心得和分析成果一直守口如瓶。

既然我们提倡自学,那为什么还是要开展这样一个实训呢?

请先了解我们的课程体系。然后我们计算一下,以一个C语言2级水平的学生自学时间作为参考标准。

blog

第一阶段是C语言程序设计、C++语言程序设计和数据结构。

自学完第一阶段课程,完成阶段项目,且不谈能否达到我们第一阶段考试及格的水平,这大概需要4个月。

blog

第二阶段涉及到SQL Server数据库、开发环境、Win32程序设计、MFC/QT的体系结构和COM原理等。

这个阶段的课程一般在学校里很少有专门的课程,那么等你自学完这些知识,并做完了这个阶段的项目,花费8个月的时间也不算长。

blog

第三阶段是16位和32位汇编语言程序设计,逆向分析技术等。

这个阶段是我们的主打课程。我们可以很自豪地对外宣布,至今为止,我们是国内唯一开设了逆向分析技术课程的实训机构, 在这里你可以学到在其他实训机构学不到的知识。当然,我们也很提倡并鼓励你自学。如果你从不懂汇编指令开始自学,到可以用 汇编语言在Windows环境下开发,然后能脱离编译器直接写16进制编码完成一个窗口程序,到熟练分析反汇编代码,熟悉调试器原理, 了解反调试思路……好了好了,就到这里。你当然又聪明又很刻苦,那么等能完成我们这个阶段的项目(PE分析和进程调试),12个月过去了…… 我们还有一系列专题课程(溢出漏洞的利用和检测,软件加壳技术,rootkit利用和检测,数据安全,病毒分析和处理),这是告诉你逆向分析技术有哪些作用,也是为学员将来进入职场而准备的敲门砖。嗯…为了不打击你自学的信心,专题阶段所花费的时间我们就不作统计了。

那么,哪些人适合实训,哪些人适合自学呢?

  刚才我们讨论过了,自学可以提高自己的独立思考能力,容易养成好的学习习惯。那么如果你有时间,有精力,而且对自己有克制力,那么你就是自学的不二人选。我们强烈建议你在自学中成长,而且真诚欢迎你来我们教室和学员们交流学习经验和技术观点。学习能力突出的,我们甚至可以为你报销车费和午餐费用。

  

  如果你觉得自学时间太长,职场竞争压力太大,或者交际过多而你缺乏一定的克制力,那么我们建议你来我公司在实训的过程中“闭关修炼”一把。在你缴学费之前,我们会和你签署一份实训合同,要求你同意我们对你的学习方面进行严格地管理和控制。按照合同,你每天有义务完成我们给你的当日学习情况的书面调查表格,有义务完成每天的作业任务,有义务参加各个考核等。如果你阶段考核没通过,考虑临场发挥问题,我们给你补考机会,如果还是没通过,我们强制给你免费重修。你没有学习阶段玩游戏的权力,也没有参与其他娱乐项目的权力。如果你能接受并遵守以上这些“不平等条约”(因为我们没有限制教师的日常娱乐),那么你就非常适合我们的实训。在你下定决心之前,不妨先和我们的老师交流,学员交流。

我们郑重承诺

我们通过入学考试严格筛选,使高质量教学得到充分保证 想象一下,挺过14个月的魔鬼训练后,你的技术能力脱胎换骨,从此别人的软件对你没有任何神秘感,你真正地控制了软件

现场试听老师讲课

和任意学生单独交流

你可以在课间和老师交流

按教学阶段分期付款