逆向工程简介
定义
指对软件的结构,流程,算法,代码等进行逆向拆解和分析
研究目标
导出软件产品的源代码,设计原理,结构,算法,处理过程,运行方法及相关文档等
应用领域
主要应用于 软件维护 , 软件破解 , 漏洞挖掘 , 恶意代码分析 逆向分析流
- 研究保护方法,去除保护功能
- 反汇编目标软件,跟踪,分析代码功能
- 生成目标软件的设计思想,架构,算法等相关文档
- 注入代码,开发出更完善的应用软件
软件逆向的历史
20 世纪 60 年代 为挽救第二代计算机软件及加速第三代计算机软件开发,美国研制专用反编译工具进行软件移植 1993 年 Chikofs等人于发起逆向工程会议并每年举行一次,研究和讨论软件逆向工程的问题,技术及其支持工具 80 年代后期到 90 年代 关于解决软件逆向工程和软件版权的矛盾基本上有了结果,各国纷纷针对软件逆向工程进行立法,不是约束而是规范该领域的研究工作 2007 年 1 月 17 日 最高人民法院发布司法解释: 通过自行开发研制或者反向工程等方式获得的商业秘密,将不被认定为反不正当竞争法有关条款规定的侵犯商业秘密行为。
逆向研究的目的和意义
- 充分利用和改造现有软件,对现有软件进行再设计,再工程,使软件功能得到大幅提高以满足用户的需要
- 通过软件逆向工程将过时的软件系统转化为易演化系统
- 破除商业闭源,技术保护(这阻碍了软件科学的发展).开放源代码
CTF竞赛中的逆向
涉及Windows/Linux/Android平台的多种编程技术,要求利用常用工具对源代码及二进制文件进行逆向分析,掌握Android移动应用APK文件的逆向分析,掌握加解密、内核编程、算法、反调试和代码混淆技术。 —— 《全国大学生信息安全竞赛参赛指南》
要求
- 熟悉如操作系统,汇编语言,加解密等相关知识
- 具有丰富的多种高级语言的编程经验
- 熟悉多种编译器的编译原理
- 较强的程序理解和逆向分析能力