ret2csu
ret2csu原理利用x64下__libc_csu_init函数中的gadgets.(64位传参机制导致,但我们不会每次都精准找到每个寄存器对应的gadgets)
此函数对libc进行初始化,而一般的程序都会调用libc函数,则此函数一定存在.
什么是gadgets?gadgets是一段对寄存器进行操作的汇编指令,比如pop ebp;pop eax;每一条指令对应着一段地址将这些gadgets部署到栈中,__ sp指针指向某gadget时发现对应地址中是一条指令而不是一条数据后就会将该地址弹给 __ ip指针, __ip指针会执行该地址中存放的汇编指令,完成对寄存器的操作.(某一gadget-0x1a得到上一gadget)
实例(蒸米ROP)源码
123456789101112#include <stdio.h>#include <stdlib.h>#include <unistd.h>void vulnerable_function() { char buf[128]; read(STDIN_FILENO, buf, 512 ...
解密系列basic
解密系列[基础篇]
多字节存储顺序两种编码区别:**Big-Endian:**高位字节存入低地址,低位字节存入高地址,依次排列。**Little-Endian :**低位字节存入低地址,高位字节存入高地址,反序排列 多字节数据存放顺序与CPU有关。
微处理器中存放顺序有正序( Big-Endian)和逆序(Little-Endian) (也称大端存储和小端存储)之分。常见的Intel系列使用的编码方式属于Little-Endian类;某些RISC架构的CPU·OIBM6Power-PC等属于Big-Endian类。
补充:ASCII ( American Standard Code for InformationInterchange·美国信息互换标准代码) 0-256。Unicode字符编码的编码范围是︰0-65535·它包含三套编码方式如 :UTF-8·UTF-16和UTF-32·它和ASCII的关系为ASCII字符编码是Unicode字符编码的一部分。
Win API简介:Windows API就是windows应用程序接口,是针对microsoft window ...
荒诞
yub‘s blog向着彩虹海出发!
Hot Time Exercising Records
Hot Time Exercising RecordsCollection系统调用号
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051section .data msg db "Welcome_to_CTFshow_PWN", 0section .text global _start_start:; 立即寻址方式 mov eax, 11 ; 将11赋值给eax add eax, 114504 ; eax加上114504 sub eax, 1 ; eax减去1; 寄存器寻址方式 mov ebx, 0x36d ; 将0x36d赋值给ebx mov edx, ebx ; 将ebx的值赋值给edx; 直接寻址方式 mov ecx, [msg] ; 将msg的地址赋值给ecx; 寄存器间接寻址方式 mov esi ...
CSAPP阅读碎片
CSAPP阅读碎片预处理 编译 汇编(二进制文件 目标文件) 链接shell – 命令解释器(默认设置)
系统的硬件组成1.总线 – 各个部件中传递且携带信息字节的传送定长字节块[4/8](字 word)2.I/O设备 主板(I/O设备本身或系统的主印电路板上的芯片组)– 在I/O总线和I/O设备间传递消息【一个典型系统的硬件组成】
3.主存 –临时存放程序和程序处理数据的一组动态随机存取存储器(DRAM)芯片. 逻辑上存储器是每字节有唯一数组索引的线性字节数组4.处理器(读取并解释存放在主存里的二进制指令)(中央处理单元【CPU】)–解释(或执行)存储在主存中指令的引擎中央处理单元 处理器的核心是大小为一字节的存储设备–程序计数器PC 任何时刻PC都指向主存中的含指令地址的某条机器语言指令
处理器的指令集–描述每条机器代码指令的效果处理器的微体系结构–处理器实际是怎么实现的
程序经汇编后的机器指令最初存放在磁盘上,程序加载时被复制到主存,处理器运行程序时,指令从主存复制到处理器
高速缓存存储器(cache memory):作为暂时 ...