Reverse(逆向)是CTF竞赛中的一种常见题目类型,主要考察参赛选手逆向工程相关的知识,考查形式为通过对一个二进制程序(exe、dll或者是elf等)进行逆向分析,了解程序内部的实现机制,最终目的可能是得到一个密码,或者是编写一个注册机用于计算指定用户名对应的注册码等。
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档的加壳类型和签名。PEiD支持各种外部插件,同时支持用户自定义的加壳程序签名信息。
Ollydbg简称OD,是一款具有图形用户界面的用户模式调试器,可以运行于各种主流Windows操作系统下。Ollydbg具有动态调试和静态分析功能,非常容易上手,对异常的跟踪处理相当灵活,并且许多爱好者为这款调试器编写了许多非常棒的插件,这些特性使得其成为Windows操作系统上用户模式下动态调试器的首选。
Ollydbg的反汇编引擎十分强大,可以识别数千个被C和Windows频繁使用的函数,并可以自动对参数进行注释。 虽然OD的GUI界面上拥有丰富的操作按钮,但通常我们使用键盘快捷键来加快调试过程,常用的快捷键有:
F2 设置一个断点(如果断点已经存在,那么断点将被删除) F4 运行到光标所在行(运行到光标所在行时自动断下) F7 单步跟踪(如果遇到一个call,则跟踪进入) F8 单步跟踪(如果遇到一个call,则执行完整个call) F9 继续执行(运行程序,直到进程退出或遇到下一个断点)IDA是一款交互式反汇编工具,其功能十分强大,支持多操作系统、多处理器下的二进制程序的反汇编分析,并且可以和使用者进行交互来提升处理效率。动态反汇编,IDA支持插件,支持IDC脚本,Hex-Rays Decompiler是IDA一个十分强大的插件,支持将反汇编代码直接转换为C语言伪代码,极大的提高了反汇编分析人员的工作效率。由于IDA拥有强大的功能以及繁多的特性,要完全掌握IDA的使用也是一件不容易的事情,但是这并不影响IDA的可用性。
IDA常用快捷键(具体含义会在后面的操作中讲到):
空格 在图形模式和列表视图模式之间切换反汇编视图 F5 将反汇编指令还原为伪代码 x 查看交叉引用 n 对变量名或者函数名进行重命名操作d 将二进制数据解释为字节/双字/四字 c 将二进制数据解释为代码 a 将二进制数据解释为字符串Windbg是在windows平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。
常用命令:
version、vertarget:查看版本信息lm、!dlls、!lmvi:查看模块信息用k命令显示调用栈,用.frames命令切换栈帧内存操作:读内存用d命令,写内存用e命令自动分析:!analyze、!owner等符号命令:.reload加载符号, .sympath设置符号路径, !sym设置符号选项!process:显示进程信息process显示当前进程.process /i 切换当前进程PE(Portable Execute)文件被称为可移植的执行体(可执行文件),常见的可执行文件有EXE、DLL、OCX、SYS、COM格式文件,PE文件是微软Windows平台操作系统上的可执行程序文件。 PE文件能被Windows平台的操作系统解释并执行,因此有固定的文件格式。PE 文件格式被组织为一个线性的数据流,它由一个MS-DOS 头部开始,接着是一个实模式的程序残余以及一个PE 文件标志,这之后紧接着PE文件头和可选头部。这些之后是所有的段头部,段头部之后跟随着所有的段实体。文件的结束处是一些其它的区域,其中是一些混杂的信息,包括重分配信息、符号表信息、行号信息以及字串表数据。如下图所示:
在计算机语言的进化过程中,是由低级语言(机器语言)向高级语言(C、C++、C#、Java等)逐步发展的,但是在实际的运行过程中,计算机能识别的只有机器语言(01代码)。所有高级语言在编译、链接、执行过程中转化为机器语言,并由CPU解释并执行。
机器语言不仅晦涩难懂,而且难以记忆,因此在计算机语言的进化过程中出现了汇编语言。汇编语言是一种与硬件紧密相关的程序设计低级语言,汇编语言使机器语言以便于记忆和理解的符号形式(又称为助记符)存在。
汇编是将汇编代码编译、链接成可执行文件的过程。反汇编则是将可执行文件还原成汇编代码的过程。反汇编技术常常应用在逆向分析、软件破解、漏洞挖掘等场景中,主要目的是逆向分析程序中的逻辑,然后改变程序的运行逻辑,达到更改程序执行的目的。