逆向之汇编语言
首先介绍计算机程序在计算机中的处理过程。
现代计算机存储和处理的信息以二值信号表示,也就是二进制序列,程序对于计算机而言就是一串二进制数据流,以流水线的方式进入CPU进行运算。主要在CPU与内存之间进行数据传递。但程序员写出来的程序是以高级语言的形式展现的,计算机不是人脑,看不懂高级语言的语法,只能识别二进制序列,所以计算机需要将高级语言翻译成二进制序列进行解读和执行。然而将高级语言直接翻译成为二进制序列难度较大,所以就需要使用编译器。
编译器首先将程序员写的代码翻译成为汇编代码,汇编代码和计算机命令有较高的相似度,易于计算机识别,之后计算机将汇编指令抓换为二进制代码,同时将数据以二进制的形式存放在内存中。
所谓逆向,就是以静态或者动态的方式将可执行程序反编译成可读的汇编代码,分析可执行文件内在的逻辑。而分析程序就要找到程序的入口,从程序起始点一步一步分析程序结构,本次实验就介绍逆向查找程序启动函数的方法。
程序执行原理
高级语言:高级计算机语言便于人编写,阅读交流和维护。
机器语言:机器语言是计算机能直接解读,运行的。
程序执行方式:现代计算机存储和处理的信息以二值信号表示,程序对于计算机而言就是一串二进制数据流,以流水线的方式进入CPU进行运算。系统并非在硬盘上直接运行程序,而是将其装载进内存里,包括其中的代码段,数据段等。
程序表现形式:程序以高级语言的形式展现,计算机只能识别二进制序列,所以计算机需要将高级语言翻译成二进制序列进行解读和执行。
高级语言转换机器语言:高级语言直接翻译成为二进制序列难度较大,所以就需要使用编译器。
逆向分析
逆向分析的定义:源代码编译是“不可逆” 过程,无法从编译后的程序逆推出源代码。故而逆向是将编译链接好的程序反过来恢复成“代码级别”。逆向通常通过工具软件对程序进行反编译,将二进制程序反编译成汇编代码,甚至可以将一些程序恢复成更为高级的伪代码状态
逆向分析的主要作用:破解正版软件的授权、挖掘漏洞与安全性检测、还原非开源项目。
逆向分析的过程:
(1)利用工具获得汇编代码。
(2)找到程序启动入口。
(3)设置断点分析程序执行逻辑
(4)定位程序缺陷位置。
(5)设计利用方法。
(6)通过程序缺陷执行测试人员指令
逆向工具分类
静态分析工具
静态分析将二进制可执行代码转换为汇编语言进行分析。在很多场合下不适合直接运行程序,例如软件的某一模块(无法单独运行)、病毒木马蠕虫程序、平台设备不兼容等。此时需要使用静态分析工具。
动态分析工具
动态分析工具主要功能是调试,以便高效分析软件的行为并验证静态分析结果,甚至找出软件缺陷和漏洞。由于操作系统提供了完善的调试API,因此利用各种调试工具可以非常方便的观察和控制目标软件。
OllyDbg
OllyDbg是一个新的动态追踪工具,结合了IDA与SoftICE,易于上手,是流行的调试工具