《CTF特训营》学习总结——Reverse:逆向分析概述

一、逆向分析的主要方法逆向分析主要是将二进制机器码进行反汇编得到汇编代码,在汇编代码的基础上,进行功能分析。经过反编译生成的汇编代码中缺失了源代码中的符号、数据结构等信息............
摘要由CSDN通过智能技术生成

一、逆向分析的主要方法

逆向分析主要是将二进制机器码进行反汇编得到汇编代码,在汇编代码的基础上,进行功能分析。经过反编译生成的汇编代码中缺失了源代码中的符号、数据结构等信息,因此需要尽可能地通过逆向分析还原以上信息,以便分析程序原有逻辑和功能。逆向分析主要包括静态和动态分析。

1.静态分析

是在不执行代码文件地情况下,对代码进行静态分析,通过对代码外部特征进行观察,主要包括静态反汇编、反编译。

文件类型分析主要是用于了解程序是什么语言编写的,或者是用什么编译器编译的,以及程序是否被加密处理过。

在逆向过程中,主要是使用反汇编工具查看内部代码,分析代码结构。

2.动态分析

是在程序文件的执行过程中对代码进行动态分析的一种方法,其通过调试来分析代码,获取内存的状态等。在逆向过程中,通常使用调试器来分析程序内部结构和实现原理。

二、汇编指令体系结构

1.x86指令架构

(1)寄存器组

通用寄存器:包括EAX、EBX、ECX、EDX、ESI、EBP、ESP

指令指针寄存器(EIP):指向当前要执行的指令

状态标识寄存器(EFLAGS):根据状态标识寄存器中状态的值控制程序的分支转跳

段寄存器:CS、DS、SS、ES、FS、GS。在当前的操作系统,CS、DS、SS和ES的段寄存器的基地址通常为0.

特殊寄存器:包括DRO-DR7,用于设置硬件断点

(2)汇编指令集

x86汇编语言有两种语法记法:intel和AT&T,常用的IDA pro、OD、MASM这些逆向分析工具使用intel记法,而UNIX系统上的工具gcc通常遵循AT&T记法,intel记法更常用

intel的汇编语言格式为:

操作项 目的操作数,源操作数

操作项:汇编语言中的一些指令,比如add(加法)、mov(移动)等指令

目的操作数和源操作数:寄存器、内存地址或者立即数

(3)数据传送指令

数据传送指令是使用最频繁的指令,其格式为:

MOV DEST,SRC
功能:将一个字节、字或者双子从原操作数SRC传送至目的操作数DEST

(4)栈操作与函数调用

入栈PUSH,出栈POP,函数调用与返回通过CALL/RET指令实现,CALL指令将当前的EIP保存到堆栈中,RET指令读取堆栈,得到返回地址。

入栈:PUSH SRC          功能:ESP-=4;[ESP]=SRC

出栈:POP DEST          功能:DEST-=[ESP];ESP+=4

调用函数:CALL FUNC 功能:PUSH EIP;EIP=FUNC

函数返回:RET              功能:EIP=[ESP];ESP+=

  • 6
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值