《计算机科学精粹》

逆向篇

https://0xinfection.github.io/reversing/pages/part-3-types-of-malware.html

32位 16位 8位 名字
EAX AX AH、AL 累加器
EBX BX BH、BL 基地址寄存器
ECX CX CH、CL 计数寄存器
EDX DX DH、DL 数据寄存器
ESI SI 源索引寄存器
EDI DI 目标索引寄存器
ESP SP 基址针寄存器
EBP BP 堆栈指针寄存器
EIP 存放当前代码段即将被执行的下一条指令的偏移

堆栈/堆

关于堆栈问题,那个内存向上增长还是什么的我也不关心

主要引入堆栈这个内存区域,其优点就是去管理内存

当函数退出的时候,其所有变量就弹出来,这些局部变量的压入/弹出,使得堆栈增长/缩小

堆栈(stack):向下增长(地址从高到低),局部变量,有边界的

堆(heap):向上增长,全局范围,只有物理上的限制,其内存读写速度较慢,因为必须用指针,相关函数malloc()calloc()realloc()free()

gdb

调试时有个东西就是

在 AT&T 语法中,源和目标是相反的

AT&T 语法:movl %esp, %ebp [这意味着将 esp 移动到 ebp。]

Intel 语法:mov esp, ebp [这意味着将 ebp 移至 esp。]

查杀篇

一般遇到不确定的文件,也就是PE文件(windows下所有可执行文件的统称,间接执行的DLL也算),都会放到沙箱,比如微步、奇安信那里运行一下,它们会提供一些报告

但这样的话,我的疑惑点在于,它们判断的依据,它们肯定有一个黑名单特征数据库,如果匹配上了(某个关键字、某个规则文件)就当做恶意文件,那么,哪些行为或者具体到哪些函数才算作恶意呢?

这里用cs生成了一个exe文件,丢进沙箱里

沙箱告诉我检测到CobaltStrike命名管道特征\\?\pipe\MSSE-208-server

kali用strings分析一下

image-20240517161054111

算法基础篇

基本运算

与、或、异或,真值表对逻辑的处理

乘法:

有23个人面试,仅有硬币正面时才让进,问有多少种可能,2^23

排列(包括有重复项的排列):

1.我有n个数,随机给你m个,多少种可能?

$$
\frac{(n!)}{(n-m)!}
$$
2.那如果里面有r个相同的数呢,我要最终不同排列的可能性
$$
\frac{n!}{r!}
$$
组合:

我有n牌(仅一种色),随机取m张,问组合方式:

$$
这m种排列结果为:\frac{(n!)}{(n-m)!}\
但由于顺序无所谓:\frac{(n!)}{m!(n-m)!}
$$
求和:

30天内要求购买机票随时往返某地,必须查看多少对出发/返程日期,才能找到最便宜的机票
$$
这里的机票,要么在同一天买,要么返程票晚一天买\
那么第一天有30对有效出发/返程日期、第2天29对…第30天就一对\
那就是30+29+…+1=等差数列\frac{n(n+1)}{2}=465\

从组合来看,30天里任选2天(但不为同一天),所以是\frac{(n!)}{m!(n-m)!}\
再加上可以同一天买的情况,30种
$$
概率

独立、互斥、对立事件

就像是硬币,前10次都正面朝上,第11次是否也会正面朝上,这个和过去的结果没关系,还是1/2

二项分布…巴拉巴拉

复杂度

这里介绍说,洗牌,洗26张,还是52张,时间上的差别有没有,主要是当数量翻倍时,进行一个预测

时间复杂度

算法在处理规模为n的输入时所执行的运算次数。

最好情况(直接输入排好序的 )、最坏情况(输入倒序的)、平均情况(随机顺序)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vector<int> a={9,8,7,6,5};
int temp=-1;
for(int i=0;i<a.size()-1;i++)
{
for(int j=i+1;j<a.size();j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}

个人理解如下:

这里有5个数,所以n=5

外层for总是运行n-1次,即4次(因为i的取值为0-3);而内层循环要执行n-1次,n-2次……:

当i=0时,内部的j=1,2,3,4,这是n-1次,即4次

当i=1时,内部的j=2,3,4,这是n-2次,即3次

当i=3时,内部的j=4,就1次了

外层循环一共执行n-1次,即为T(n1),那么内层循环将执行(n-1)+(n-2)+…+2+1次,那就是

(n-1)n/2,至于再加上这交换赋值的3次操作,那还得乘3哈,即
$$
T(n2)=\frac{3(n²-n)}{2}
$$
那么最终T(n)=T(n1)+T(n2)

这里面还涉及一个增长的问题,即函数形式增长形式快的占大头,所以会有个比较,比如n²与nlogn相比,指数型增长总是很膨胀

空间复杂度

空间和时间的权衡问题,有时候不得不空间换时间,有时候也不得不用O(n²)的时间复杂度算法

策略

迭代

就是循环重复某个过程

嵌套循环与幂集

即原集合中所有子集,类似于构建真值表

递归

穷举

背包问题

回溯

8皇后问题,在8*8棋盘放置,如何使得它们无法互相攻击

这里主要是考虑,当前两个后能相互攻击,那么接下来的后均无意义

也就是后面的后只需要考虑前面的一个后,不在它的攻击范围即可

贪心

分治

将原问题拆解为若干相似但更小的问题,再将它们变得易于求解,合并解集

比如归并排序

动态规划

即重叠子问题,记忆化

分支界定

上界和下界

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信