z3求解器
Z3z3有整型(Int),实型(Real)和向量(BitVec)。 先生成一个求解对象Solver solver.model()求解 BUUCTF-re-[GUET-CTF2019]re1234567891011121314151617181920212223242526272829303132333435363738394041from z3 import *s = Solver()a1 = [0]*32for i in range(32): a1[i] = Int('a1['+str(i)+']')s.add( 1629056 * a1[0] == 166163712 )s.add( 6771600 * a1[1] == 731332800 )s.add( 3682944 * a1[2] == 357245568 )s.add( 10431000 * a1[3] == 1074393000 )s.add( 3977328 * a1[4] == 489211344 )s.add( 5138336 * a1[5] ==...
第2章——物理层
感觉第一章包括了一些不太会考的知识点,物理层就简要一些吧,尽量向408考纲靠拢,主要还是依据书上的结构先复习一遍。 物理层的基本概念 物理层的协议也常称为物理层规程(procedure) 可以将物理层的主要任务描述为确定与传输媒体的接口有关的一些特性, 即:(1) 机械特性指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装装置等。平时常见的各种规格的接插件都有严格的标准化的规定。(2) 电气特性指明在接口电缆的各条线上出现的电压的范围。(3) 功能特性指明某条线上出现的某一电平的电压的意义。(4) 过程特性指明对千不同功能的各种可能事件的出现顺序。 物理层要完成传输方式的转换:并行传输(计算机内部)——>串行传输(通信线路)——>并行传输 源系统包含源点(源站,信源)和发送器(调制器)。 目的系统包含接收器(解调器)和终点(目的站,信宿)。 通信的目的是传送消息(message)。 数据(data)是运送消息的实体。...
第1章——概述
start计算机网络(简称为网络)由若干结点(node)和连接这些结点的链路(link)组成。 互联网具有两个重要基本特点,即连通性和共享(资源共享) 计算机网络发展的三个阶段 年份 阶段 1969年 从单个网络ARPANET向互联网发展的过程 1985年 是建成了三级结构的互联网NSFNET 1993年 逐渐形成了多层次的ISP结构的互联网。(主干ISP,地区ISP,本地ISP) 互联网交换点IXP 主要作用就是允许两个网络直接相连并交换分组, 而不需要再通过第三个网络来转发分组。 www20世纪90年代,由欧洲原子核研究组织CERN开发的万维网WWW (World Wide Web)被广泛使用在互联网上。 互联网标准Step1:互联网草案(Internet Draft) Step2: 建议标准( Proposed Standard) Step3:互联网标准(Internet Standard) Step 互联网草案(Internet Draft) 有效期6个月 建议标准( Proposed...
基础rop
ROPROP的全称为Return-oriented programming(返回导向编程) 栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。 checksec Arch程序架构信息,判断是64位还是32位,exp编写的时候是p64还是p32,是大端序还是小端序 RELRORELRO 是 “Relocation Read-Only” 的缩写,用于保护程序的全局偏移表 (GOT) 免受攻击。 StackStack-canary(金丝雀保护),用于检测栈溢出攻击。它是一个随机的值,被插入到栈帧中,并在函数返回时被检查。 NXNX enabled如果这个保护开启就是意味着栈中数据没有执行权限,如此一来,当攻击者在堆栈上部署自己的shellcode并触发时,智慧直接造成程序的崩溃,但是可以利用rop这种方法绕过 PIEPIE 是 “Position Independent Executable”...
红帽杯easyre
step1,通过字符串查找突破口,发现疑似base64加密的字符串,进入交叉引用查看主函数。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485int __fastcall main(int argc, const char **argv, const char **envp){ int result; // eax __int64 v4; // rax __int64 v5; // rax __int64 v6; // rax __int64 v7; // rax __int64 v8; // rax __int64 v9; // rax __int64 v10; // rax __int64 v11; // rax __int64 v12; // rax __int64...
canary_pie
canary_pieStack Canaries (取名自地下煤矿的金丝雀,因为它能比矿工更早地发现煤气泄漏,有预警的作用)是一种用于对抗栈溢出攻击的技术。 其原理是在的入口处,从fs/gs寄存器中取出一个4字节(eax)或者8字节(rax)的值存到栈上,当函数结束时会检查这个栈上的值是否和存进去的值一致。 Canary bypass的姿势格式化字符串绕过canany 通过格式化字符串读取canary的值 Canary爆破(针对有fork函数的程序) fork作用相当于自我复制,每一次复制出来的程序,内存布局都是一样的,当然canary值也一样。那我们就可以逐位爆破,如果程序崩溃了就说明这一位不对,如果程序正常就可以接着跑下一位,直到跑出正确的canary Stack smashing(故意触发canary_ssp leak)劫持_stack_chk_fail 修改got表中 stack chk fail函数的地址,在栈溢出后执行该函数,但由于该函数的地址被修改,所以程序会跳转到我们想要执行的地址
attacklab
Part I: Code Injection Attacks开冲!! level1 sub rsp,0x28说明缓冲区有0x28即40字节,我们只需在这之后加入touch1()函数的权限地址来提权。 gets()函数不会对输入大小进行检查,遇到\n0x0a结束字符串读取 touch1地址为0x4017c0 payload(注意不能填充0a),同时小端序要倒序存储(低地址存放数据低位,高地址存放数据高位) 12345600 00 00 00 00 00 00 00 #低地址00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00c0 17 40 00 00 00 00 00...
bomblab
bomblab开始愉快的拆除炸弹吧,(bushi) 通过这次实验可以基本掌握gdb的使用,这次使用了pwndgb插件 可以使用objdump查看反汇编程序,也可以在gdb里使用disassemble反汇编 超详细的wpCSAPP | Lab2-Bomb Lab 深入解析 - 知乎 (zhihu.com) pwndgb的基本指令 指令 效果 s 单步步入 n 单步步过 r 重新运行 c 继续运行 i b, i r 查看断点、寄存器 return 退出当前函数 search 114514 查找114514 b *0x114514 , b fun_name 在0x114514处下断点、在函数fun_name处下断点 delete ,delete 114514 删除所有断点,删除114514号断点 disassemble main 反汇编main函数 vmmap 显示进程的内存映射 cyclic 50 生成50个用来溢出的字符 cyclic -l 字符串 定位字符串再溢出字符的位置 p...
SWPUCTF 2021 新生赛-老鼠走迷宫
在看雪学苑看到了一题py逆向,正好最近在学习,遂拿来做。 题目链接https://pan.baidu.com/s/1Rq4lJmANHSL1EKk8AZxqDw?pwd=0422 首先拿到一个附件,没有后缀 将其拖入010Editor查看文件头,发现其为4D5A开头,为windowsPE文件的MS-DOS 头,将文件后缀修改为PE文件的可执行系列.exe ** 可以通过该文件图标特征判断该文件为PyInstaller打包的文件,也可以通过Exeinfo PE来查看文件提示,推荐查看 python打包的二进制文件反编译 - Hk_Mayfly - 博客园 (cnblogs.com)博客里也有一个pwn题 打开exe程序发现是一道迷宫题,flag是用wasd表示的最短路径的md5值。 反编译成py文件我们先把pyinstxtractor.py复制到exe文件同一目录,执行命令 1>python pyinstxtractor.py...
buuctf_wp1
IDAPRO 快捷键 功能 Esc 回到上一个位置 Enter 跳转到当前光标处的地址 - 折叠代码 + 展开代码 * 创建一个结构 Alt + A 手动定义一个数组 Alt + F 寻找直接引用的函数 Alt + G 跳转到特定的地址 Alt + T 搜索 Alt + X 重命名 Ctrl + G 快速跳转到指定地址 Ctrl + J 显示引用列表 Ctrl + K 显示 XREF 到选中的函数/数据 Ctrl + N 创建一个函数 Ctrl + Q 快速重命名 Ctrl + X 显示从选中的函数/数据的 XREF Ctrl + E 显示结构类型 Ctrl + R 手动定义一个数据结构 Ctrl + W 打开函数列表 Ctrl + D 以十进制显示当前值 Ctrl + B 以二进制显示当前值 Ctrl + H 以十六进制显示当前值 Space 在图形/文本视图中切换 shift + f12 打开字符串窗口 F5 转伪C代码 easyreExeinfo...