Hook专题1-inline hook
学一学 hook 专题,今天是 inline hook。
课堂笔记
hook概念
hook
就是钩子,是一种劫持技术,把原本执行的函数替换,替换为我自己的一个函数。当然在学
pwn 的时候,也有接触过 hook,就是 malloc_hook 和 free_hook。这些 hook
本意是为了开发者方便调试自己编写的 malloc 或者 free
函数去使用的,比如我自己写了一个 free 函数,我想测试一下性能,那我直接
**__free_hook=myfree** 就可以测试了,但是没想到就一直被打,直到 glibc
2.34 版本,这些 hook 被彻底删除。
inline hook的用法
inline
hook(内联钩子),是指在函数的代码当中的一个地方(一般是代码开头),写上跳转指令,跳转到我们执行的函数,跳转完成之后,为了保持函数正常运行我们可能会释放钩子(unhook),把程序放回原来的位置,或者是直接执行完自己的代码就结束。
无条件跳转指令编码
一般,无条件跳转指令编码为 E9 + 32位小端序整型(根据 %rip
寄存器寻址),比如 E ...
《windows系统编程》——线程基础与相关结构
跟着 rkvir 老师学学今天的知识,今天的课程是
《Windows系统编程》——线程基础与相关结构
课堂笔记
引入
线程(Thread)就是程序执行的基本单元,一般我们写的程序只有一个线程。
当两个事件之间相互没有关联,不会影响的情况下,我们可以采取多线程的方式去节省其空间。就好比小学三年级的课程,如何加速一个泡茶的过程,最主要就是烧水的时候我们大可不必傻傻的等水烧开,我们可以利用这个时间做别的事。
1234567891011121314#single thread#include<stdio.h>int main(){ for (size_t i = 0; i < 20000; i++) { printf("A execute for %d times\n", i); } for (size_t i = 0; i < 20000; i++) { printf("B execute for %d times\n&quo ...
《windows高级攻防》——C语言基础
C 并没有太陌生,只是 win C 还是让我感觉有点陌生的。
课堂笔记
C语言
优势
语法简洁,比低级语言更抽象级别更高。
可移植性强,跨平台能力较好。
用途广泛,Linux和Windows的内核均是 C 语言编写的。
可操作性强,通过指针可以任意操控内存。
C语言生成可执行文件的过程
源文件(.c)→目标文件(.obj)→通过链接器链接启动代码和库→可执行文件(.exe)
链接分静态链接和动态链接,静态链接会把库的代码一并写入可执行文件当中,而动态链接依赖于
runtime(运行时),也就是 dll。
VS的使用
VS2022在创建项目的时候并不能选择,可以先按照模板创建好之后,项目→属性→C/C++→预编译头中取消预编译头文件,然后删除它给的
pch.cpp,删除里面的所有代码,只留一个 main.cpp 即可。
在属性设置中,可以使用 Release/Debug 选择
发行/调试版,发行版一般优化更多,调试版一般会包含调试信息,方便调试。
在 项目→属性→C/C++→代码生成 当中的选项,运行库选择 MDd
表示动态链接,MTd 表 ...
《windows系统编程》——进程基础与相关结构
跟着 rkvir 老师学学今天的知识,今天的课程是
《Windows系统编程》——进程基础与相关结构
课堂笔记
系统管理进程所需的两个基本部分
一个管理用的内核对象(进程句柄)
一个包含代码数据的地址空间。
创建进程的实现
CreateProcess
说明
宏定义实现,根据字符集选择调用 CreateProcessA 或者是
CreateProcessW,实现了 ANSI
版本的创建和宽字符版的进程创建,返回一个进程句柄。
参数
lpApplicationName:想要执行的可执行文件的路径
lpCommand:命令行参数,可以传 NULL 表示没有参数
lpProcessAttributes:进程安全属性,传 NULL 表示默认
lpThreadAttributes:线程安全属性,传 NULL 表示默认
bInheritHandles:表示句柄是否可以被继承
dwCreationFlags:创建的新进程的标志
lpEnvironment:环境变量
lpCurrentDirectory:指定当前目录
lpStartInfo:指定 ...
RSA题目常见分析
最近驹宝给我塞了很多RSA的题,自己也做了很多,学下点 RSA
算法的精髓,写一篇总结,后续持续在这里更新。
RSA的介绍
RSA的介绍见我这篇博客
RSA常用做法分析
低指数攻击
我们知道,RSA的安全在于取模运算的不可逆特性,如果说我的信息本来就是
2,你的加密指数为 2,那么平方下来也就是个
4,取模之后就是取了个寂寞,根据所给公钥和密文,我们直接开个方就得到了明文。
模不互素
如果两个公钥模不互素,含有公约数的话,我们用辗转相除法可以很快分解出
p 和 q,而辗转相除法的时间复杂度不会超过
O(log2N),这优秀的复杂度也让我们能很快地分解得到两个质数。
例题
12345n1=2817099283427072083117926136947127459899770248769604983015633210686949460575600955341635936412312005850639368472161113439617525508524852081313828855000231838402472549575895246514317554846 ...
浙江省2022省赛write up
久违的题解来啦!!!
沙耶之歌战队
解题过程中,关键步骤不可省略,不可含糊其辞、一笔带过。
解题过程中如是自己编写的脚本,不可省略,不可截图(代码字体可以调小;而如果代码太
长,则贴关键代码函数)。
您队伍所有解出的题目都必须书写WRITEUP,缺少一个则视该WRITEUP无效,队伍成绩将无
效。
WRITEUP如过于简略和敷衍,导致无法形成逻辑链条推断出战队对题目有分析和解决的能
力,该WRITEUP可能被视为无效,队伍成绩将无效。
提交PDF版本即可
战队信息
战队名:沙耶之歌
排名:3
解题情况
所有题目的附件👇
Web
babysql
sqlmap一把梭,用个space2mssqlhash tamper即可。
ezphp
7.1.0
内置的随机数产生算法从
libc rand 函数改成»
梅森旋转伪随机数生成算法。
所以可以爆破。
12345678910111213141516171819202122232425262728<?phpmt_srand( ...
CS:APP第三章复习
咕了有点久了,赶紧把新的章节预习完,捡出重点知识写一写文章。
程序的机器级表示
历史观点
Intel 系列处理器俗称
x86,经历了一系列的发展变化,从最初的四位,到16位微处理器 8086,32位的
i386 以及64位的 x86-64。
摩尔定律:芯片上的晶体管数量没过一年都会增长一倍,而事实正如所预料的这么发展,计算机科学的技术正以指数级的量级发展。
计算机只能够认识机器语言,只有机器语言能够直接被执行,如今的高级语言提供的抽象级别较高,较高的抽象级别可以提高工作效率,也能提高可靠性,在过渡到低级语言(汇编,机器语言)的时候编译器也能帮助我们发现程序的错误。虽然高级语言在各方面都能碾压低级语言,不论是在前面说的工作效率可靠性,还是可移植性方面。但是并不不是说我们就没有必要学习低级语言了,因为低级语言也由人为创建,也会产生漏洞,如果语言出现底层的逻辑漏洞,那么光从高级语言去查是永远不会查出结果的,这也是我们需要学习低级语言的原因。在了解了汇编语言,机器语言之后,你也会发现,计算机漏洞并不那么难以理解。
程序编码
比如有一个程序:test.c,我们用如下命令编译 ...
《加密与解密》的学习
最近好迷茫,所以又斥巨资买了一本充满力量的书,那就是看雪的《加密与解密》,也来彻底地玩一玩逆向吧。
Windows操作系统
曾经的我,认为 Linux
天下第一好用,(虽然现在我也那么认为)但是
windows作为受众很广的操作系统,很多 windows
的程序也是有必要去学习一下的。
win32API
当今大部分 windows 程序都是
GUI,GUI 是通过一系列 API
来完成的,具体帮助手册自行下载。
我们只需要知道一部分的,并且用到什么就学什么好了,比如常见的从控件中获取输入值,用接口
GetDlgItemTextA,弹窗反馈
MessageBoxA,当然这是比较常见的,具体调试的时候还得具体情况具体分析。
windows 程序运行比较依赖动态链接库(dll),可以理解为
Linux 下的 .so
文件。windows比较内核的三个动态链接库为
kernel(kernel32.dll):提供操作系统的核心服务。
user(user32.dll):提供用户输入和输出的接口。
GDI(GDI32.dll):提供图形设备接口。
这 ...
CVE-2021-3493复现
来复现一下这次的CVE-2021-3493
漏洞成因
该漏洞是通过创建一个虚拟环境,在虚拟环境当中通过某软件赋予某文件高权限,由于程序检查不严密,该权限逃逸到现实环境中也生效。
前置芝士
overlayfs :虚拟的,堆叠文件系统
capability:权限管理机制
namespace:一种命名空间
overlayfs
能把多个文件夹里的文件合并为到同一个文件夹当中,这么听起来这个文件系统好像挺鸡肋的,但是它支持了一个我们最喜欢用的软件:docker。docker里面分容器和镜像的概念,一个镜像可以派生出多个容器,跟虚拟机差不多,一个镜像可以创建多个虚拟机。容器分公有数据和私有数据,docker比虚拟机优势的一点就是docker中的公有数据所有容器共享,这样就能省磁盘空间,私有数据则可以各个容器独占,保证数据独立。docker的实现机制就是通过
overlayfs 文件系统实现的。
overlayfs
依赖并建立在其它的文件系统之上(例如ext4fs和xfs等等),并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行“合并”,然后向用户呈现。 ...
icpc数学基础
来学学数学啦。
数学基础
计算机科学与数学紧密相关,而在算法竞赛中尤其强调以数论、排列组合、概率期望、多项式为代表离散、具体的数学:其注重程序实现和现实问题,可以出现在几乎任何类别的题目中。
算法竞赛中的常见符号
以下摘自wiki
整除/同余理论常见符号
整除符号:\(x\mid y\),表示 \(x\) 整除 \(y\),即 \(x\) 是 \(y\) 的因数。
取模符号:\(x\bmod y\),表示 \(x\) 除以 \(y\) 得到的余数。
互质符号:\(x\perp y\),表示 \(x\),\(y\)
互质。
最大公约数:\(\gcd(x,y)\),在无混淆意义的时侯可以写作
\((x,y)\)。
最小公倍数:\(\operatorname{lcm}(x,y)\),在无混淆意义的时侯可以写作
\([x,y]\)。
数论函数常见符号
求和符号:\(\sum\)
符号,表示满足特定条件的数的和。举几个例子:
\(\sum_{i=1}^n i\) 表示 \(1+2+\dotsb+n\) 的和。其中 \(i\) 是一个变量,在求和符 ...