1.进制

进制之间的转化,emmm 这里就不累赘了。

现在这么先进了,能计算机就计算机吧。当然原理肯定还是要懂的。

2.编程基础之常见字符编码

数据宽度

超出最多宽度的数据会被丢弃

1
2
3
4
5
bit 			1
byte 8 0xFF
word 16 0xFFFF
doubleword 32 0xFFFFFFFF
Qword 64

⽆符号数、有符号数

不说了

原码、反码、补码

在计算机中,存储形式是通过补码来存储的

原码:最⾼位为符号位,其余各位为数值本身的绝对值

反码正数反码与原码相同,负数符号位为1,其余位对原码取反

补码正数补码与原码相同,负数符号位为1,其余位对原码取反加1

1
2
3
4
5
-1 
1000 0001
原码:1000 0001
反码 1111 1110
补码 1111 1111

与运算

and &

两个位都是1才是1。【一假即假】

1
2
3
4
1011 0001
1101 1000
——————
1001 0000

或运算

||

只要有一个为1就为1。【一真即真】

1
2
3
4
1011 0001
1101 1000
——————
1111 1001

异或运算

xor ^

不⼀样时则为1

1
2
3
4
1011 0001
1101 1000
——————
0110 1001

⾮运算

Not ~

0就是1、1就是0

1
2
1101 1000
0010 0111

左移

<< shl

各⼆进制位全部左移若⼲位,⾼位丢弃,低位补0

1
2
3
1101 1000 
shl2 ;左移2位
0110 0000

右移

Shr >>

各⼆进制位全部右移若⼲位,低位丢弃,⾼位补0(shr)或补符号位(sar)

位运算加减乘除

4+5的运算过程

1.转为⼆进制:0000 0100 、0000 0101

2.两者进⾏异或得出:0000 0001

3.判断是否存在进位(两者进⾏运算):0000 0100 .这⾥与运算结果不为0(⼆进制:00000000)则表示存在进位

4.0000 0001 xor 0000 1000 = 0000 1001

5.步骤四的结果还需要判断是否存在进位(与运算):步骤⼆的结果与左移⼀位的步骤三结果 → 0000 0001 and 0000 1000,得出:0000 0000,则表示不存在进位,步骤四的结果

则为4+5的最后结果

6.⼆进制:0000 1001转为⼗进制:9

什么是编码与解码

常⻅编码表 ASCII

网上搜搜就好啦,这里就不赘述了

在中国是GB2312、GBK、GB18030,UTF-8

3.二进制安全之反汇编理论

反汇编器

反汇编是将⼆进制代码转换成汇编代码

⾃⼰写⼀个反汇编引擎:【这里了解一下就好啦】

1.CPU x86 ,⾸先根据不同的CPU,找到CPU⼚商关于CPU指令相关的标准,根据⼆进制与汇编指令的对应关系,写出来⼆进制到汇编代码的转换模块.

2.根据不同的可执⾏⽂件,找到对应的格式标准,去解析可执⾏⽂件的结构,知道哪⼀块⼆进制是代码,哪⼀块是数据等.

高级持久威胁(APT)

⼀种网络攻击,这些攻击往往来自多个入口点,并且能使用多个攻击媒介【网络,物理,欺骗】

PoC和Exploit

PoC(Proof of Conecpt),概念性证明,是证明漏洞存在而提供的⼀段代码或方法,只要能触发漏洞即可。

Exploit是指能够实现漏洞利用的代码,程序或者方法。是PoC的子集。

溢出

就是溢出了,超出了边界,造成的程序崩溃或者执行了攻击者的命令。

攻击载荷 Payload

是系统被攻陷后执行的多阶段恶意代码。

攻击载荷是在漏洞攻击模块之上的【这里可以想一想MSF咋用的】这个payload就是用来造成破坏的。

加壳

UPX , vmp

利用特殊的算法,将EXE可执行程序或者DLL动态连接文件的编码进行改变【实现压缩,加密】,实现缩小文件体积或者加密程序编码,或者躲过杀毒软件的查杀【加壳不单单用来躲过杀毒软件的哦】

软件脱壳

利用工具,脱去壳。

免杀

加壳,加密,修改特征码,花指令…逃过杀毒软件的查杀。

花指令

就是垃圾指令【写一堆注释】恶心杀毒软件

C2

Command and Control

常见于APT【红队】攻击场景中,就是恶意软件和攻击者进行交互,也是攻击者的“基础设施”【Metasploit Cobalt Strike…】

打补丁(Patching)

提高安全性增强性能

Rootkit

攻击者,隐藏自己的行踪和保留权限的工具。达到长时间控制对方的目的,和后面木马差不多

模糊测试(fuzz testing, fuzzing)

就是软件测试技术。核心就是将自动或者半自动的生成的随机数输入到一个程序中。并监视程序异常,用来发现程序错误

是汇编语言?

Arm,X86,mips….

之前写的8086和win32。

BUUCTF

3.如何反汇编?

反汇编工具

1
2
3
4
OD
IDA Pro
radare2
...

虚拟机的建设

1.win 7 的 【集成了很多工具的】

2.ubunt (含有PWN环境)

【如果需要可以找我】

【这里需要学一学linux的相关的命令】–以后也会初相对应的内容的

然后进入ubunt 开始编译一个c文件

1
2
3
4
5
6
7
8
9
10
下面的命令可以用tab补全,别傻乎乎的全部记

cd Desktop/ 进入桌面
ls 查看一下
mkdir class 创建一个目录
cd class 进入class
vim add.c 用vim这个编辑器创建一个add.c的文件
回车
进入一个页面后 按下 a 进入插入模式

写入如下的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
static int add_a_and_b(int a, int b)
{
return a + b;
}
int main(int argc, const char *argv[])
{
int a = 1;
int b = 2;
int c;

c = add_a_and_b(a, b);
printf(" %d + %d = %d\n", a, b, c);

return c;
}

保存退出

1
2
3
按下 esc
按下shitf + :
输入wq 保存并退出

出来后可以查看一下这个add.c

1
cat add.c

现在是写了一个c文件但是没有编译

对之进行编译,并且保存在add这个文件中

1
gcc -o add add.c

然后可以ls一下,现在发现多了一个add【绿色的】和一个add.c

查看一下add 这个文件

1
file add

通过file命令,就知道这个add可执行文件是一个elf文件。

查看权限

1
ls -al

运行一下

1
./add

就能看到

1
1 + 2 = 3

按照elf文件【add】为输入,得到汇编代码==>就是反汇编

来反汇编一下【现在看一下就好了,后面会学】

1
objdump -l -x -d add > add.dmp

然后来看看

1
cat add.dmp

emm 卧槽好多….找到这个目录,把他复制出来可以用编译器打开看着舒服点..

之前大概学过汇编,所以大概也能看懂。首先找到程序的入口点也就是main函数

到此,这里就结束了,让我们一起去下一章吧!