Linux ELF文件保护机制
Linux ELF文件的保护机制主要有四种:Canary、NX、PIE、RELRO 一、CanaryLinux Canary是一种用于检测缓冲区溢出漏洞的安全机制,它在函数返回值之前添加的一串随机数(不超过机器字长)(也叫做cookie),末位为/x00(提供了覆盖最后一字节输出泄露Canary的可能)。如果出现缓冲区溢出攻击,覆盖内容覆盖到Canary处,就会改变原本该处的数值。当程序执行到此处时,会检查Canary值是否跟开始的值一样,如果不一样,程序会崩溃,从而达到保护返回地址的目的。Canary的确切位置会因为系统不同和编译器而异,但通常存储在栈帧的底部,位于局部变量和函数的返回地址之间,以防止缓冲区溢出攻击。 二、NXNX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。 [!info]这里的“标识”,指的是内存页表项中的一个比特位。在x86架构中叫NX位;而ARM架构中叫XN 正常在栈溢出时通过跳转...
bss段、data段、text段、堆(heap)和栈(stack)
bss段 bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域 bss是英文Block Started by Symbol的简称 bss段属于静态内存分配 [!info] 静态内存分配与动态内存分配内存的静态分配和动态分配的区别主要是两个: 时间不同。静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候。 空间不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由函数malloc进行分配。不过栈的动态分配和堆不同,他的动态分配是由编译器进行释放,无需我们手工实现。(堆需要手动释放内存) 对于一个进程的内存空间而言,可以在逻辑上分成3个部份:代码区,静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和“堆(heap)”是两种不同的动态数据区,栈是一种线性结构,堆是一种链式结构。进程的每个线程都有私有的“栈”,所以每个线程虽然代码一样,但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量...
C函数调用过程原理及函数栈帧分析
在x86的计算机系统中,内存空间中的栈主要用于保存函数的参数,返回值,返回地址,本地变量等。一切的函数调用都要将不同的数据、地址压入或者弹出栈。因此,为了更好地理解函数的调用,我们需要先来看看栈是怎么工作的。 栈是什么?简单来说,栈是一种后进先出的数据结构。这种形式的数据结构正好满足我们调用函数的方式:父函数调用子函数,父函数在前,子函数在后;返回时,子函数先返回,父函数后返回。栈支持两种基本操作,push和pop。push将数据压入栈中,pop将栈中的数据弹出并存储到指定寄存器或者内存中。 两个重要的注意点: 栈的生长方向是从高地址到低地址的 pop操作后,栈中的数据并没有被清空,只是该数据我们无法直接访问 栈帧是什么栈帧,本质就是一种栈,只是这种栈专门用于保存函数调用过程中的各种信息(参数,返回地址,本地变量等)。栈帧有栈顶和栈底之分,其中栈顶的地址最低,栈底的地址最高,SP(栈指针)就是一直指向栈顶的。在x86-32bit中,我们用ebp指向栈底、用 esp指向栈顶。下面是一个栈帧的示意图: 一般来说,我们将ebp到esp之间区域作为栈帧。并不是整个栈空间...
滴水-PE
1. PE文件结构1.1 可执行文件可执行文件指的是可以由操作系统进行加载执行的文件 可执行文件结构: Windows平台:PE(Portable Executable)文件结构 Linux平台:ELF(Executable and Linking Format)文件结构 PE文件结构使用场景: 病毒与反病毒 外挂与反外挂 加壳与脱壳(保护与破解) 无源码修改功能、软件汉化等 1.2 如何识别PE文件 PE文件的特征(PE指纹)分别打开.exe、.dll、.sys等文件,观察特征前2个字节 不能仅仅通过文件的后缀名来认定PE文件 1.3 PE文件的整体结构 2. PE文件的两种状态2.1 主要结构体 DOS部分: IMAGE_DOS_HEADER结构:DOS MZ文件头,64 Byte DOS Stub:DOS块(IMAGE_DOS_HEADER结构的最后一个成员指向了PE头开始的位置,由此可以判断DOS块的大小) PE文件头: “PE”,0,0:PE文件头标志,4 Byte IMAGE_FILE_HEADER结构:PE文件表头,标准PE头,20 Byte IMA...
Z3-Solver
创建声明12345x = Int('x') #声明整数x = Real('x') #声明实数x = Bool('x') #声明布尔类型x = BitVec('x', 8) #声明位向量类型a, b, c = Reals('a b c') #批量声明 //Int类型无法使用& | ~计算 常用API1. 创建约束求解器1solver = Solver() 2. 添加约束条件1solver.add() 3. 判断解是否存在1if(solver.check() == sat) 4. 求解1print(solver.model())
Python
1. 字面量1.1 定义字面量:在代码中,被写下来的固定的值,称之为字面量 1.2 常用的值类型Python中常见的有6种值(数据)类型 类型 描述 说明 数字(Number) 整数(int) 10、-10 浮点数(float) 10.1、-10.1 复数(complex) 4+3j,以j结尾表示复数 布尔(bool) 表示逻辑,真(True–1)和假(False–0) 字符串(String) 描述文本的一种数据类型 字符串由任意数量的字符组成 列表(List) 有序的可变序列 Python中最常用的数据类型,可有序记录一堆数据 元组(Tuple) 有序的不可变序列 可有序记录一堆不可变的Python数据集合 集合(Set) 无序不重复集合 可无序记录一堆不重复的Python数据集合 字典(Dictionary) 无序Key-Value集合 可无序记录一堆Key-Value型的Python数据集合 12345print(10)print(10.1)print("字符串")# 这里括号内的内容也是字面量 1...
Day08-操作系统文件属性
1. 系统文件属性知识 文件属性概述:利用文件属性可以描述一个文件或目录特性,包含权限、类型、大小… 获取详细属性信息操作:ll -i 目标文件或stat 目标文件 文件属性组成部分:①139755②drwxr-xr-x③3④root root⑤4.0k⑥5月 8 16:19 ① inode节点编号:快速定位磁盘存储位置的索引编号 ② 文件类型及权限:常见类型有 d(目录)类型、l(链接)、-(普通文件) ③ 文件信息硬链接数:相当于查看文件数据的多个入口 //ln命令可以创建硬链接 ④ 文件属主用户信息(创建者和管理者)和文件属组用户信息(多个用户管理时,可以将多个用户划分进一个管理组中) ⑤ 文件占用磁盘大小信息:默认占用大小为字节(1024换算) B-KB-MB-GB-TB-PB-EB //ll -h可以输出换算后的大小 ⑥ 文件属性时间信息:访问时间 修改时间(数据内容被改动) 改变时间(文件属性发生变化) 2. 文件属性内容详述2.1 文件类型Linux系统不会根据扩展名区分文件类型,仅作标识作用//可以...
Day07-操作系统基础优化
0. 环境变量/别名功能全局配置和局部配置的冲突问题结论: 局部配置:~/.bash_profile优先于~/.bashrc 全局配置:/etc/bashrc优先于**/etc/profile** 局部变量设置优先于全局设置 PS:\ 转义字符,还原命令本身作用 1. 系统基础管理优化1.1 时间同步优化 实现时间同步: 修改设置好时区:timedatectl set-timezone Asia/Shanghai 同步时间: 手工同步:yum install -y ntpdate ntpdate ntp.aliyun.com 自动同步:timedatectl set-ntp 1 启用后还未同步则 systemctl start chronyd 观察Local time Time zone NTP enabled NTP synchronized是否正确 1.2 系统字符编码优化作用:避免系统字符出现乱码 localectl set-locale LANG=zh_CN.utf8 1.3...
Day06-系统信息介绍
1.系统重要文件信息1.1 配置系统环境变量有关的配置文件 变量:经常变化的数据信息 设置:abc=123 调用:echo $abc 作用:出现在代码/脚本文件中,为了更好地调整变化的信息 环境变量的定义:系统中已经设置好的变量,可以满足系统特殊功能需求env命令可以查看系统的所有环境变量 常见环境变量: $LANG – 语言 $PS1 – 提示符格式 $PATH – 可执行命令存放路径 cd - 的 - 本质上就是调用了环境变量**$OLDPWD** 环境变量与普通变量的不同: 环境变量都是有特殊功能需求的 环境变量都是默认设置的 环境变量设置对所有用户均生效 环境变量设置名称一般为大写 //windows中的环境变量也是这个功能,作用于cmd的命令 1.2 系统别名功能设置 格式:alias 别名='命令' 作用:简化命令操作 单alias命令可以查看已经设置好的别名 //系统会设置有默认的别名信息 [!note]man 命令 可以查看命令信息-i 提示操作 unalias 别名 ...
Day05-操作系统目录结构
0. 文件编辑时退出原因vim编辑流程: 从硬盘区域读取目标文件 将其调取到内存区域 创建一个目标文件的临时文件(.swp后缀) 进行编辑操作 :wq!后将临时文件覆盖原文件 将文件重新存回硬盘区域 [!note]文件在磁盘区域与内存区域之间转移的操作称为 IO操作 1. 文件编辑命令扩展1.1 echoecho多出现于命令文本中,作为代码作用 1.2 cat 查看文件内容:cat 目标文件 非交互式编辑或追加内容到文件尾部: cat >>目标文件<<EOF(任意字符) <<:标准输入符 EOF:开始标识符,文本输入时作为结束符 2. 文件查看命令信息扩展 more/less:表示一行一行/一页一页地查看 head:查看文件的前几行(默认前10行) head -n 查看文件前n行 tail:查看文件的后几行(默认后10行) tail -n 查看文件后n行 tail -f/tailf/tail -F 追踪文件信息的变化 3. 系统目录结构介绍3.1 系统目录结构对比 windows目录形式: 1c...
