工具篇·x64dbg
x64dbg 搜索字符串 F7单步步入(进函数) F8单步步过 内存窗口中转到地址
工具篇·pwntools
大致框架简例#简单样例from pwn import *context(arch = 'i386', os = 'linux')r = remote('exploitme.example.com', 31337)###### EXPLOIT CODE IS HEREr.send(asm(shellcraft.sh())) r.interactive() 详解from pwn import * #用来导入pwntools模块----context(arch = 'i386', os = 'linux') #设置目标机的信息----r = remote('exploitme.example.com', 31337) #用来建立一个远程连接,url或者ip作为地址,然后指明端口r = process("./test") #这里也可以仅仅使用本地文件,调试时方便,test即为文件名,这使得改变远程和本地十分方便.----asm(shellcraft...
PWN入门-栈溢出
缓冲区溢出之栈溢出(strcpy)预备知识缓冲区溢出简单介绍缓冲区溢出:简单的说,缓冲区溢出就是超长的数据向小缓冲区复制,导致数据超出了小缓冲区,导致缓冲区其他的数据遭到破坏,这就是缓冲区溢出。而栈溢出是缓冲区溢出的一种,也是最常见的。只不过栈溢出发生在栈,堆溢出发生在堆,其实都是一样的。 栈的简单介绍栈是一种计算机系统中的数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来),是一种特殊的线性表。栈的操作常用的有进栈(PUSH),出栈(POP),还有常用的标识栈顶和栈底。 进栈(PUSH):将一个数据放入栈里叫进栈(PUSH) 出栈(POP):将一个数据从栈里取出叫出栈(POP) 栈顶:常用寄存器ESP,ESP是栈指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。 栈底:常用寄存器EBP,EBP是基址指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。实例分析 源代码: #include<stdio.h>#include<...
工具篇·libc-database
libc-database在线网址 运行如下命令下载libc符号表与偏移文件。$ ./get # List categories$ ./get ubuntu debian # Download Ubuntu's and Debian's libc, old default behavior$ ./get all # Download all categories. Can take a while! 将自定义的 libc 添加到你的数据库中。$ ./add /usr/lib/libc-2.21.so 在数据库中查找所有具有给定名称和地址的 libc。只检查最后 12 位,因为随机化通常在页面大小级别上工作。$ ./find printf 260 puts f30archive-glibc (libc6_2.19-10ubuntu2_i386) 从泄漏的返回地址中查找 libc$ ./find __libc_start_main_ret a83ubuntu-trusty-i386-libc6 (libc6_2.19-0ubuntu6.6_i386)arch...
工具篇·IDA_Pro
前言笔者曾经用过 7.7(继承了来自学长55桑的诸多插件) 与 8.3,但都只是草草用过,近日沉迷于pwn之乐趣,使用频率大大增加,恰巧自己新提了全新款IDA Pro 9.0 SP1(似乎是首个不用使用者自己判断32位/64位的版本),深入了解后也被IDA的强大功能折服。遂从零开始记录使用笔记 常用快捷键空格键: 切换 文本视图 与 图表视图ESC: 返回上一个操作地址。(只有在反汇编窗口才是这个作用,如果是在其他窗口按下esc,会关闭该窗口)G: 直接跳转到某个地址N: 对符号重命名 Y: 更改变量的类型H: 转换16进制T: 解析结构体偏移 M: 转换为枚举类型常量冒号键: 常规注释分号键: 可重复注释。在反汇编后的界面中写下注释/ : 在反编译后伪代码的界面中写下注释\: 在反编译后伪代码的界面中隐藏/显示变量和函数的类型描述,有时候变量特别多的时候隐藏掉类型描述看起来会轻松很多Alt+M: 添加 标签Ctrl+M: 查看 标签ctrl+w: 保存 ida 数据库ctrl+shift+w:拍摄 IDA 快照Ctrl+S: 查看 段信息。选择某个数据段,直接进行跳转ctrl+...
工具篇·gdb
100个gdb小技巧 start:程序自动中断在main函数处c:继续运行 b main:main处下断点r/run:运行程序,遇到断点停下vmmap:查看内存映射,各加载文件的加载地址信息 -q:参数不显示欢迎信息等-n:不加载任何插件,使用原生 gdbinfo:后面跟上想要查看的信息,如函数信息 info functions b/breakpoint:设置断点del/delete breakpoints n:删除断点,n是断点编号,可用info breakpoints命令查看断点信息 start命令启动程序并停在开辟完主函数栈帧的地方c/continue:继续执行程序,遇到断点停下f/finish:结束程序 ni:单步步过,一步一步执行指令遇到函数调用时直接执行完整个函数si:单步步入,一步一步执行指令遇到函数调用时跳转到函数内部 checksec:查看程序的防护措施 pdisass/disassemble:查看当前函数帧的反汇编代码,前一个命令有高亮显示只是需要安装pwndbg插件,后面一个命令时gdb自带的命令无高亮显示 p/print:打印信息,如寄存器 p $ebp...
工具篇·Qemu
待填坑纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备
工具篇·Ghidra
待填坑
工具篇·z3约束求解器
z3库 下载z3库pip3 install z3-solver 基本变量类型整型(Int),实型(Real)和向量(BitVec) 整型 Int(name, ctx=None),创建一个整数变量,name是名字 Ints (names, ctx=None),创建多个整数变量,names是空格分隔名字 实数 real(name, ctx=None),创建一个实变量,name是名字 reals (names, ctx=None),创建多个实变量,names是空格分隔名字 realVal (val, ctx=None),创建一个实常量,有初始值,没名字。 向量BitVec(变量名,变量的大小(单位bit)) BitVec(name,bv,ctx=None),创建一个位向量,name是他的名字,bv表示大小 BitVecs(name,bv,ctx=None),创建一个有多变量的位向量,name是名字,bv表示大小 BitVecVal(val,bv,ctx=None),创建一个位向量,有初始值,没名字。 常用API 创建约束求解器 s = Solver()...
筑基篇·椭圆曲线
密码学学习笔记——筑基篇·卷五(椭圆曲线) 椭圆曲线 椭圆曲线(elliptic curve)定义:椭圆曲线是一条由方程$y^2=x^3+ax+b$给定的曲线,其中 $a,b\in F,char(F)\neq 2,3$,,并满足 $\Delta=4a^3+27b^2\neq0$ 。丢番图曲线:$y^2=x^3-x+9$ ($a=-1,b=9)$, ($x,y)\in\mathbb{Q}^2$ $\Delta\neq0$:非奇异(non-singular),光滑,$x^3+ax+b$无重根$\Delta=0$:奇异 (singular),不光滑,$x^3+ax+b$有重根(奇异点) 补充:有重根说明多项式和它的导数存在公共根 前两个叫结点(node),第三个叫尖点(cusp) 奇异点: 该点处曲线不可微分,即奇异点处无法作切线(切线值无定义) 只要椭圆曲线是奇异的,奇异点就一定在x轴上 当点的集合包含奇异点时无法构成群,因为奇异点处无法作切线,故讨论椭圆曲线时排除奇异的情况 奇异点到原点的距离是左根到原点的距离的一半 判别式: $\Delta<0$时: 图像有一个组...
