IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 2021-09-04 第五周CTF学习记录 -> 正文阅读

[嵌入式]2021-09-04 第五周CTF学习记录

逆向工程步骤及常用工具

软件逆向步骤

1.研究保护方法,去除保护功能
2.反汇编目标软件,定位功能函数
3.分析汇编代码
4.修改汇编代码或还原高级源代码
在这里插入图片描述

逆向常用工具

OLLYDBG(OD)

是一个动态追踪工具,是目前最为流行的调试解密工具。同时支持插件扩展功能,是目前最强大的调试工具

Windbg

Windows平台下,强大的用户态和内核态调试工具,是微软免费调试器集合中的GUI的调试器。轻量级,但调试功能强大,另有一个用途是用来分析缓存数据

IDA Pro

交互式反汇编器专业版(Interactive Disassembler Professional)可以方便地分析软件的函数、结构体

PEID

是一款著名的查壳工具,几乎可以侦测出所有的壳,数量超过470种PE文档的加壳类型和签名

C32asm

一款反汇编程序,具有反汇编模式和十六进制编辑模式,能跟踪exe文件的端点,也可直接修改软件内部代码

常见汇编指令

汇编语言种类

关于汇编语言的种类,可以说有多少种不同内核的CPU,就有多少种汇编语言。
和C语言不同,汇编语言更多的针对特定CPU内核,因此,不同内核的CPU,必须有对应的汇编语言编译器将汇编语言别写的程序编译成对应CPU的机器语言代码,CPU才能正确识别和执行这些代码。
不同架构的CPU指令并不相同,如×86,powerpc,arm各有各的指令系统;甚至同一种架构的CPU有几套指令集。
编译器厂商最有名的两家:MASM和GNUASM。前者是微软的,只支持x86,用在DOS/Windows平台中;后者是开源产品,主要用在Linux中,基本上支持大部分的CPU架构。
不同的汇编程序有不同的汇编语言编程规定
目前支持Intel8086/8088系列微机,常用的汇编程序有ASM、MASM、TASM、OPTASM

寄存器

寄存器从理解上来说和内存类似,只不过寄存器位于CPU内部,而内存位于CPU外部
而对于一个汇编程序员来说,CPU中主要可以使用的也就是寄存器而已,汇编程序员可以使用指令来读写CPU中的寄存器,从而可以实现对于CPU的控制,当然,不同的CPU,寄存器的个数和结构都是不一样的。
8086CPU中寄存器总共为14个,且均为16位。
即AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES共14个。
而这14个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。

通用寄存器

AX(Accumulator):累加寄存器,也称之为累加器
BX(Base):基地址寄存器
CX(Count):计数器寄存器
DX(Data):数据寄存器

指针寄存器

SP(Stack Pointer):堆栈指针寄存器
BP(Base Pointer):基指针寄存器

变址寄存器

SI(Source Index):源变址寄存器
DI(Destination Index):目的变址寄存器

控制寄存器

IP(Instruction Pointer):指令指针寄存器
FLAG:标志寄存器

段寄存器

CS(Code Segment):代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器

堆栈

堆栈是两种数据结构
堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))
对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。
堆,队列优先,先进先出(FIFO-first in first out)
栈,先进后出(FILO-First-In/Last-Out)
堆栈中的物体具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先出(LIFO)队列。
堆栈中定义了一些操作。两个最重要的是PUSH和POP。
PUSH操作在堆栈的顶部加入一个元素。
POP操作相反,在堆栈顶部移去一个元素,并将堆栈的大小减一。

堆栈操作示例:
PUSH:

在这里插入图片描述
POP:

在这里插入图片描述

指令和程序设计语言

指令:是CPU根据人的意图来执行某种操作的命令。
程序设计语言:是实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言。
机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。
汇编语言:是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。

指令表现形式

二进制:10100010
十六进制:74 0AH
助记符:ADD A,#08H

汇编指令格式

由编程语言编写的源程序是由许多语句(也可称为汇编指令)组成的。
每个语句由1-4个部分组成,其格式是:
[标识符] 指令助记符 [操作数] [;注解]
其中用方括号括起来的部分,可以有也可以没有。
每个部分之间用空格(至少一个)分开,一行最多可有132个字符。
例如:
RET;无操作数
COUNT : INCCX;一个操作数
MOV CX,DI ;两个操作数
ADD AX,[BP+4] ;第二个操作数为表达式

主要汇编指令

数据传送类指令

MOV / XCHG、PUSH / POP、LEA

算数运算类指令

ADD / ADC / INC、SUB / SBB / DEC / CMP / NEG、MUL / IMUL、DIV / IDIV

位操作类指令

AND / OR / XOR / NOT / TEST

控制转移类指令

JMP / Jcc / LOOP、CALL / RET、INTn

处理机控制类指令

NOP

8086指令系统概述

Intel 8086指令系统共有117条基本指令
可分为六个功能组:
①数据传送类指令
②算术运算类指令
③位操作类指令
④串操作类指令
⑤控制转移类指令
⑥处理机控制类指令

一、数据传送类指令

数据传送是计算机中最基本、最重要的一种操作
传送指令也是最常使用的一类指令
传送指令把数据从一个位置传送到另一个位置
除标志寄存器传送指令外,均不影响标志位
重点掌握
-MOV XCHG
-PUSH POP
-LEA

1.传送指令MOV

把一个字节或字的操作数从源地址传送至目的地址
示例:
mov al,4:al←4,字节传送
move cx,0ffh:cx←00ffh,字传送
mov si,200h:si←0200h,字传送
move byte ptr [si],0ah;byte ptr属性修饰符,说明是操作数为字节
move word ptr [si+2],0bh;word ptr 说明是字操作

2.交换指令XCHG

把两个地方的数据进行互换
寄存器与寄存器之间对换数据
寄存器与存储器之间对换数据
不能在存储器与存储器之间对换数据
示例:
mov ax,1234h;ax=1234h
mov bx,5678h;bx=5678h
xchg ax,bx;ax=5678h,bx=1234h
xchg ah,al;ax=7856h

3.进栈指令PUSH

在这里插入图片描述

4.出栈指令POP

在这里插入图片描述

二、算术运算类指令

掌握:ADD / ADC / INC、SUB / SBB / DEC / NEG / CMP
熟悉:MUL / IMUL、DIV / IDIV
理解:CBW / CWD、DAA / DAS、AAA / AAS / AAM / AAD

1.加法指令ADD

功能:ADD指令将源与目的操作数相加,结果送到目的操作数
对状态标志的影响:ADD指令按状态标志的定义相应设置状态标志
示例:
mov al,0fbh;al=0fbh
add al,07h;al=02h
mov word ptr [200h],4652h;[200h]=4652h
mov bx,1feh;bx=1feh
add al,bl;al=00h
add word ptr [bx+2],0f0fh;[200h]=3742h

2.带进位加法指令ADC

ADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数
ADC指令按状态标志的定义相应设置状态标志
ADC指令主要和ADD配合,实现多精度加法运算
示例:
mov ax,4652h;ax=4652h
add ax,0f0fh;ax=3742h,CF=1
mov dx,0234h;dx=0234h
adc dx,0f0fh;dx=f325h,CF=0;
DX.AX
=0234 4652H
+F0F0 F0F0H
=F325 3742H

3.增量指令INC(increment)

INC指令对操作数加1(增量)
INC指令不影响进位CF标志,按定义设置其他状态标志

4.减法指令SUB

SUB指令将目的操作数减去源操作数,结果送到目的操作数
SUB指令按照定义相应设置状态标志
示例:
mov al,0fbh;al=0fbh
sub al,07h;al=0f4h,CF=0
mov word ptr [200h],4652h;[200h]=4652h
mov bx,1feh;bx=1feh
sub al,bl;al=0f6h
sub word ptr [bx+2],0f0fh;[200h]=5562h,CF=1

5.带借位减法指令SBB

SBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数
SBB指令按照定义相应设置状态标志
SBB指令主要与SUB配合,实现多精度减法运算
示例:
mov ax,4652h;ax=4652h
sub ax,0f0f0h;ax=5562h,CF=1
mov dx,0234h;dx=0234h
sbb dx,0f0f0h;dx=1143h,CF=1
DX.AX
=0234 4652H
-F0F0 F0F0H
=1143 5562H

6.减量指令DEC

DEC指令对操作数-1
DEC指令不影响进位CF标志,按定义设置其他状态标志
注:
INC指令和DEC指令都是单操作数指令,主要用于对计数器和地址指针的调整

7.求补指令NEG(negative)

NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数
求补运算也可以表达成:将操作数按位取反后加1
NEG指令对标志的影响与用零作减法的SUB指令一样

8.比较指令CMP

CMP指令将目的操作数减去源操作数,按照定义相应设置状态标志
CMP指令执行的功能与SUB指令,但结果不回送目的操作数
示例:
cmp al,100;al-100
jb below;al<100,跳转到below执行
sub al,100;al≥100,al←al-100
inc ah;ah←ah+1
(判断al和100的关系后,执行below)
below:……

三、位操作类指令

位操作类指令以二进制位为基本单位进行数据的操作
这是一类常用的指令,功能简单、都应该掌握
注意这些指令对标志位的影响
1、逻辑运算指令
AND OR XOR NOT TEST
与、或、异或、非、测试
2、移位指令
SHL SHR SAL SAR
逻辑左移、逻辑右移、算术左移、算术右移
3、循环移位指令
ROL ROR RCL RCR
左循环移位、右循环移位、带进位左循环移位、带进位右循环移位

1.逻辑运算指令AND

功能:对两个操作数执行逻辑与运算,结果送到目的操作数
对标志的影响:AND指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义。
注意:所有双操作数逻辑指令均设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义
示例:
MOV AX,FF00H
MOV BX,F0F0H
AND AX,BX
AX=F000H
将AX和BX中的内容对其后,只有上下都是1结果才是1

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:19:00  更:2021-09-06 11:20:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 8:52:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计