《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", i); ...
《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:指定启动信息
lpProcessInformation:指定进程 ...
RSA题目常见分析
最近驹宝给我塞了很多RSA的题,自己也做了很多,学下点 RSA 算法的精髓,写一篇总结,后续持续在这里更新。
RSA的介绍RSA的介绍见我这篇博客
RSA常用做法分析低指数攻击我们知道,RSA的安全在于取模运算的不可逆特性,如果说我的信息本来就是 2,你的加密指数为 2,那么平方下来也就是个 4,取模之后就是取了个寂寞,根据所给公钥和密文,我们直接开个方就得到了明文。
模不互素如果两个公钥模不互素,含有公约数的话,我们用辗转相除法可以很快分解出 p 和 q,而辗转相除法的时间复杂度不会超过 O(log2N),这优秀的复杂度也让我们能很快地分解得到两个质数。
例题12345n1=28170992834270720831179261369471274598997702487696049830156332106869494605756009553416359364123120058506393684721611134396175255085248520813138288550002318384024725495758952465143175548462425605668727426820 ...
浙江省2022省赛write up
久违的题解来啦!!!
沙耶之歌战队
解题过程中,关键步骤不可省略,不可含糊其辞、一笔带过。
解题过程中如是自己编写的脚本,不可省略,不可截图(代码字体可以调小;而如果代码太 长,则贴关键代码函数)。
您队伍所有解出的题目都必须书写WRITEUP,缺少一个则视该WRITEUP无效,队伍成绩将无 效。
WRITEUP如过于简略和敷衍,导致无法形成逻辑链条推断出战队对题目有分析和解决的能 力,该WRITEUP可能被视为无效,队伍成绩将无效。
提交PDF版本即可
战队信息
战队名:沙耶之歌
排名:3
解题情况
所有题目的附件👇
Webbabysqlsqlmap一把梭,用个space2mssqlhash tamper即可。
ezphp
7.1.0
内置的随机数产生算法从 libc rand 函数改成 » 梅森旋转伪随机数生成算法。
所以可以爆破。
12345678910111213141516171819202122232425262728<?phpmt_srand(time() + 1);$cmd='ls+-al+./';#$cmd=' ...
CS:APP第三章复习
咕了有点久了,赶紧把新的章节预习完,捡出重点知识写一写文章。
程序的机器级表示历史观点Intel 系列处理器俗称 x86,经历了一系列的发展变化,从最初的四位,到16位微处理器 8086,32位的 i386 以及64位的 x86-64。
摩尔定律:芯片上的晶体管数量没过一年都会增长一倍,而事实正如所预料的这么发展,计算机科学的技术正以指数级的量级发展。
计算机只能够认识机器语言,只有机器语言能够直接被执行,如今的高级语言提供的抽象级别较高,较高的抽象级别可以提高工作效率,也能提高可靠性,在过渡到低级语言(汇编,机器语言)的时候编译器也能帮助我们发现程序的错误。虽然高级语言在各方面都能碾压低级语言,不论是在前面说的工作效率可靠性,还是可移植性方面。但是并不不是说我们就没有必要学习低级语言了,因为低级语言也由人为创建,也会产生漏洞,如果语言出现底层的逻辑漏洞,那么光从高级语言去查是永远不会查出结果的,这也是我们需要学习低级语言的原因。在了解了汇编语言,机器语言之后,你也会发现,计算机漏洞并不那么难以理解。
程序编码比如有一个程序:test.c,我们用如下命令编译:
1$gcc -g t ...
《加密与解密》的学习
最近好迷茫,所以又斥巨资买了一本充满力量的书,那就是看雪的《加密与解密》,也来彻底地玩一玩逆向吧。
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):提供图形设备接口。
这里需要注意一点,就是很多接口的后缀 A 或者 ...
CVE-2021-3493复现
来复现一下这次的CVE-2021-3493
漏洞成因该漏洞是通过创建一个虚拟环境,在虚拟环境当中通过某软件赋予某文件高权限,由于程序检查不严密,该权限逃逸到现实环境中也生效。
前置芝士overlayfs :虚拟的,堆叠文件系统
capability:权限管理机制
namespace:一种命名空间
overlayfs能把多个文件夹里的文件合并为到同一个文件夹当中,这么听起来这个文件系统好像挺鸡肋的,但是它支持了一个我们最喜欢用的软件:docker。docker里面分容器和镜像的概念,一个镜像可以派生出多个容器,跟虚拟机差不多,一个镜像可以创建多个虚拟机。容器分公有数据和私有数据,docker比虚拟机优势的一点就是docker中的公有数据所有容器共享,这样就能省磁盘空间,私有数据则可以各个容器独占,保证数据独立。docker的实现机制就是通过 overlayfs 文件系统实现的。
overlayfs 依赖并建立在其它的文件系统之上(例如ext4fs和xfs等等),并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行“合并”,然后向用户呈现。
其中lower d ...
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$ 是一个变量,在求和符号的意义下 $i$ 通常是 正整数或者非负整数(除非特殊说明)。这个式子的含义可以理解为,$i$ ...
“蔚来杯”2022牛客暑期多校训练营4题解
这把依然和 sigma 姐姐打这场多校。出了4题rank300多也还可以的,该罚坐的题还是罚坐,该做的也都做了。
D. Jobs (Easy Version)题目描述
题目分析这题就是说,有 $n$ 家公司,然后主人公有 $q$ 个朋友,每个公司有一定的职位,如果你至少符合一个公司的 $3Q(IQ,EQ,AQ)$ 要求,那么这家公司就会给你发 offer,然后问你这些朋友分别能拿多少 offer。这题防止读入量太大给你一个随机生成器去产生数据,最后还要求强制在线。
因为 3Q 的范围都比较小,然后当然我们就可以存一个最低的要求,因为我只用符合一个职位就可以了,我们最开始的想法是:开个数组:$dp[i][j][k][b]$ 表示第 $i$ 家公司 $IQ=j,EQ=k,AQ=b$ 能拿到多少职位。那么我们读入公司的职位要求然后先给当前点都 $+1$然后前缀以下,查询的时候只需要把相应的公司,3Q 输入下标查询是否为 0 即可,为 0 就说明没有 offer 嘛。
但是一算数据量发现编译器就阻拦住了,因此换一种思路,因为我们不需要知道一个人在一个公司能拿 ...