从0开始学逆向 第一期:什么是逆向

Reverse 学习(一) - What is Reverse

也是摆了一年半了,今天也是闲得没事开个新坑。

注意:本系列以做为主,知识点一般也是根据做什么讲什么,所以有些基础知识写的并不全面(因为急着打O神,懒得写了)。

学习要求

  1. C语言至少略有掌握
  2. 基本计算机知识要有所知晓

什么是逆向

既然说到了逆向,那自然就有正向,正向就是我们的编程语言变成可以运行的程序的过程。

基本上大家都会在大学学到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」创作共享协议,转载请在文章明显位置注明作者及出处。

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值