运算方法和运算器(2)
1.数据与文字的表示方法
计算机中使用的数据可分成两大类
符号数据:非数字符号的表示 ASCII、汉字、图形
2.数值数据:数字数据的表示方式(定点、浮点)
计算机数字和字符的表示方法应有利于数据的存储、加工(处理)、传送;
编码:用少量、简单的基本符号,选择合适的规则表示尽量多的信息,同时利于信息处理(速度、方便)
1 数据格式1.定点表示法
所有数据的小数点位置固定不变
理论上位置可以任意,但实际上将数据表示有两种方法(小数点位置固定-定点表示法/定点格式):
纯小数
纯整数
2.浮点表示法小数点位置随阶码【也就是下面的指数E】不同而浮动
阶码;在表示一个浮点数的时候,要给出指数,用整数形式表示,常常称为阶码。
小数点位置随比例因子的不同而在一定范围内可以自由浮动,所以称为浮点数
任何一个数N 可以表示为:
尾数:是一个纯小数
E:是比例因子的指数,称为浮点数的指数,是一个整数
基数:一般是2或者10
浮点数的规格化表示:
(1.75)10 = 1.11 × 2 0 (规格化表示)= 0.111 × 2 1 = 0.0111 × 2 2
3.十进 ...
计算机系统概论(1)
1.计算机的分类电子模拟计算机
电子数字计算机(电脑)(电子计算器)
2.计算机的发展简史1.计算机的五代变化第一代:电子管计算机–数据处理机开始得到应用
第二代:晶体管计算机–工业控制机开始得到应用
第三代:中小规模集成电路计算机–小型计算机开始出现
第四代:大规模和超大规模集成电路计算机–微型计算机开始出现
第五代:巨大规模集成电路计算机–单片计算机开始出现
2.半导体存储器的发展….
3.微处理器的发展
Intel公司微处理器的烟花
4.计算机的性能指标
吞吐量
表征一台计算机在某一个时间间隔内能处理的信息量
响应时间
表征从输入有效到系统产生响应之间的时间
利用率
在给定时间间隔内系统被实际使用的时间所占用的比率
处理机字长
32位或者64位
总线宽度
CPU中运算器和存储器之间进行互联的内部总线二进制位数
存储器容量
存储单元的总数量GB TB
存储器宽带
单位时间内从存储器读取的二进制数信息量,一般用字节数/秒来表示
主频/时钟周期
CPU的工作节拍受主时钟控制,主时钟不断产生固定频率的时钟,主时钟的频率叫CPU的主频。单位是MHz 或者 GH ...
阅读必看(0)
该内容主要是:《计算机组成原理》—白中英
该笔记主要取决于我在无聊或者其他学累了过后所写,内容均来自上面这本书。
二进制安全漏洞之缓冲区溢出(32)
栈溢出漏洞基本原理基本知识栈溢出是缓冲区溢出的一种
缓冲区溢出是:一种长数据向小的缓冲区复制,导致数据超出了小缓冲区,导致其他的数据被破坏。这就是缓冲区溢出。
手法
1.先决条件,栈局部变量可控制,存在溢出(strcpy)
2.通过栈空间的布置,布置shellcode,并使用shellcode起始地址来覆盖栈帧的ret addr【返回地址】
3.Payload = [Nop sled + ] Shellcode + Pad + Shellcode’s Addr
但是:Shellcode地址在不同PC上不确定
来看一个有问题的代码
12345678910111213141516171819202122#include <stdio.h>#include <stdlib.h>void vul_func(){ char buf[64] = {0}; FILE *fp = NULL; if(!(fp = fopen("input.txt","r"))) { ...
二进制安全漏洞之缓冲区溢出(31)
Shellcode的使用于介绍Shellcode 实际上是一段可以独立执行的代码(也可以认为是一段填充数据),在触发了缓冲区溢出漏洞并获取了eip指针的控制权后,通常会将eip指针指向Shellcode以完成漏洞利用全过程。从功能上看,Shellcode在整个漏洞利用过程中发挥主要作用实现对计算机端的控制。
Shellcode是漏洞利用的必须的一个要素,也是漏洞分析的重要环节。我们可以通过对Shellcode进行定位来辅助回潮漏洞原理,并确定漏洞特征。通过对Shellcode功能的分析,我们还可以确定漏洞样本的漏洞样本的危害程度及目的,并有可能追踪攻击来源,这对APT攻击分析中的溯源工作非常有利
Shellcode 在漏洞样本中的存在形式一般为一段可以自主运行的汇编代码。它不依赖任何编译环境,也不能像在 IDE 中直接编写代码那样调用 API 两数名称来实现功能。它通过主动查找DLL基址并动态获取API地址的方式来实现API 调用,然后根据实际功能调用相应的 API 两数来完成其自身的功能。
Shelleode 分为两个模块,分别是基本模块和功能模块,结构如图所示。
例子什么是栈溢 ...
BUU-[GXYCTF2019]luck_guy(12)
是一个ELF 文件 ,这里可以先打开看看是啥
其实我猜测,这里有一个算法,输入的东西然后进行匹配吧。
上面知道了是64位的,我们这里就用IDA打开看看
很明显这个patch_me这个函数是关键
传入的值放入 al 中,然后对他进行了if判断,这里看get_flag这个函数。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950unsigned __int64 get_flag(){ unsigned int v0; // eax int i; // [rsp+4h] [rbp-3Ch] int j; // [rsp+8h] [rbp-38h] __int64 s; // [rsp+10h] [rbp-30h] BYREF char v5; // [rsp+18h] [rbp-28h] unsigned __int64 v6; // [rsp+38h] [rbp-8h] v6 = __readfsqword(0x28u); ...
BUU-Java逆向解密(11)
程序员小张不小心弄丢了加密文件用的秘钥,已知还好小张曾经编写了一个秘钥验证算法,聪明的你能帮小张找到秘钥吗? 注意:得到的 flag 请包上 flag{} 提交
这个是一个.class文件,需要用 jd-gui 这个东西打开
jd-gui github 地址: https://github.com/java-decompiler/jd-gui/releases
下载直接打开就好了。
看这个for 循环【虽然我没学过java但是大概还是能知道这个是在干什么】
就是一个异或,很简单了
1.python1234567strs = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]flag = ""for i in range(0,len(strs)): flag += chr(strs[i] - 64 ^ 0x20)print(flag)
2.C12345678910111213#include <stdio.h> ...
ELF文件结构简介(30)
ELF文件结构介绍1.ELF文件介绍首先需要知道的是:对象文件(Object files)有三个种类
可重定位的对象文件(Relocatable file)这是由编译前汇编生成的 .o 文件。后面的连接器(link editor)拿一个或一些Relocatable object files 作为输入,经链接处理后,生成一个可执行的对象文件 (Executable file) 或者一个可被共享的对象文件(Shared object file)。我们可以使用 ar 工具将众多的 .o Relocatable object files 归档(archive)成 .a 静态库文件。如何产生 Relocatable file,你应该很熟悉了,请参见我们相关的基本概念文章和JulWiki。另外,可以预先告诉大家的是我们的内核可加载模块 .ko 文件也是 Relocatable object file。
可执行的对象文件(Executable file)文本编辑器vi、调式用的工具gdb、播放mp3歌曲的软件mplayer等等都是Executableobject file。
在我们的 Linux 系 ...
PE 表(29)
PE文件结构之导入表和导出表IAT:【我觉得,这些都是别人微软定义好了的,知道一个概念现在就足够了,不需要刻意去记住吧】
Import Address Table , 导入地址表
Dll中隐式链接的调用过程:
以调用CreateFileW()为例
该函数位于kernel32.dll中
call dword ptr ds:[01001104] 实现函数的调用
调用CreateFileW()函数时并非直接调用,而是通过获取01001104地址处的值来实现(所有API调用均
采用这种方式)。
地址01001 104是notepad.exe中.text节区的内存区域(更确切地说是IAT内存区域)。
01001104地址处的值为7C8107F0
指令与call 7C8107F0 为一个效果
相当于式有一个表,这个表里面放了地址。
IMAGE_IMPORT_DESCRIPTOR
IMAGE_ IMPORT_ DESCRIPTOR结构体中记录着PE文件要导入哪些库文件
123456789101112131415typedef struct _IMAGE_IMPORT_DESCR ...
BUU-SimpleRev(10)
本身想说用KALi运行一下的。但是有个啥错误..
管他的。我们已经知道了这个程序是64位的无壳的。放入IDA看看
看到这个Decry函数,很明显这个函数是解这个题的关键
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970unsigned __int64 Decry(){ char v1; // [rsp+Fh] [rbp-51h] int v2; // [rsp+10h] [rbp-50h] int v3; // [rsp+14h] [rbp-4Ch] int i; // [rsp+18h] [rbp-48h] int v5; // [rsp+1Ch] [rbp-44h] char src[8]; // [rsp+20h] [rbp-40h] BYREF __int64 v7; // [rsp+28h] [rbp-38h] int v8; // ...