Reverse 学习(一) - What is Reverse
也是摆了一年半了,今天也是闲得没事开个新坑。
注意:本系列以做为主,知识点一般也是根据做什么讲什么,所以有些基础知识写的并不全面(因为急着打O神,懒得写了)。
学习要求
- C语言至少略有掌握
- 基本计算机知识要有所知晓
什么是逆向
既然说到了逆向,那自然就有正向,正向就是我们的编程语言变成可以运行的程序的过程。
基本上大家都会在大学学到C语言,在上C语言课的时候,老师一般都会讲一下C语言是怎么变成我们运行的程序的,这里我们简要回顾一下:
编译
主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序(比如大家写的C语言代码),翻译为计算机能解读、运行的低阶机器语言的程序(二进制),也就是可执行文件,主要流程如下:
源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(linker)→ 可执行文件(executables)
不太严谨的说,可以分成三步:C语言代码 → 汇编语言代码 → 字节码(用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合。)
那逆向就显而易见了,自然就是把上边这个过程反过来,也就是把程序变成我们能看懂的源代码,即 字节码(或称机器码) → 汇编语言代码 → C语言代码。
不幸的是,编译程序是一个失去信息的过程,比如变量名、函数名等信息很多时候都会被去掉(编译时加-g选项可以保留这些信息),而且编译器也会在编译时加一些其它的代码进去,所以我们无法把程序完全恢复成源代码的样子。
好消息是,字节码 → 汇编语言代码 是没有什么问题的,因为字节码与汇编代码是一一对应的,就像阿拉伯数字和汉字数字一样,所以我们可以通过观察汇编代码,可以准确完整地分析出程序运行的整个过程。
可惜坏消息总是伴随着好消息的,坏消息是,我知道绝大部分新同学都看不懂汇编代码,没关系,前期 Reverse 的入门题目也用不着汇编语言,我们将在以后的章节对汇编语言进行讲解。
另外,不得不提的是,绝大部分时候,我们并不需要真的去准确地恢复程序原本的源代码,而是仅仅理解程序的流程和算法就可以了。
程序分析方法
分析一个程序主要有两种方式:静态分析和动态调试。
静态分析
指在不运行程序的条件下,进行程序分析的方法,主要使用的工具是IDA等。
通俗的说,静态分析就是先将程序通过反汇编、反编译逆向为我们能看懂的编程语言代码,然后我们对其使用肉眼观察法,看着代码尝试着去理解程序的逻辑和算法。
反汇编,即藉用反汇编器,把程序的原始机器码,翻译成较便于阅读理解的汇编代码。这适用于任何的计算机程序,对不熟悉机器码的人特别有用。
反编译,即藉用反编译器,尝试从程序的机器码或字节码,重现高级语言形式的源代码。(不是所有的汇编代码都能正确地反编译为准确的高级编程语言代码!)
动态调试
很多同学可能在自己编写程序时,使用过gdb等调试器寻找程序中的bug,这与动态调试有相似之处,主要使用的工具有GDB、OD、x64dbg、IDA(没错我又来了)等。
动态调试往往也需要通过反汇编先得到程序的汇编代码在进行调试,与静态分析不同的是,动态调试需要运行程序,通过分析程序运行过程中寄存器,变量等部分的变化,动态地分析程序的运行逻辑。(所以很明显,有些程序不适合在自己的电脑(别人的也不行)上进行动态调试(如病毒程序等))
可执行文件(程序)格式
在这一个系列中我们所说的程序,一般都是指电脑中的可执行文件。
在 Windows 和 Linux 中,可执行文件的格式并不相同。
Windows
在Windows中,使用的是 PE(Portable Executable,可移植性可执行文件)格式的可执行文件,后缀名一般为 .exe
,如下图所示:
Linux
在Linux中,使用的是 ELF(Executable and Linkable Format,可执行与可链接格式)格式的可执行文件,一般没有后缀名,如下图所示:
file 命令:用于辨识文件类型
另外,可执行文件还有指令集架构(比如x86与x64)之类的差别,希望大家在学校认真听课,在此我们不再赘述,在之后的章节将有所涉及。
本期就先说到这里,主要讲了讲逆向的一些基础知识,下期将会写一下IDA的基础使用方法。
参考资料
[1] 维基百科 :https://zh.wikipedia.org/zh-cn/%E7%B7%A8%E8%AD%AF%E5%99%A8
[2] CTF Wiki :https://ctf-wiki.org/reverse/introduction/
以上内容仅供参考,如有错漏,也很正常。
作者:CHTXRT
出处:https://blog.csdn.net/CHTXRT
本文使用「CC BY-ND 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。