编程基础(1)
1.进制
进制之间的转化,emmm 这里就不累赘了。
现在这么先进了,能计算机就计算机吧。当然原理肯定还是要懂的。
2.编程基础之常见字符编码
数据宽度
超出最多宽度的数据会被丢弃
1 | bit 1 |
⽆符号数、有符号数
不说了
原码、反码、补码
在计算机中,存储形式是通过补码来存储的
原码:最⾼位为符号位,其余各位为数值本身的绝对值
反码:正数反码与原码相同,负数符号位为1,其余位对原码取反
补码:正数补码与原码相同,负数符号位为1,其余位对原码取反加1
1 | -1 |
与运算
and &
两个位都是1才是1。【一假即假】
1 | 1011 0001 |
或运算
||
只要有一个为1就为1。【一真即真】
1 | 1011 0001 |
异或运算
xor ^
不⼀样时则为1
1 | 1011 0001 |
⾮运算
Not ~
0就是1、1就是0
1 | 1101 1000 |
左移
<< shl
各⼆进制位全部左移若⼲位,⾼位丢弃,低位补0
1 | 1101 1000 |
右移
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 | OD |
虚拟机的建设
1.win 7 的 【集成了很多工具的】
2.ubunt (含有PWN环境)
【如果需要可以找我】
【这里需要学一学linux的相关的命令】–以后也会初相对应的内容的
然后进入ubunt 开始编译一个c文件
1 | 下面的命令可以用tab补全,别傻乎乎的全部记 |
写入如下的代码:
1 | #include <stdio.h> |
保存退出
1 | 按下 esc |
出来后可以查看一下这个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函数
到此,这里就结束了,让我们一起去下一章吧!