⭐黃昏茶會 - courses
type: channel
link: https://www.majo.im/index.php/category/courses/
description: 一些学习的课程，笔记等内容
items: learn-vim
items: introduction-to-stl
items: probability-and-statistics
items: linear-algebra
items: course | further-mathematics
items: course | 953-review
items: course | privacy-preserving-models-and-algorithms
items: course | cyber-security
items: course | software-security
items: courses | reverse-engineering

learn-vim
type: item
date: 2024-04-18T09:02:00+00:00
description: learn vimchapter 0:h :help cmd 查看具体命令，特别的如果想查看 insert 状态下某个命令，应该是 :h i_cmd:w 直接保存，但是 :w :write new_file_name.txt 会将其另存为一些指令并不需要记得很清楚，不记得了就 :h cmd，并且使用 tab 自动补全chapter 1当通过 vim file1 file2 打开多个文件时，使用 :buffer :b filex 来切换不同文件vim 支持打开文件后立即执行 cmd，例如 vim file +version 以及 vim +version file 则使用 vim 打开文件 file 后将自动执行 :version 指令；还可以使用 vim -c version file 来代替 + 号:substitue :s 用于替换文本，基本表达式如下：:[范围]s/被替换值（或正则表达式）/替换值/[flag]，后续第 12 章会有详细介绍打开多个窗口：vim -o5 file1 file2 用于打开 5 个水平分割的窗口，vim -O2 大写的用于打开 2 个垂直分割的窗口，打开窗口可以用鼠标点击来切换工作窗口在 unix 下可以通过 ctrl + z、:suspend、:stop 直接挂起当前 vim 编写进程，使用 fg 可以恢复该进程chapter 2接 4，输入 :buffers :ls :files 可以查看当前打开的所有 buffer，输入 :buffer filename 或 :buffer 文件对应编号num 可以打开对应文件，也可以使用快捷指令 :bp :bprevious 或者 :bn :bnext 快速切换上下文件；输入 :bdelete 来删除当前 buffer，如果指定了数字或者文件名则删除对应 buffervim 的 buffers 设计是为了一次性修改多个文件，可以通过 :wqall 来保存并退出所有 buffer:split 主要的作用是创建 windows，当已经打开了一个文件时，此时再 :split <filename> 即可将当前 terminal 分割成上下两个窗口，并在另一个窗口显示 filename 的内容，如果不指定文件名就是将当前 buffer 分割两个 windows，:vsplit 对应左右两个窗口crtl + w + H J K L，这里的 w 就是 windows，用于直觉地切换不同的窗口（但是由于自己设置了 ctrl + w 等于关闭当前终端，因此该方式对 vim 无效，但是对 gvim 有效），还可以选择通过 mouse 来切换窗口；ctrl + w [options]，v 打开一个新的垂直窗口、s 打开新的水平窗口、c 关闭当前窗口、o 关闭除了当前窗口以外所有的窗口:tabnew filename，就是新开一个选项卡并装载 filename，类似的还有：:tabclose 关闭当前 tab，:tabnext :tabpreview :tablast :tabfirst 下一个、前一个、最后一个、第一个 tab 选项卡；如果想让 vim 在启动时打开多个选项卡，则 vim -p file1 file2 file3chapter 3:edit filename 用于编辑文件，如果文件不存在，则会新建之，也可以 tab 自动列出所有文件然后选择之；:edit *.md，然后 tab 即可自动列出所有 .md 的文件供选择；:edit **/*.md 然后 tab 可以递归当前目录下所有文件找到这些 .md 文件；如果只是 :edit . 传入目录，则将启动 netrw，即 vim 自己的文件浏览器，然后可以选择目录和文件:find 指令主要用于根据 :set path? 所返回的路径进行查找，一般来说会引入特定的环境变量，例如引入 /usr/include 可以查找 c 编译器头文件目录，则执行 :find filename 后可以在这些目录下进行查找；添加新的 path 可以按照这个方法：:set path+=/path/want/to/add，在进行一些大的项目开发时，可以按照 :set path+=$PWD/** 的方法将整个项目的路径引入，这样在 find 时可以找到想要的文件了grep 查找内容，有两种方式：:vim :vimgrep 是 vim 内置的 grep，而 :grep 是外置的 grep，基本语法与 grep --help 的语法一致，即 grep /pattern/ filename，这样会打开一个 quickfix 窗口，主要有有以下命令: :copen :cclose :cnext :cpreviousvim 内置文件浏览器 netr…

introduction-to-stl
type: item
date: 2024-01-10T14:24:00+00:00
description: Introduction to SGI-STL大多数程序员在面对软件开发时，一直都没有一套公认的标准，例如使用的数据结构和算法规范，导致程序员大量时间花费在重复而无意义的劳动上。程序员应当被视作艺术家，他们应当熟练运用高级语言、汇编语言操纵计算机硬件，实现各种天马行空的想象。whatcpp 标准模板库，The C++ Standard Template Library（STL）被设计出来建立数据结构和算法的一套标准。stl 主要提供 6 大组件容器（containers）：各种数据结构，比如 vector、list、deque、set、map算法（algorithms）：各类算法，比如 sort、search、copy、erase迭代器（iterators）：简单来讲，迭代器提供了一种按顺序逐个访问某一集合的方法，不需要知道集合的具体数据结构，而由迭代器自发地将其获取仿函数（functors）：单个函数不能被直接拿去操作（例如对某个函数排序），仿函数就是一种在函数原有概念上魔改出的函数，这种函数可以被传递给 STL 算法，可以被排序、查找等适配器（adapters）：可用于对上述组件进行魔改，例如拿到一个迭代器，可以制作出一个迭代器适配器（iterator adapter）。原本迭代器是顺序迭代，则 iterator adapter 就可以被魔改成反向迭代、插入迭代等配置器（allocators），用于负责空间配置和管理，即分配堆内存（allocate heap memory）之类的如图 1-1 所示，container 通过 allocator 获取数据存储的空间，algorithm 通过 iterator 存储 container 中的内容，functor 结合 adapter 用于协助 algorithm 实现对 container 进行的各种操作（排序、求和什么的）STL 最初的版本由 Hewlett Packard Company 实现，后续所有 fork 版本都有对应的 HP license 声明。教材着重介绍的是 SGI STL 实现版本，该版本被 gcc 采用，其他的版本还有 P.J.Plauger、Rouge Wave 等，SGL STL 的各种头文件可以在 mingw32 的 include/c++ 目录下找到，主要分为以下几种cpp 标准规范下的 c 头文件，例如 cstdio、cstdlib、cstring 等cpp 标准库中不属于 stl 的文件，例如 stream、string 等stl 标准头文件，例如 vector、list、map 等hp 规范的 stl 头文件，例如 vector.h、deque.h 等sgi stl 文件，例如 stl_vector.h、stl_deque.h 等，教材将基于这些文件教予读者学习

probability-and-statistics
type: item
date: 2023-12-04T07:39:00+00:00
description: probability-and-statistics概率论与数理统计速记手册速记检验量条件检验统计量$H_{0}$$H_{1}$拒绝域置信区间$\mu$$\sigma$ 已知 . . $\mu$$\sigma$ 未知 . . $\sigma^{2}$$\mu$ 未知 . . 公式$A_{m}^{n}=\frac{m!}{(m-n)!}$，$C_{m}^{n}=\frac{A_{m}^{n}}{A_{n}^{n}}=\frac{m!}{(m-n)!n!}$随机事件和概率$p(A\cup{B})=p(A)+p(B)-p(A\cap{B})$$p(A-B)=p(A)-p(AB)=p(A\bar{B})$条件概率公式：$p(AB)=p(A|B)p(B)=p(B|A)p(A)$若 $\begin{equation}\left\{\begin{aligned}&p(A|B)=p(A)\\&p(B|A)=p(B)\end{aligned}\right.\end{equation}$，则 $p(AB)=p(A)p(B)$，$A$、$B$ 独立全概率公式，$p(A)=p(A|B_{1})p(B_{1})+p(A|B_{2})p(B_{2})+p(A|B_{3})p(B_{3})$贝叶斯公式，$p(B_{2}|A)=\frac{p(AB_{2})}{p(A)}=\frac{p(A|B_{2})p(B_{2})}{p(A|B_{1})p(B_{1})+p(A|B_{2})p(B_{2})+p(A|B_{3})p(B_{3})}$随机变量的独立性：若离散型随机变量 $X$、$Y$ 独立，则关于 $X$ 与 $Y$ 的联合分布律各行（列）成比例期望、方差、协方差期望；离散型，$EX=\Sigma_{i=1}^{+\infty}X_{i}\cdot{P\{X=x_{i}}\}$；连续型，$EX=\int_{-\infty}^{+\infty}x\cdot{f(x)}dx$方差：$DX=E(X^{2})-(EX)^{2}$期望与方差的性质期望方差$E(c)=c$$D(c)=0$$E(cX)=cEX$$D(cX)=c^{2}DX$$E(X\pm{Y})=EX\pm{EY}$$D(X\pm{Y})=DX+DY$，要求 $X$、$Y$ 独立$E(XY)=EX\cdot{EY}$，要求 $X$、$Y$ 独立 协方差（Covariance）；$Cov(X,Y)=E(XY)-EX\cdot{EY}$；$D(X\pm{Y})=DX+DY\pm{2Cov(X,Y)}$，显然当 $X$、$Y$ 独立时，$D(X\pm{Y})=DX+DY$相关系数；$\rho_{XY}=\frac{Cov(X,Y)}{\sqrt{DX}\sqrt{DY}}$若 $\rho_{XY}=0$，则称 $X$、$Y$ 不相关常用分布分布表示法分布律或概率密度数学期望方差0 - 1 分布 $P\{X=k\}=p^{k}(1-p)^{1-k}$，$k=0,1$$p$$p(1-p)$二项分布$X\sim{B(n,p)}$$P\{X=k\}=C_{n}^{k}p^{k}(1-p)^{1-k}$，$k=0,1,2,...,n$$np$$np(1-p)$泊松分布$X\sim{P(\lambda)}$$P\{X=k\}=\frac{\lambda^{k}e^{-\lambda}}{k!}$，$k=0,1,2,...$$\lambda$$\lambda$几何分布$X\sim{G(p)}$$P\{X=k\}=(1-p)^{k-1}p$，$k=1,2,...$$\frac{1}{p}$$\frac{1-p}{p^{2}}$超几何分布 $P\{X=k\}=\frac{C_{M}^{k}C_{N-M}^{n-k}}{C_{N}^{n}}$$\frac{nM}{N}$$\frac{nM}{N}(1-\frac{M}{N})(\frac{N-n}{N-1})$均匀分布$X\sim{U(a,b)}$$f(x)=\begin{equation}\left\{\begin{aligned}&\frac{1}{b-a}, &a<x<b\\&0,&others\end{aligned}\right.\end{equation}$$\frac{a+b}{2}$$\frac{(b-a)^2}{12}$指数分布$X\sim{E(\lambda)}$$f(x)=\begin{equation}\left\{\begin{aligned}&\lambda{e^{-\lambda{x}}}, &x>0\\&0,&x\leq0\end{aligned}\right.\end{equation}$$\frac{1}{\lambda}$$\frac{1}…

linear-algebra
type: item
date: 2023-11-29T11:54:00+00:00
description: 线性代数按照 301 要求的标准复习快速记忆行列式余子式 $M_{ij}=\underline{\hspace{3em}}$，代数余子式 $A_{ij}=\underline{\hspace{3em}}$，行列式的值 $|A|=\underline{\hspace{3em}}$行列式的转置 $\begin{vmatrix}1&2&3\\4&5&6\\7&8&9\\\end{vmatrix}^{-1}=\underline{\hspace{3em}}$，值改变吗？$\underline{\hspace{3em}}$；行列式中任意两行交换 $\begin{vmatrix}1&2\\3&4\end{vmatrix}=\underline{\hspace{3em}}$；行列式中有任意两行相同 $\begin{vmatrix}1&2\\1&2\end{vmatrix}=\underline{\hspace{3em}}$行列式的数乘 $2\begin{vmatrix}1&2\\3&4\end{vmatrix}=\underline{\hspace{3em}}=\underline{\hspace{3em}}=\underline{\hspace{3em}}=\underline{\hspace{3em}}$；推论：行列式中任意两行成比例 $\begin{vmatrix}1&2\\2&4\end{vmatrix}=\underline{\hspace{3em}}=\underline{\hspace{3em}}$行列式的加减 $\begin{vmatrix}1+2&3+4\\5&6\end{vmatrix}=\underline{\hspace{3em}}\stackrel{交换律}{=}\underline{\hspace{3em}}$行列式中某行的倍数与加减 $\begin{vmatrix}1&2\\3&4\end{vmatrix}\stackrel{r_{2}-3r_{1}}{=}\underline{\hspace{3em}}$矩阵矩阵的加法：两个矩阵的形状相同时，$\begin{pmatrix}1&2\\3&4\end{pmatrix}+\begin{pmatrix}5&6\\7&8\end{pmatrix}=\underline{\hspace{3em}}$矩阵的数乘：$2\begin{pmatrix}1&2\\3&4\end{pmatrix}=\underline{\hspace{3em}}$，注意和行列式的数乘区分开矩阵的乘法：$m\times s$ 形状的矩阵乘以 $s\times n$ 形状的矩阵，得到 $\underline{\hspace{3em}}$ 形状的矩阵，表示为 $(m\times s)\cdot(s\times n)=\underline{\hspace{3em}}$；所得矩阵中第 $a_{ij}$ 的值由 $i$ 行和 $j$ 列对应元素相乘再累加；矩阵的乘法有交换律吗？（即 $AB \underline{\hspace{1em}}BA$）分块矩阵分块矩阵 $A=\begin{vmatrix}A&*\\O&B\\\end{vmatrix}$，其中 $A$ 矩阵是 $m$ 阶、$B$ 矩阵是 $n$ 阶的，$*$ 表示任意矩阵，$O$ 表示零矩阵，有以下结论$\begin{vmatrix}A&{*}\\O&B\\\end{vmatrix} = \begin{vmatrix}A&O\\{*}&B\\\end{vmatrix} = \underline{\hspace{3em}}$，$\begin{vmatrix}{*}&A\\B&O\\\end{vmatrix} = \begin{vmatrix}O&A\\B&{*}\\\end{vmatrix} = \underline{\hspace{3em}}$$\begin{pmatrix}A&O\\O&B\\\end{pmatrix}^{n}=\underline{\hspace{3em}}$$\begin{pmatrix}A&O\\O&B\\\end{pmatrix}^{-1}=\underline{\hspace{3em}}$，$\begin{pmatrix}O&A\\B&O\\\end{pmatrix}^{-1}=\underline{\hspace{3em}}$$\begin{pmatrix}\lambda_{1}&O&O\\O&\lambda_{2}&O\\O&O&\lambda_{3}\end{pmatrix}^{-1}=\underline{\hspace{3em}}$，$\begin{pmatrix}\lambda_{1}&O&O\\O&\lamb…

course | further-mathematics
type: item
date: 2023-11-29T03:03:00+00:00
description: 高等数学按照 301 标准的复习快速记忆泰勒展开与等价无穷小$\sin{x}=\underline{\hspace{3em}}=\underline{\hspace{3em}}$，$\arcsin{x}=\underline{\hspace{3em}}$，$\tan{x}=\underline{\hspace{3em}}$，$\arctan{x}=\underline{\hspace{3em}}$，$\cos{x}=\underline{\hspace{3em}}=\underline{\hspace{3em}}$$\frac{1}{1-x}=\underline{\hspace{3em}}$，$\frac{1}{1+x}=\underline{\hspace{3em}}$，$e^{x}=\underline{\hspace{3em}}=\underline{\hspace{3em}}$，$\ln{(1+x)}=\underline{\hspace{3em}}=\underline{\hspace{3em}}$，$(1+x)^{\mu}=\underline{\hspace{3em}}$$f(x_{0})=\underline{\hspace{3em}}$常用积分$\int{k}dx=\underline{\hspace{3em}}$，$\int{x^{\mu}}dx=\underline{\hspace{3em}}$，$\int{\frac{1}{x}}dx=\underline{\hspace{3em}}$，$\int{a^{x}}dx=\underline{\hspace{3em}}$，$\int{e^{x}}dx=\underline{\hspace{3em}}$$\int{\frac{1}{1+x^{2}}}dx=\underline{\hspace{3em}}$，$\int{\frac{1}{\sqrt{1-x^{2}}}}dx=\underline{\hspace{3em}}$$\int{\sin{x}}dx=\underline{\hspace{3em}}$，$\int{\cos{x}}dx=\underline{\hspace{3em}}$，$\int{\sec^{2}{x}}dx=\underline{\hspace{3em}}$，$\int{\csc^{2}{x}}dx=\underline{\hspace{3em}}$$\int{\sec{x}}dx=\underline{\hspace{3em}}$，$\int{\csc{x}}dx=\underline{\hspace{3em}}$，$\int{\sec{x}\tan{x}}dx=\underline{\hspace{3em}}$，$\int{\csc{x}\cot{x}}dx=\underline{\hspace{3em}}$去根式转换（记得变限）：令 $\varphi^{2}(x)=\underline{\hspace{3em}}$，则 $\sqrt{\alpha^{2}-\varphi^{2}(x)}=\underline{\hspace{3em}}$令 $\varphi^{2}(x)=\underline{\hspace{3em}}$，则 $\sqrt{\alpha^{2}+\varphi^{2}(x)}=\underline{\hspace{3em}}$令 $\varphi^{2}(x)=\underline{\hspace{3em}}$，则 $\sqrt{\varphi^{2}(x)-\alpha^{2}}=\underline{\hspace{3em}}$例题

course | 953-review
type: item
date: 2023-11-28T12:10:00+00:00
description: data structure选择题汇总广义表 head tailhead 取表头的 原子 or 表tail 取尾部的 表，且必须加 ()，tail 会把除了头以外所有组成一个表取完广义表的深度，长度树树转二叉树、逆过程；参考树转森林完全二叉树；参考前中后序遍历、层次遍历已知 前序 + 中序 或者 后序 + 中序，就可以唯一确认一颗二叉树层次遍历；从根节点开始，逐层遍历，从左往右遍历二叉排序树：概念，作用；使用中序遍历就能获取从小到大的数据排序线索二叉树，参考二叉树的算法表示树转森林的方法；从 root 开始，子树的右边拆掉，直接连接到当前根最优二叉树、哈夫曼树，参考给权 {5 6 7 8 15}；构造：每次都取最小的两个，合成最大的，不能计算合成的数，构造哈夫曼树时，先排序，全部放到最底端，然后连线，最后可以再优化着画，这样方便计算层数WPL：由各点的带权值之和，权值乘频率的累积前缀编码平衡二叉树；平衡二叉树左右深度差不高于 1；平衡二叉树一定是二叉排序树124 个叶子节点，问节点最多有多少；124 个叶子，表示有 124 - 2 个分支（有一个是 root 没有父节点），所以总共有 124 + 123 个节点，最后一个节点可以有 0/1 个节点，故最多 124 + 123 + 1 = 248 个有 n 个结点的二叉树采用二叉链表存储；空指针有 2n-(n-1)=n+1 个；其中的 n-1 是分支的个数，2n 是总共指针域的个数（每个结点左右两个指针域）；参考度为 4 的树 T，求 T 的叶子数；树的结点数 = 边数 + 1 = 4+4+3+4 + 1 = 16，叶子数 = 结点数 - 度不为 0 的结点数量 = 16 - 4-2-1-1 = 8；参考一颗完全二叉树第 6 层有 8 个叶结点，求完全二叉树结点最多个数；前 6 层满有 2^n-1=63，第七层有 2^(n-1)=64，缺少 2*8=16个，故最终有 63 + 64 - 16 = 111 个线性表二分查找；要求必须有序；画出折半查找过程的判定树计算 ASL 失败 和 ASL 成功线性表的岗哨模式；遍历算法BFS，广度优先，队列DFS，深度优先，栈图G<V,E>，顶点 V（vertex），边 E（edge），参考无向图、有向图带权不带权带权有向图：AOE 网，关键路径：路径长度最长的路径；由于在 AOE 网中有些活动可以并行地进行，所以完成工程的最短时间是从开始点到完成点的最长路径的长度（路径上各活动持续时间之和）找出关键路径和关键活动：列出活动表，e[i] 是最早开始时间，l[i] 最晚开始时间，e[i] == l[i] 即为关键活动；列出每个节点的最大权值，最早时间从前往后，最晚时间从后往前（如果上一个节点不是关键节点，得再往前找关键节点）拓扑序列：解决能否顺利完成任务邻接矩阵，带权邻接矩阵邻接表，有向图的邻接表；数组存储，链表结合存储（表头，链式）稀疏图、稠密图连通图：每个节点之间都必须能连通，因此至少有 n - 1 条边迪杰斯特拉（Dijkstra）算法，拓扑排序算法；可以用于判断一个有向图是否存在回路，如果存在拓扑排序，一定是无回图，否则至少包含一个环路最小生成树算法；参考用于在无向加权图中找到连接所有结点且权重和最小的子图；Kruskal 算法，遇到回路就放弃，但不能用于判断图是否有回路；Prim 算法，每次都找最小边散列表，哈希查找；散列函数必须解决两个问题：解决冲突和散列函数设计构造哈希函数的常用方法；参考除留余数法：关键字除以一个不大于哈希表长度的正整数 P，哈希的输出为其所得余数；P 值选择接近表长且不与组成关键字的字符基数直接相关的质数；数字分析法；取一组数据中共同有规律的部分作为哈希的输出；平方取中法；取关键字平方后的中间几位数作为散列地址开地址法、线性探测法；参考，增加：code % e.key，已有就往后占位查找：code % e.key，与所找不同就往后找，直到找到，或者碰到空的删除：code % e.key，与所找不同就往后找，找到以后删除，然后继续往后重新对所存在的序列进行 rehash 并置位扩容：将原来的数组遍历，取出数据后重新 hash 放到新的数组中，增加的法则与前文相同同义词指的是模后映射到相同地址的关键字（尽管可能往后占位解决冲突了）二次开地址法解决冲突，参考基本法则与开地址法相同，在碰到冲突时，不是直接往后占位，而是 29 % 11 = 7，冲突，则 (7 + 1) % 11 = 8链地址法、拉链法；在同一位置上维护一个链表存储每个落到当前位置的关键字处理冲突的查找成功和查找失败平均查找长度；拉链法查找成功时，分母为关键字个数；拉链法查找不成功时，分母为哈希表长度；线性探测法，参考；asl 成功，是各元素对应冲突次数的…

course | privacy-preserving-models-and-algorithms
type: item
date: 2023-06-05T10:54:00+00:00
description: Privacy-Preserving Models and Algorithms隐私保护模型与算法，课程学习内容及思考midterm examessay quiz论述大数据生命周期每个阶段面临的安全威胁和采取的安全技术大数据生命周期通常有以下几个阶段：p7单同态、部分同态以及全同态的含义；并以 RSA 算法为例给出同态算法及其所具备的同态性，验证之单同态 指部分同态 指全同态 指design quiz设计一个基于多服务器的隐私信息检索 PIR 方案：数据 $X = (x_{1}, x_{2}, ..., x_{16})$待查数据为 $x_{10}$总共有 4 个服务器给出详细步骤并分析其安全性假设 $\sigma\oplus i$ 表示将 $\sigma$ 的第 $i$ 位取反；例如 $\sigma = 111$，则 $\sigma \oplus 2 = 110$将数据 $X = (x_{1}, x_{2}, ..., x_{16})$ 转换成矩阵表示的方式如下： $$ \left[ \begin{array}{1} x_{1} & x_{2} & x_{3} & x_{4} \\ x_{5} & x_{6} & x_{7} & x_{8} \\ x_{9} & x_{10} & x_{11} & x_{12} \\ x_{13} & x_{14} & x_{15} & x_{16} \end{array} \right] $$ 将其转换为矩阵位置的表示方式如下： $$ \left[ \begin{array}{1} x_{00} & x_{01} & x_{02} & x_{03} \\ x_{10} & x_{11} & x_{12} & x_{13} \\ x_{20} & x_{21} & x_{22} & x_{23} \\ x_{30} & x_{31} & x_{32} & x_{33} \end{array} \right] $$ 则待查数据 $x_{10}$ 在位置矩阵中表示为 $x_{21}$ 由服务器个数为 4，数据总数量为 16，则生成 $\sqrt{4} = 2$ 个，每个位长为 $\sqrt{16} = 4$ 随机参数： $$ \begin{align} \sigma_{0} &= 0001 \\ \tau_{0} &= 1000 \\ \sigma_{1} &= \sigma_{0} \oplus 2 = 0011 \\ \tau_{1} &= \tau_{0} \oplus 1 = 1100 \end{align} $$ 其中的 2 和 1，是由 $x_{21}$ 对应位置得到的，则转成随机数矩阵为： $$ \left[ \begin{array}{1} \sigma_{0} = 0001 & \tau_{0} = 1000 \\ \sigma_{1} = 0011 & \tau_{1} = 1100 \end{array} \right]\left[ \begin{array}{1} \sigma_{0} = 0001 & \tau_{0} = 1000 \\ \sigma_{1} = 0011 & \tau_{1} = 1100 \end{array} \right] $$ 由 4 个服务器，同样也用位置矩阵来表示可得： $$ \left[ \begin{array}{1} DB_{00} = \sigma_{0} \times \tau_{0} & DB_{01} = \sigma_{0} \times \tau_{1} \\ DB_{10} = \sigma_{1} \times \tau_{0} & DB_{11} = \sigma_{1} \times \tau_{1} \end{array} \right] $$ 则计算结果如下： $$ \begin{align} DB_{00} &= \{x_{30}\} \\ DB_{01} &= \{x_{30}, x_{31}\} \\ DB_{10} &= \{x_{20}, x_{30}\} \\ DB_{11} &= \{x_{20}, x_{21}, x_{30}, x_{31}\} \end{align} $$ 将所有计算结果进行异或（下面的公式中 $\oplus$ 是异或，不再是上边自定义的取反符号）： $$ x_{30} \oplus x_{30} \oplus x_{31} \oplus x_{20} \oplus x_{30} \oplus x_{20} \oplus x_{21} \oplus x_{30} \oplus x_{31} = x_{21} $$ 由上面的式子可以看出，经过将返回结果异或后，只剩下了 $x_{…

course | cyber-security
type: item
date: 2023-05-30T02:02:00+00:00
description: reviewsnotechapter 01homeworkchapter 01畫出 IP 協議的組成，解釋字段含義，分析如何使用字段進行攻擊闡述 TCP 三次握手過程，分析 TCP 協議哪些字段可以用於攻擊數據報相關字段分析數據報總長度為 3820 Bytedata 段長度為 3800 byte要分片為長度不超過 1420 byte 的數據報片給出分片后每個數據報片相關字段的值（MF，DF，片偏移）APT 是什麽，記錄一些相關例子，包括攻擊目標、手法、案例等chapter 02病毒、蠕蟲、僵尸網絡、木馬等相關概念的解析定義特徵各性能對比震網病毒、火焰蠕蟲瞭解遠控木馬相關遠控木馬幾種連接方式駭客利用遠控木馬進行網絡入侵的步驟icmp 協議的哪些特性可以被木馬利用？Ficker 攻擊原理windows 下，如何進行動態提權；tips：LookupPrivilegeValue，OpenProcessTokenchapter 03信息搜集常用的方法；在僅知道站點域名的情況下whois 等查明站點的 ip 地址管理員信息，站點内部主機資料shodan、fofa 等語法搜索日本東京 2017 年 1 月 1 日后新出現的 linux 系統主機談談 shodan 的探測規律和策略搜索引擎檢索語句filetype: xls, 成績單chapter 04Wanna Cry 蠕蟲的傳播、加密以及解密流程一次完整的網絡安全漏洞掃描應該進行的行爲；主機發現、OS 識別、端口掃描、漏洞掃描以上幾個階段分別采用什麽技術漏洞掃描工具的組成原理以及主要功能chapter 05TCP SYN 洪流攻擊攻擊原理，要求能夠分析半連接表的變化情況爲什麽在實際使用時，攻擊者需要僞造源地址SYN 洪流攻擊計算題半連接隊列長度為 1024，重試次數為 5 次重試間隔每隔 1s 翻倍需要構造多少 SYN 請求包，才足以占滿半連接隊列？反射式 DDoS 攻擊原理、優勢設計一個 SSDP 協議中實現 100G 攻擊流量的反射式 DDoS 攻擊方案攻擊源數量每秒請求報文次數反射服務器的數量流量清洗技術的主要原理靜態口令靜態口令面臨的安全風險一個安全的口令有哪些原則以及策略Windows 口令攻擊的原理與過程弱口令分析身份證、生日、手機號碼等作爲口令的安全性；即通過窮舉能夠猜測得到口令的可能性動態口令給出一個例子，解釋原理列舉使用場景以及安全性代碼實現口令强度檢測方案計算大小寫，數字，密碼模式chapter 06交換機畫圖描述交換機 CAM 表的自學習過程對交換機使用 MAC 洪範攻擊，爲什麽會使得交換機變成集綫器，像所有端口轉發數據？針對 MAC 洪範攻擊的防禦措施ARP 欺騙，中間人攻擊詳細描述駭客利用 ARP 欺騙來實現網絡監聽的步驟DNS ID 欺騙的原理，防禦方法chapter 07緩衝區溢出攻擊的基本原理sql 注入邏輯 sql 繞過，詳細描述方式注釋型繞過如何使用預編譯的方式來防止 sql 注入；解釋預編譯的原理chapter 08L2TP 協議原理，應用其中節點的主要作用幾種不同應用場景原理IPSec 隧道原理，組成DH 密鑰交換協議原理中間人攻擊如何應用在 DH 算法當中；改進方法SSL 通信原理，實現流程SSL 劫持攻擊原理SSL 剝離攻擊原理quizchapter 01TCP/IP 的脆弱性解釋 APT 攻擊；説出特點、防禦方法病毒、木馬、蠕蟲分別是什麽；寫出區別chapter 02shodan 的工作原理，探測能力shodan 搜索語法：地區、應用、系統、時間等shodan 如何被用來輔助防禦設計一款漏洞掃描工具：漏洞掃描工具組成結構，工作流程TCP 協議、SYN 洪範攻擊TCP 協議的三次握手過程，半連接隊列以及全連接隊列的關係SYN 洪範攻擊如何進行 IP 地址僞造、如何僞造；SYN 洪範攻擊有關的參數，例如半連接隊列長度，重試時間間隔SYN FLOOD 攻擊的防禦措施利用 SSDP 協議進行 ddos 攻擊實現給出具體的放大倍數，攻擊流量，伺服器數量，每秒攻擊請求數量；相互之間進行計算chapter 03緩衝區溢出攻擊strcmp、strcpy 兩個函數在溢出攻擊中的利用，注意這兩個函數有什麽特點shellcodechar shellcode[] = "\xed\x1a"; // shellcode here int main { int *ret; ret = (int *)&ret + 2; (*ret) = (int)shellcode; }

course | software-security
type: item
date: 2023-05-19T11:28:00+00:00
description: 软件安全技术20230410SSL，Secure Socket Layer：安全套接字层，参考 tls，用于通信双方来确认身份。通信时，双方先创建一个 ssl 安全层，用于传输数字证书，随后建立对称加密通道，正式确认双方身份后就可以开始通信了SSL Heartblood：心脏出血漏洞，在 OpenSSL 1.0 版本中，利用 "心跳扩展功能（heartbeat extension）"，一种用于发送心跳请求，确认对方是否可以进行通信的行为。该漏洞的利用过程如下：正常情况下发送正常的心跳请求时，发送如下信息：if you are there, please reply 3 letters 'hat' to me，此时对方会回复：hat 共 3 个字符构造恶意请求时，发送如下信息：if you are there, please reply 500 letters 'hat' to me，此时对方会回复：hat .... 共 500 个字符，造成内存泄露由于 heartbeat extension 存在于 SSL/TLS 协议的核心组件中，导致旧版本的 SSL 协议不再可靠软件安全所受威胁 3 大类：软件漏洞、恶意代码、软件侵权可信任第三方认证技术：例如可信任 CA（证书颁发机构，Certificate Authority），全球可信 CA 数量较少，在操作系统底层就写入了这些可信 CA 的唯一标识，在后续应用的过程中，接收到了可信 CA 的数字证书后，即可被认为通信是安全的PDRR（或 PD$R^2$） 模型：保护（Protection），检测（Detection），响应（Reaction），恢复（Restore）20230420shellcode 中一般使用 0x90 NOP 来占位置或填充内容，如果捕获到出现大量 NOP 指令的情况，就有可能是出现了攻击行为SEH（结构化异常处理） 异常攻击：Windows 在执行 int3 中断时，会让程序 EIP 运行到 栈上存放 SEH 入口的位置 执行 SEH 中断处理，若能修改 SEH 的入口为 shellcode，就能在触发 int3 中断时执行 shellcodeDWORD Shoot，windows 堆溢出漏洞：覆盖下一个 chunk 的 flink（fd） 和 blink（bk），由于发生解链的时候会有 node->fd->bk = node->bk，此时构造 node->fd = target addr，node->bk = shellcode，就能实现 *target addr = shellcode 的任意地址写操作DEP，数据执行保护，即 NX ENABLEDASLR，地址空间布局随机化ABR，数组越界读20230424早期的病毒会修改受害主机本地的 hosts 文件，在其中添加对应的内容例如：www.huorong.com 127.0.0.1，此时再去安装杀毒软件的时候，由于访问的是本地环回地址，就会因此出现各种无法访问的情况，也就无法安装杀毒软件DNS 服务器开放的查询端口是 53，使用的协议的 UDP，要求访问速度要快；DNS 服务器的 53 端口也会使用 TCP 协议进行通信，其目的是保证主从 DNS 服务器之间的数据同步（例如主机 DNS 添加了一个 A 记录，从服务器也要对应同步该 A 记录），称之为 DNS Zone Transfer密码加盐（Password Salting），为密码添加随机字符串后再进行后续处理，主要是为了防止彩虹表攻击等撞库行为物联网（Internet of Things，IoT）身份验证机制，挑战/响应认证方式（Challenge/Response），是一种零知识证明方案。指的是第一次握手，client 向 server 提出请求（需要提供一个值，例如 用户 id），要求进行身份验证第二次握手，server 在确定存在该 client 后，返回一个 随机数，作为 "提问"第三次握手，client 将自身 用户 id 与该 "提问" 合并，并生成 hash 指纹，返回给 server 作为应答第四次握手，server 将 client 返回得到的 hash 指纹，与 server 本身提取 用户 id + 随机数 进行 hash 指纹比较，若相同，则会向 client 返回 认证通过整个流程中，没有口令等隐私内容在互联网上传播，即使用 零知识证明 完成了身份认证参考，169.254.169.254，是一个 ipv4 空间中作为本地环回地址，云服务商 AWS 就会使用 http://169.254.169.254 作为一个特殊的查询地址，这个 API 可以允许云服务器实例访问一些有关自己的元数据信息，亚马逊云例如如下查询指令：curl…

courses | reverse-engineering
type: item
date: 2022-10-05T08:50:00+00:00
description: 逆向工程Windows，i386第一章 - Ollydbg 基础字节序举例子：42 == 0x002a（这里是 2 字节，2a 是一个十六进制字节。00 是高字节，2a 是低字节）大端序：0x002a，即高低字节放在对应高低地址小端序：0x2a00，即高低字节放在相反高低地址单位db， | 位，1 bytes = 8 bits，0xdedw，DWORD，| 双字节，2 bytes = 16 bits，0xdeaddd | 四字节，4 bytes = 32 bits，0xdeadbeef第二章 - 汇编位数1 根地址线 = $2^1$ = 2 Bytes2 根地址线 = $2^2$ = 4 Bytes...10 根地址线 = $2^{10}$ = 1024 Bytes = 1 KB...32 根地址线（32 位），32 位 = $2^{32}$ = 4294967296 Bytes = 4 GB数据寄存器，32 位AL，AH：低 8 位，高 8 位AX：EAX 的低 16 位EAX：数据寄存器，默认存返回值、累加值，乘法、除法EBX：存基址ECX：COUNT，计数器（循环，每次循环会自动减 1），存字符串EDX：存数据tips：AX = accumulator，E = Extended通用寄存器EBP：Extended Base，堆栈基址指针寄存器，基址指针指向栈帧（Stack Frame）的开始地址ESP：Extended Stack，堆栈栈顶指针寄存器，栈顶指针指向栈帧的栈顶ESI：Extended Source，操作指向字符串源地址EDI：Extended Destination，操作指向字符串目标地址EIP：只能通过 RET，JMP 等操作修改移动栈帧的操作PUSH EBP，将当前栈顶指向地址存到 EBP 中，也就意味着 EBP 被移动到原来的 ESP 所在的位置MOVE ESP，抬升栈顶位置 ESP，这样更改后的 EBP 和 ESP 就形成一个新的栈帧PUSHAD，将寄存器中的值依次压入栈上，并且抬高栈帧，主要作用是保护寄存器信息，即保护现场。顺序为 EAX，ECX，EDX，EBX，ESP，EBP，ESI，EDI，POPAD，与 3 刚好相反，将栈上内容按 反序 弹出给寄存器，并且降低栈帧，从栈上取回寄存器信息，恢复现场RETN X，相当于 POP EIP，然后 ADD ESP X标志寄存器标志寄存器汇编指令集MOV，取地址（寄存器）中的值MOV 目的操作数，源操作数两个操作数的宽度必须一致LEA，取地址本身PHSH，POPPUSHAD，POPAD，将栈上的值依次压入几个通用寄存器JMP，跳转到地址RET，返回到 EIPCALL，机器码 E8 0E000000 表示调用当前地址的 下一条地址 + 0E 所在的 function| 地址 | 机器码 | 值 | 解释 | | -------------- | ------------------- | --------------------------------------- | -------------------------------- | | 0x0040100B | E8 0E000000 | CALL mailto:jmp.@user32.MessageBoxA | 跳转 | | 0x00401010 | CC | INT3 | HALT | | ... | | | | | 0x0040101E | FF25 08204000(小端) | jmp dword ptr ds:[<user32.MessageBoxA>] | 调用 user32.dll 中的 MessageBoxA |这里有一个精妙的是，在 CALL 的时候，将下一条地址压栈（该地址也作为函数的 ret 地址）到栈顶，然后根据栈顶的地址 +0E第三章 - PE 基础结构Windows PE 文件基础PE：Portable Executable File Format，可移植程序体虚拟内存地址（VA）相对虚拟内存地址（RVA），VA = 模块程序基址 + RVA文件偏移地址（FOA），就是未动态装载时、存在于外存的文件，只显示末3位FOA，RVA，VA 的关系FOA 某个函数 func：base = 0x400， offset = 0x80，则 func_foa = 0x480RVA 里的 func：base = 0x2000，offset = 0x80，则 func_rva = 0x2080​ 解释为，在即将装载到内存前，需要对齐页粒度，并且导入一些库、函数等VA 里的 func：base = 0x00400000，offset = 0x2080，则 func_va = 0x00402080…