二进制安全-汇编基础

二进制安全学习之路 之前一直有写文章总结一下学习二进制安全过程的想法,但是因为某些原因(好吧就是懒)一直未行动。恰好泡泡看到平台上的问题来邀请我回答一下,就借这个机会做个小总结,希望能给当时像我一样略微迷茫的同学一些帮助。 阅读详情

进制的定义

二进制:由两个符号组成,分别是0 、1

八进制:由八个符号组成,分别是0、1、2、3、4、5、6、7

十进制:由十个符号组成,分别是0、1、2、3、4、5、6、7、8、9

十六进制:由十六个符号组成,分别是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F

度量单位:

1byte 字节 = 8 bit 比特 char

WORD = 2 BYTE = 16 bit short int

DWORD = 4 BYTE = 32 bit

QWORD = 8 BYTE = 64 bit

1kb = 1024 byte = 8192 bit

1mb = 1024 kb

1gb = 1024 mb

1tb = 1024 gb

有符号无符号
byte-128-1270-255
word-32768-327670-65535
DWORD
qword

16位汇编:实模式,16位处理器内的内部,最多可以处理存储的长度为16位。

32位汇编:保护模式,32位处理器内的内部,最多可以处理存储的长度为32位。

64位汇编:保护模式,64位处理器的内部,最多可以处理存储的长度位64位。

位数通用寄存器扩展
16位通用寄存器AX、BX、 CX、 DX、 SI、 DI、 BP、 SPR8W、R9W、R10W、R11W、R12W、 R13W、R14W、R15W
32位通用寄存器EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESPR8D、R9D、R10D、R11D、R12D、 R13D、R14D、R15D
64位通用寄存器RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSPR8、R9、R10、R11、R12、 R13、R14、R15

32位 常用寄存器

8个通用寄存器

image-20200510181300829

8个通用寄存器:

EAX 是"累加器"(accumulator),操作数和结果数据累加器,返回值运算结果一般都存储在这里

EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址。

ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。

EDX 是(destination) 用于存储部分乘法结果和部分除法被除数

edi 目标索引寄存器(destination index): 字符串操作的目标指针,ES段的数据指针

esi 源索引寄存器(source index):字符串操作的源指针,SS段的数据指针

ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向
系统栈最上面一个栈帧的栈顶。
EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向
系统栈最上面一个栈帧的底部

其中一部分还可以拆开处理

image-20200510182142575

EIP:指令寄存器(Extended Instruction Pointer),其内存放着一个指针,该指针永远指向下
一条等待执行的指令地址

可以说如果控制了 EIP 寄存器的内容,就控制了进程——我们让 EIP 指向哪里,CPU 就会
去执行哪里的指令

XMM寄存器:(浮点寄存器)

image-20200510182253226

EFLAGS寄存:包含了独立的二进制位,用于控制CPU操作,或是反应一些CPU操作的结果。有些指令可以测试和控制这些单独的处理器标识位。

EFLAGS寄存器的状态标志(0、2、4、6、7以及11位)指示算术指令(如ADD, SUB, MUL以及DIV指令)的结果,这些状态标志的作用如下:

内部数据类型

整数

  • BYTE 8位
  • SBYTE 8位 有符号
  • WORD 16位 符号
  • SWORD 16位 有符号
  • DWORD 32位 符号
  • SDWORD 32位 有符号
  • FWORD 48位 保护模式的远指针
  • QWORD 64位 整数
  • TBYTE 80位 整数

实数

  • REAL4 32位 短实数
  • REAL8 64位 长实数
  • REAL10 80位 扩展实数

伪指令

  • db 8位整数 =char 可以保持ascll码
  • dw 16位整数
  • dd 32位整数

大端序和小端序

首先还是先看下基本概念:

1、大端模式:高字节保存在内存的低地址

2、小端模式:高字节保存在内存的高地址

mov arr,01234567h

存储

大端序:01 23 45 67

小端序:67 45 23 01

指令集

算数运算

加

格式:ADD OPRD1,OPRD2

功能:两数相加

加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响

不允许OPRD1与OPRD2同时为存储器

————————————————————————————————

带进位加法指令ADC

格式:ADC OPRD1,OPRD2

功能:OPRD1 = OPRD1 + OPRD2 + CF

减

减法指令SUB
格式:SUB OPRD1,OPRD2

功能:两个操作数的相减,即从OPRD1减去OPRD2,其结果放在OPRD1中,指令的类型及标识位的影响与ADD指令相同,注意立即数不能用于目的操作数,两个存储器操作数之间不能直接相减,操作数可为8位或16位的无符号数或符号数

————————————————————————————————

带错位减法指令SBB

格式:SBB OPRD1,OPRD2

功能:进行两个操作数的相减再减去CF进位标志位,即从OPRD1 = OPRD1 - OPRD2 - CF,其结果放在OPRD1中

乘

无符号数指令MUL

格式:MUL OPRD

两个相乘数,要么都是8位,要么都是16位。 8位乘法,16位乘法。

如果是8位,一个数字默认存放在al中,另外一个数字存放在其他8位寄存器中或者字节型内存单元中。

mul 8位寄存器 ;结果存放在ax中

如果是16位,一个数字默认存放在ax中,另外一个数字存放在其他16位寄存器中或者字型内存单元中。

mul 16位寄存器 ;结果存放在dx, ax中

8位乘法,得到一个16位数, 结果存放在ax中

16位乘法,得到一个32位数, 低16位存放在ax中,高16位存放在dx中————————————————————————————————
带符号数指令IMUL

功能:乘法操作

OPRD为通用寄存器或存储器操作数

本指令会影响标志位CF及OF

除

无符号数除法指令DIV

格式:DIV OPRD

功能:实现两个无符号二进制数除法运算

div指令是除法指令。100001/100,100001是被除数,100是除数。一般格式为:div reg或div 内存单元,reg和内存单元存放的是除数,除数可分为8位和16为2种。

被除数:默认放在AX或DX和AX,如果除数为8位,被除数则为16位,默认在AX中存放;如果除数 为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。

————————————————————————————————

带符号数除法指令IDIV

格式:IDIV OPRD

功能:实现两个带符号数的二进制除法运算

比如16bit 的被除数,分别存在2个8bit寄存器AH:AL,商放在AL,余数在AH

比如32bit 的被除数,分别存在16个8bit寄存器DX:AX,商放在AX,余数在DX

比如64bit 的被除数,分别存在32个8bit寄存器EDX:EAX,商放在RAX,余数在EDX

比如128bit 的被除数,分别存在64个8bit寄存器RDX:RAX,商放在RAX,余数在RDX

自增

加1指令INC(INCrement by 1)

格式:INC OPRD

自减

减一指令DEC(Decrement by 1)

格式:DEC OPRD

LOOP

循环控制指令LOOP

格式:loop 标号

功能:相当于

dec cx
Jnz
即先对cx减1,然后判cx是否为0,不为0,转后面给出标号所指的入口,为0,顺序执行

MOV指令

数据传送指令 MOV

格式:MOV OPRD1,OPRD2

功能:将一个源操作数送到目的操作数中,即OPRD1<–OPRD2

说明:

OPRD1为目的操作数,可以说寄存器、存储器、累加器

OPRD2为源操作数,可以数寄存器、存储器、累加器和立即数。

MOVS(move string)

movs指令是汇编少有的两边都可以是memory的指令,MOVS在开发中通常极有可能是一串字符串的复制

字符串传送指令MOVS

格式:MOVS OPRD1,OPRD2

功能:OPRD1<—OPRD2

说明: 其中OPRD2为源串符号地址,OPRD1为目的串符号地址

LEA

有效地址传送指令

格式:LEA OPRD1,OPRD2

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

OPRD1必须是寄存器

XCHG

数据交换指令

格式:XCHG OPRD1,OPRD2,其中OPRD1为目的操作数,OPRD2为源操作数

功能:将两个操作数相互交换位置,该指令把源操作数OPRD2与目的操作数OPRD1交换

TEST

格式:TEST OPRD1,OPRD2

功能:其中OPRD1、OPRD2的含义同AND指令一样,也是对两个操作数进行按位的‘与‘运算

不同之处:是不讲’与‘的结果送目的操作数,即本指令对两个操作数的内容均不进行修改,仅数载逻辑与操作后,对标志位重新置位

CALL指令

过程调用指令

格式:CALL OPRD

功能:过程调用指令

相当于:

push eip

amp OPRD

RETN指令

返回指令,相当于:

pop eip

jmp eip

常用的JCC指令

JMP:无条件跳转

JZ/JE:ZF = 1(jump When Zero和jump When Equal) 等于0或相等

JNZ(jump no Zero)与JNE(jump no Equals ) ZF=0 不等于0或者不相等

比较两个有符号数,高低用greater和less表示:

JG 前>后 Jump if greater
JL 前<后 Jump if less

JL=JNGE(jump if less,or not greater equal)

JGB和JLE是用于比较带符号数的转移指专令:

JGE 转移条件(Jump if greater or equal):JGE al, bl ;al里的带符号内容大于或等于bl时跳转。

JLE 转移条件 (Jump if less or equal):JLE al, bl ;al里的带符号内容小于或等于属bl时跳转。

比较两个无符号数,高低用below或者above表示:

JBE/JNA(jump if below or equal,or not above)比较结果为<=时转移

JBE/JNA:CF = 1/ZF = 1 低于等于或者不高于跳转

JNBE/JA(jump if not below or equal,or above)

JNBE/JA:CF = 0 / ZF = 0 不低于等于/高于跳转

JL/JNGE:SF != OF 小于/不大于等于跳转

JNL/JGE:SF = OF 不小于/大于等于跳转

栈操作指令

PUSH:压栈指令,32位汇编首先ESP-4,留出一个空间,然后把要压入栈中的内容压入

POP:出栈指令,32位汇编首先将栈顶的数据弹出给指定的目标,然后ESP+4,清掉空间

在函数栈帧中,一般包含以下几类重要信息。
(1)局部变量:为函数局部变量开辟的内存空间。
(2)栈帧状态值:保存前栈帧的顶部和底部(实际上只保存前栈帧的底部,前栈帧的顶部
可以通过堆栈平衡计算得到),用于在本帧被弹出后恢复出上一个栈帧。
(3)函数返回地址:保存当前函数调用前的“断点”信息,也就是函数调用前的指令位置,
以便在函数返回时能够恢复到函数被调用前的代码区中继续执行指令。

函数调用

函数调用大致包括以下几个步骤。

(1)参数入栈:将参数从右向左依次压入系统栈中。
(2)返回地址入栈:将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继 续执行。
(3)代码区跳转:处理器从当前代码区跳转到被调用函数的入口处。
(4)栈帧调整:具体包括。
保存当前栈帧状态值,已备后面恢复本栈帧时使用(EBP 入栈);
将当前栈帧切换到新栈帧(将 ESP 值装入 EBP,更新栈帧底部);
给新栈帧分配空间(把 ESP 减去所需空间的大小,抬高栈顶);
对于__stdcall 调用约定,函数调用时用到的指令序列大致如下

;func(a,b,c)
;假设该函数有 3 个参数,将从右向左依次入栈  

push 参数 c 
push 参数 b 
push 参数 a 
call 函数地址

;call 指令将同时完成两项工作:
;1)向栈中压入当前指令在内存中的位置,即保存返回地址。
;2)跳转到所调用函数的入口地址函数入口处

;下面是进入函数call之后:
push ebp 
;保存旧栈帧的底部
mov ebp,esp 
;设置新栈帧的底部(栈帧切换)
sub esp,xxx 
;设置新栈帧的顶部(抬高栈顶,为新栈帧开辟空间)

函数返回的步骤如下

三步:

(1)保存返回值:通常将函数的返回值保存在寄存器 EAX 中。

(2)弹出当前栈帧,恢复上一个栈帧。

具体包括: 

在堆栈平衡的基础上,给 ESP 加上栈帧的大小,降低栈顶,回收当前栈帧的空间。 

将当前栈帧底部保存的前栈帧 EBP 值弹入 EBP 寄存器,恢复出上一个栈帧。 

将函数返回地址弹给 EIP 寄存器。

(3)跳转:按照函数返回地址跳回母函数中继续执行。

理解图示:

image-20200527161222527

汇编练习,弹个框框

基础知识----汇编代码结构

.586    代表指令集
.MODEL flat,stdcall    调用约定 内存 常用win32        


includelib  user32.lib


.data  已经定义数据段 可读可写
.data?  未定义的数据段 可读可写
.code	 代码段
.const  常量数据段
.stack  堆栈段 自动分配 可读可写可执行

.data
Number DWORD 0
.586
.MODEL flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib

.data
text db "zeo",0

.code
main proc
	INVOKE MessageBox,0,offset text,0,0
	INVOKE ExitProcess,0
main ENDP
END main

image-20200513234048034

格式化输入输出(printf scanf)

.586
.MODEL flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc
include msvcrt.inc

includelib user32.lib
includelib kernel32.lib
includelib msvcrt.lib
 
.data
text db "zeo",0
Hello db "HelleWord!",0
szformat db "%s",0

.code
main proc
	lea eax,Hello
	push eax
	push offset szformat
	call crt_scanf
	add esp,8
	push offset Hello
	;push offset szformat
	call crt_printf
	add esp,4
	call ExitProcess
	add esp,4
main ENDP
END main

《CTF特训营》——PWN:二进制安全基础 即DEP,是进制程序在非可执行的内存区中执行指令。在80x86体系中,操作系统的内存管理是通过页面表存储方式来实现,其最后一位就是NX位,0表示允许执行,1表示禁止执行。NX一般是防止直接在堆和栈上运行shellcode代码,gcc默认开启不可执行栈功能,添加编译选项z -exestack可开启栈可执行功能。... 阅读详情

相关推荐

告别机载网络通信混乱:利用ARINC825的LCC与带宽管理机制构建高可靠CAN总线

本文深入探讨了ARINC825规范如何通过逻辑通信通道(LCC)和带宽管理机制解决机载CAN总线通信的混乱问题。文章详细解析了ARINC825的核心架构设计、LCC工程实现、时间触发带宽管理等关键技术,展示了其在提升航空电子系统可靠性和实时性方面的显著效果,为现代飞机通信系统提供了高可靠解决方案。

weixin_26878995的博客 241

ctf从零开始学 0x1:Windows下的二进制安全学习路线

本文作者:rkvir(二进制小组组长) 转自某推文,链接找不到了。 一. 什么是二进制安全 在很久以前安全圈并没有把安全技术做出一个特别清晰的分类。在大部分人眼里,所谓的黑客,安全研究者指的就是研究渗透入侵一类的技术的从业者,并不知道什么是逆向工程或者说二进制安全。提起逆向工程也许还有人可以联想到软件破解,如果提起的是二进制安全,那么知道的人就真的是寥寥无几了。实际上二进制安全技术在20世纪90年...

爱党人士 9735

通过Jlink和PyLink读取蓝牙mac地址--Nordic&silicon labs

本文介绍在不开机的情况下读取蓝牙的mac地址,这里介绍两个平台,Nordic和Silicon Labs。 1. 通过Jlink Commander工具连接上目标板 选择当前芯片的型号 2. 使用mem命令查看mac地址 首先需要知道mac地址存储在芯片的哪个地址。 Nordic: 寄存器DEVICEADDRTYPE的第一个bit代表mac地址的类型,这里为1。DEVICEADDR[0]和DEVICEADDR[1]的低16bit代表了MAC地址,其中DEVICEADDR[1]的第15位应该或上DE

ching的专栏 1650

二进制安全是什么?

【权威解释】 wiki:A binary-safe function is one that treats its input as a raw stream of bytes and ignores every textual aspect it may have. The term is mainly used in the PHP programming language to descri...

猫玛尼的技术之路 1万+

STM32控制气泵和电磁阀实现

2、mos管的选型:mos管选择主要注意两个参数即可,一是导通的电流,二是耐压值,并且常用NMOS管,根据要求,气泵和电磁阀供电电压为12V,所以选择的mos管耐压值要大于12V,这里选用耐压值为30V的MOS管,并且导通电流为5.8A,如下图。1、气泵和电磁阀的开和关均为开关量,实现控制方法有多种,比如继电器,但是继电器动作有噪声且体积较大,更好的方法为使用mos管。使用STM32控制气泵和电磁阀的开和关,气泵和电磁阀的供电电压为12V。最终实现单片机控制气泵和电磁阀的开和关。

jacklood的博客 1万+

【单点登录】SSO单点登录sa-token接入流程详解

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。

Hello, New World! 1788

二进制安全

有很多函数都说明是二进制安全的,那么什么是二进制安全的呢?  在网上搜索了一下,有一种说法是:  【TechTarget中国原创】二进制安全功能(binary-safe function)是指在一个二进制文件上所执行的不更改文件内容的功能或者操作。这能够保证文件不会因为某些操作而遭到损坏。二进制数据是按照一串0和1的形式编码的。而绝大多数的程序会给某些特殊的比特串赋予不同的格式代码,所以当用户使用

it_man的专栏 3720

华为OD机试真题 新系统 2026-04-26 Python&JS 实现【最大化游戏试玩资格分发】

新研发了一台游戏设备可以面向用户接受试玩。现有 n 个试玩申请,每个试玩有开始时间和结束时间。作为协调员,为了能让更多人体验到游戏,你需要对试玩申请进行选择,使得:

MISAYAONE的博客 289

探索二进制安全与汇编基础:构建安全世界的基石

二进制安全主要关注计算机系统中二进制数据的处理、存储和传输过程中的安全性。在计算机内部,所有的信息最终都以二进制形式表示,包括程序代码、数据文件、网络数据包等。二进制安全旨在确保这些二进制数据不被非法篡改、泄露或利用,以保护计算机系统和用户的隐私与资产安全。例如,在操作系统中,内核代码和数据以二进制形式存储在内存中。如果一个恶意程序能够突破系统的防护机制,对内核二进制数据进行非法修改,就可能导致系统崩溃、权限提升甚至完全被控制。

m0_57836225的博客 1007

caverdock如何使用,一文给你多方案教学!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1384

【OpenClaw从入门到精通】命令行操作指南——TUI模式高效管理OpenClaw(2026避坑版)

本文将详细介绍OpenClaw的命令行操作,重点介绍TUI(Text User Interface)模式的高效使用方法,以及在实际使用中需要避免的常见陷阱。通过本文的学习,你将掌握OpenClaw命令行的精髓,提升工作效率。

一键难忘的博客 1691

二进制安全-汇编语言-01-基础知识

主要参考王爽著《汇编语言》​ 汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。其实仅从课程关系的角度讨论汇编语言的重要性未免片面,概括地说,如果你想从事计算机科学方面的工作的话,汇编语言的基础是必不可缺的。原因很简单,我们的工作平台、研究对象都是机器,汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列。想深入研究英国文化,不会英语行吗?充分获得底层编程的体验深刻理解机器运行程序的机理这两个目的达到了,其他目的也就自然而然地达到了。

m0_52505633的博客 837

Android15 修改触摸点上限为40

把MAX_POINTER_ID从默认的31修改为39,这里为什么要从31修改为39,是因为上面说明用BitSet32极限就只能支持32个点,因为从最小的ID是0,所以要支持40个点ID也要对应改为39.最近有个需求,需要修改Android系统的触摸点数,Android系统默认的点数是16个点,因为现在是大屏项目,有客户需要修改为40个点,好吧,客户最大。6.最后进行编译,开机开启触摸点检测,可以使用开发者模式中的显示触摸点功能,再叫上3个人,用双掌触摸屏幕,发现左上角有显示40个触摸点,修改成功。

tzj1058756809的博客 573

【二进制基础篇-1】汇编基础

掌握汇编语言的目的是能够深入理解计算机系统的底层原理,在提高程序设计能力的同时也为二进制安全打下坚实的基础。 对于二进制领域来说,无论是逆向工程、漏洞挖掘、加解密等等都需要以精通汇编语言为首要条件,才可以做到对二进制相关技术的深入理解、深入学习,从而更好的掌握二进制安全相关的技能。 1.CPU指令集 1.1 CPU的作用 计算机系统中的CPU只能执行由机器指令组成的程序。一般我们使用的高级语言都是通过相应的编译器,将高级语言编写的代码编译成由机器指令组成的可以被CPU执行的程序,即目标代码。目标代码

行者月明的博客 4027

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

硬核二进制安全:汇编语言快速入门底层语言基础

X86 Register: General-Purpose Register 16-bit:AX,BX,CX,DX 32-bit: EAX(Accumulator)累加寄存器 EBX(Base Register)基地址寄存器 ECX(Count Register)计数寄存器 EDX(Data Register)数据寄存器 EBP(Base Pointer)堆栈寄存器 EDI(Index Register)变址寄存器 ESP(Stack Pointer)堆栈顶指针 CS——(Code Segment Reg

「鸿渐之翼」的博客 552

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

分布式缓存Redis之二进制安全

写在前面  本学习教程所有示例代码见GitHub:https://github.com/selfconzrr/Redis_Learning什么是二进制安全?Redis的String为什么是二进制安全的?维基百科:  Binary-safe is a computer programming term mainly used in connection with string manipulating

ZhangRui的博客 8191

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

新手入门二进制安全和网络渗透,该选哪个比较好?

大家好我是周杰伦 1-方向选择 最近,有很多粉丝都不约而同的问到了我一个问题:二进制安全和网络渗透,怎么选? 今天这篇文章,就是尝试解答这个问题,希望对大家选择方向上有所帮助。 首先先来理清楚,这两个方向分别是干嘛的。 一般来说,二进制安全方向,主要是做逆向分析、漏洞挖掘与Exploit、内核安全、破解等工作。 网络渗透主要是Web安全、内网渗透、漏洞扫描与利用、安全审计、日志分析等工作。 简单来说,二进制方向,经常打交道的是软件、程序、指令、调试器、操作系统等东西;网络渗透方向,经常打交道的是服务器、漏.

MachineGunJoe666 1865

内部二进制网络安全学习路线(建议收藏)

1.踏实的基础。基础是很重要的,可以通过计算机体系结构来学习,当然肯定不只是计算机体系结构,还有很多的知识。计算机科学系统基础知识的积累和沉淀,提升自己的计算机科学素养,理解计算机的工作原理。2.过语言关–反汇编能力,将对应的反汇编代码推出对应的C语言结构。C、ASM、Python依然是必学的语言,在学的过程中,对逆向工程有利的就是将C和ASM结合起来学,写完C代码,立即调试看对应的反汇编代码,脑海中浮现对应的C结构。还可以试着自己重新用汇编代码写出来。

Karka_的博客 1098

二进制安全基本常识

BSS段: BSS段(bss segment)通常是指用来存放程序中未初始化的或者初始值为0的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。 bss段也叫(全局变量段)的特点是可读可写可执行,由于bss段具有该特点,有时候利用可以将程序的执行流劫持到bss段上,来执行我们的shellcode 数据段: 数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。 代码段: 代码段(co

半岛铁盒的博客 1071

二进制安全之木马程序简介

当作(计算机会把不同的程序作为什么类型的文件和不同的方式来进行执行) 文件头的作用: 告诉系统,把下面的二进制代码,当作什么来执行!!!! 操作系统为了方便用户使用,使用后缀名这个机制: .exe .dll .jpg .jpeg .png .avi .mp3 .mp4.... 逆向工程工具:C32 协议: 李老师协议: 协议头001100->内容1->结束语1111 001100 xxxxxxxxx xxxx xxxx xxxxx 1111 0101110101

weixin_51339377的博客 1301

二进制安全:守护程序“最底层”的安全防线

二进制安全是CTF竞赛中PWN攻防的核心技术,聚焦程序底层的二进制机器码漏洞防护。文章解析了二进制安全的核心概念,包括内存操作漏洞(缓冲区溢出、UAF)、控制流劫持(ROP攻击)和输入验证缺失等关键问题。通过对比应用层安全和网络安全,阐述了二进制安全独有的底层特性。文章还介绍了漏洞挖掘、恶意软件分析和程序加固三大实战场景,以及静态分析、动态分析和模糊测试等核心技术手段,强调其在防御未知攻击、保护关键系统和对抗黑产方面的重要价值。最后提醒读者仅限合法授权范围内使用相关技术。

fearhacker的专栏 1217

零基础入门二进制安全和网络渗透,该选哪个比较好?

零基础入门二进制安全和网络渗透,该选哪个比较好?

z099164的博客 576

【二进制安全】PWN基础入门大全(非常详细),零基础入门到精通,看这一篇就够了

【二进制安全】PWN基础入门大全(非常详细),零基础入门到精通,看这一篇就够了

分享Python知识 2332

安全见闻-二进制与网络安全的关系

二进制安全是指在处理二进制数据时,确保数据的完整性、保密性和可用性,防止恶意攻击和数据篡改。

qq_56677667的博客 1044

# 渗透测试#安全见闻9 二进制安全

模糊测试通过其广泛覆盖、未知输入、快速发现、自动化和应对多样性等特点,协助软件开发者及早发现未知的漏洞,使开发者能够在恶意攻击之前对软件进行安全修复,从而提高软件的安全性,构建可靠的安全屏障,减少软件对用户或企业的损害和风险。逆向工程可以应用于发现程序中的漏洞、检测恶意代码、分析加密算法、理解黑盒设备的工作原理等情况,但逆向工程并不是二进制安全的子集,逆向工程下细分的领域如病毒分析、软件加固等不属于二进制安全。它支持多种架构的二进制文件分析,并提供了丰富的插件和脚本接口,可以进行高级的二进制分析。

soc的博客 1626
上一篇: Linux 内网本机信息收集 速查 checklist
下一篇: 内网中CobaltStrike4.0(CS4)的渗透之旅
god_Zeo
博客等级 码龄8年 353粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值