分享

什么是汇编语言?逆向分析必备语言

 好汉勃士 2023-02-09 发布于广东

机器语言

  • 机器语言是机器指令的集合;
  • 机器指令就是一台机器可以正确执行的命令;
  • 电子计算机的机器指令是一列二进制数字,计算机将之转换为一列高低电平,使计算机的电子器件受到驱动,进行计算。

CPU中央处理单元

每一种微处理器,由于硬件设计和内部结构不同,需要用不同的电平脉冲来驱动,因此每一种微处理器都有自己的机器指令集,也就是机器语言

  • 指令:01010000(PUSH AX)
  • 电平脉冲
文章图片1

早期程序设计均使用机器语言。程序员用0、1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带或卡片输入计算机,进行运算。

汇编语言产生

  • 汇编指令是机器指令便于记忆的书写格式。
    • 操作:寄存器BX的内容送到AX中
    • 机器指令:1000100111011000
    • 汇编指令:mov ax,bx
文章图片2

编译器:能够将汇编指令转换成机器指令的翻译程序。

汇编语言组成

  • 汇编指令:机器码的助记符,有对应的机器码
  • 伪指令:没有对应机器码,由编译器执行,计算机并不执行
  • 其他符号:如+、-、*、/等,由编译器识别,没有对应机器码。

存储器

指令和数据在存储器中存放,然而在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。

1000100111011000 → 89DB 数据

1000100111011000 → mov ax,bx 指令

存储单元

存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号。例如:一个存储器有128个存储单元,从0~127开始编号。

文章图片3

CPU对存储器的读写

总线:CPU和其他芯片连接的导线,叫做总线。物理上,总线是一根根导线的集合;根据传送信息不同,逻辑上分为地址总线、数据总线、控制总线。

文章图片4

地址总线

  • 一个CPU有N根地址线,即这个CPU的地址总线宽带为N。最多可以寻找2^N2N​​个内存单元。
文章图片5

数据总线

文章图片6

控制总线

  • CPU对外部器件的控制是通过控制总线来进行的
  • 控制总线宽度决定了CPU对外部器件的控制能力。

主板和接口卡

主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。

CPU不能之间控制外部设备,这些外部设备都通过插在扩展插槽上的接口卡直接控制,而接口卡也通过总线和CPU相连,CPU就可以控制外部设备。

存储器芯片

文章图片7
  • RAM和ROM,位置(主存或接口卡,比如显存)。
  • BIOS

内存地址空间

逻辑存储器情况:

文章图片8

8086CPU内存地址空间分配情况

文章图片9

寄存器

  • 运算器进行信息处理
  • 寄存器进行信息存储
  • 控制器控制各种器件进行工作
  • 内部总线连接各种器件,在它们之间进行数据传送

通用寄存器

文章图片10
文章图片11
文章图片12
文章图片13

mov 和 add 指令

文章图片14

逆向分析

  • 在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误。
  • 而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果。
  • 调试逆向分为动态分析技术和静态分析技术。动态分析技术指的是使用调试工具加载程序并运行,随着程序运行,调试者可以随时中断目标的指令流程,以便观察相关计算的结果和当前的设备情况。静态分析技术是相对于动态分析而言的。由于在实际分析中,很多场合不方便运行目标(例如病毒程序,设备不兼容,软件的单独某一模块)。那么这个时候静态分析技术就该上场了!
  • OD(OllyDbg)和IDA Pro这两款工具分别是调试逆向的倚天剑和屠龙刀。
  • 虽然两者都兼容动态和静态的调试方式,但就动态调试而言,OD更为灵活和强大,而静态调试工具的王者理所应当是功能极为强大的IDA Pro。

OD基本快捷键及功能

文章图片15

定位到系统函数

  • Ctrl + G 输入MessageBoxA
  • bp MessageBoxA 直接下断点

数据类型

在学习16位汇编时,可以对内存单元进行长度修饰,比如:mov byte ptr [1000H], 1,表示1是一个字节类型数据,mov word ptr [1000H], 1,表示1是一个字类型数据。

在C++中,使用变量类型表示数据的大小,引用头文件Windows.h

字节 BYTE 1字节 0-0xFF (unsigned char)

字 WORD 2字节 0-0xFFFF (unsigned short )

双字 DWORD 4字节 0-0xFFFFFFFF (unsigned long)

问题

只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

mov ax,2 add ax,ax add ax,ax add ax,ax

086CPU偏移地址

8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。从8086的内部结构来看,如果讲地址从内部简单的发出,那么只能送出16位地址,寻址能力只有64KB。

文章图片16

物理地址=段地址*16+偏移地址

  • 内存并没有分段,段的划分来自CPU
  • 段地址一定是16的倍数
  • 一个段最大长度是64KB

段寄存器CS和IP

在8086CPU中,任意时刻,设CS中的内容为M,IP中内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令。

文章图片17

在8086CPU加电启动或复位后(即CPU刚开始工作时),CS被设置为FFFFH,IP被设置为0000H。CPU从FFFF0H内存单元中读取指令并执行,时开机后的第一条指令。

修改CS和IP

  • 同时修改cs和ip:jmp 段地址:偏移地址
  • 只修改ip:jmp 寄存器

如图所示:CPU初始状态CS=2000H,IP=0000H

文章图片18

Debug调试

常用指令

  • R命令查看、改变CPU寄存器的内容
  • D命令查看内存中的内容
  • E命令改写内存中的内容
  • U命令将内存中的机器指令翻译成汇编指令
  • T命令执行一条机器指令
  • A命令以汇编指令格式在内存中写入一条机器指令

进入Debug

文章图片19
文章图片20
文章图片21
文章图片22

实验任务1

文章图片23

实验任务2

文章图片24

实验任务3

文章图片25

DS段地址

将al中的数据送入内存单元10000H中

mov bx,1000H

mov ds,bx

mov [0],al

SUB指令

sub 操作数A,操作数B

影响ZF标志位

标志寄存器

8086 CPU 标志寄存器有16位,其中存储的信息通常被称为程序状态字PSW(Program State Word)。

  • 用来存储相关指令的某些执行结果
  • 用来为CPU执行相关指令提供行为依据
  • 用来控制CPU的相关工作方式
文章图片26

ZF标志位

flag的第6位是ZF,零标志位,记录相关指令执行后,其结果是否为0。如果结果为0,ZR( Zero ),ZF=1,如果结果不为0,NZ( Not Zero ),ZF=0。

文章图片27
文章图片28

OD命令栏指令

  • bp 下断点
  • bc 清除断点
  • dd 以双字显示数据
  • dw 以字显示数据
  • db 以字节显示数据
  • dc 以字符显示数据
  • ? 计算表达式的值

PDB文件

全称为程序数据库文件。我们使用它(更确切的说是看到它被应用)大多数场景是调试应用程序。目前我们对.PDB文件的普遍认知是它存储了被编译文件的调试信息,作为符号文件存在。

禁用VS优化

文章图片29

MOVSX和MOVZX

  • 都是由小存储单元向大存储单元进行数据传送
  • MOVSX用符号位进行扩展填充
  • MOVZX用0进行扩展填充

LEA

  • 将源操作数给出的有效地址传送到指定的的寄存器中

PF标志位

flag第2位是PF(Parity Flag),判断结果所有bit位中1的个数如果是偶数,PE(Parity Even),PF=1,如果是奇数PO(Parity Odd),PF=0。

文章图片30

文章图片31

SF标志位

flag第7位是SF(Sign Flag),结果为负NG,SF=1,结果为正PL,SF=0。

文章图片32

栈操作指令

  • push ax:将ax中数据送入栈中
  • pop ax: 将栈顶数据取出送入ax
  • ss:sp 指向栈顶
文章图片33
文章图片34

push ax执行,由下列两步完成

1.SP=SP-2

2.将ax中数据送入新的SS:SP指向位置

文章图片35

CF标志位

flag的第0位是CF,在进行无符号运算的时候,记录运算结果的最高有效位向更高位的进位值,或者从更高位的借位值。

OF标志位

记录有符号数是否溢出。

CMP指令

指令格式:cmp 操作对象1,操作对象2

指令功能:计算操作对象1-操作对象2,但并不保存结果,

下列为根据无符号数的比较结果进行转移的条件转移指令:

文章图片36

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多