为什么有人接触计算机变成了黑客,有人变成了程序员?
进制记住三个概念:
基数 数码 位权
基数:16
数码:0~9、A、B、C、D、E、F
位权:从最低位(最右边)开始,依次表示16的0次方,16的1次方,以此类推.
计算机中16进制用的最多,其次是二进制,8进制基本没用过
给人看的是原码,给电脑看的是补码
丹尼斯里奇 2011.10.12去世,c语言之父,一个月前史蒂夫乔布斯(顶多与林纳斯·本纳第克特·托瓦兹齐名,linux内核发明人)去世
源代码几十字节,为什么编译成exe变成几十k?联系?
为什么编译之后的exe双击就能运行?
windows系统下编译的helloword为什么不能在linux下运行,32位系统编译的helloword能在64位系统下运行,64位系统编译的helloword能在32位系统下运行
exe没有操作系统能运行吗? 计算机的行为不是单纯就能反馈给人的,想把helloword打印到屏幕给人看,程序加载到内存中
计算机语言试图掩盖什么?cpu只认识 0和1,
Ada Lovelace(1815年12月10日),任晓辉
windows系统和dos系统有什么差别?windows第一版系统就是MT-dos
windows下的控制台窗口(dos窗口)与dos系统的关系,没啥关系,并不是windows下还有一个dos系统
main函数结束:windows下的所有程序都是以exit process这个api结束运行的
程序员的规则
什么是计算机语言?计算机与人产生的所有交互方式
鼠标移动也是计算机语言
5层:高级语言层 解释性的高级语言只能做用户层的软件,翻译型语言如c语言能做更底层的
4:汇编语言层
MASM(微软) AASM(linux)arm
3:操作系统层(操作系统本身也算是一种计算机语言,非常强大的胶水语言,链接上层和下层的语言合到一起,把用户操作的这一部分计算机语言融合)
2:指令集层(针脚的的高低电频传递给cpu
华为用的arm
1:微结构(微指令)层 (指硬件层面的cpu,不是虚拟机的)
产商壁垒、商业机密,可一次性编程,硬件层面的微指令,通过关键通路施加高电压熔断改变微指令层的逻辑,通过微指令的修改可以构建后门
0:数字逻辑层
啥是数据类型?
内存结构和它的操作规则,数据的长度
为什么要有数据类型?
啥是变量?
一块空间,特点:容器,可以存东西
函数为什么不是变量(不能存东西,没办法往里写,编译器编译完的exe运行之后内存属性不允许往里写),如果允许的话,那是变量
啥是if else?
用某种语言写出来的小程序,可以再拆分的
if else本质是啥?
啥是循环 ?
循环的本质是啥?(if else、do while、while哪个效率 最高?)
原因do while只发生了一次跳转转移
do while效率最高,无论哪种循环,release版本都优化成do while
原因从奔腾2讲起:
幽灵和熔毁(性能降低50%)
影响自1995生产出来的绝大多数cpu,与奔腾2处理器的双流线机制(cpu可以同时执行两条及以上语句,cpu速度特别快,但是内存往cpu中取数据时特别慢,大概几毫秒,相当于成百上千个时钟周期,为了防止这种情况发生,后面的指令会预执行,先把内存中数据取出来放到cpu中的数据缓存,取得过程与指令集是完全分开的,所以没有权限验证,执行的时候检查权限,检查后面指令中这个内存地址能不能往外取数据,不能就报错、数据清除,黑客的聪明之处就在与在后面指令的前面加了一条人为的引发cpu异常处理的错误 )有关(中央处理器工程师发现汇编语言代码改变顺序并不会影响运行,汇编语言顺序执行或颠倒执行对运行结果没有影响),不过会有侧信道信息泄露
第一条指令
第二条指令
第三条指令 (预执行)加了一条人为的引发cpu异常处理的错误 ,就不会执行第四条指令
第四条指令(预执行取到数据到缓冲区,数据放到缓冲区没有进行权限验证,执行的时候才检查权限,看你这个内存地址能不能往外取数据,不行就报错数据清除,能就取成功)
黑客接管在缓冲区的数据,达到跨权限去读数据的一个目的
操作系统权限最基本的根源在内存权限的控制,内存权限如果突破了,那你想干啥就干啥
双流水线碰到转移的时候
程序中跳转转移越少,它的效率越高
这样就可以在内存的其他位置获取到其他内存信息
保存关键用户名和密码的位置在内存中是高度随机的,所以不用当心因为侧信道信息泄露而导致用户名和密码泄露的问题
switch是什么?
本质是什么?
虚拟机最核心的的一个结构就是上千个case组成的大switch case
switch在设计之初就要考虑效率问题
所有的寻址都是由另外一个核心——地址加法器 完成的,地址加法器不占用cpu时间,从cpu的设计结构上来看,对cpu的消耗约等于0,比if else效率高无限倍
但是当寻址距离很长时,需要用一套稀疏矩阵的算法(其实特别简单,就是两数组)
假如地址加到550,可是8位最多255,这时需要用到平衡二叉树的方式去对它进行组织
这些所有讲的if else 、switch case、循环这些个语言背后映射为汇编指令,其实是在分析其中的关系,学逆向用
SDK用的是c,逆向针对的是c,漏洞挖掘漏洞利用针对的是c,MFC学的是c++,项目用的是c++,调试器、壳用的是C++
局部变量的本质:函数的属性
函数距离不远,局部变量也大致在相邻的空间,局部变量跟着函数跑
突破
debug版为什么要在后边添cc,后边讲调试器会了解
用16进制查看exe,总是以MZ开头,还有一句“该程序不能运行在dos模式下”,在dos模式下运行这个exe这句话会显示出来,说明该程序是能运行在dos模式下的,该程序运行在dos模式下是可行的,所以说pe文件是兼容dos的。原先老一代程序员写出的音乐播放器在windows下一双击能播放音乐,在dos下一运行就是dos字符版的窗口也能播放音乐
pe 这个是新的exe执行文件的一个头的标记
全局变量:exe用16进制查看时这个全局变量所在偏移位置是全局变量所在起始位置,加载到内存之后,相对于这个头部的相对偏移每次都不会随机变动,它的相对偏移一定是固定的,所以有很多做外挂的人把这玩意称为基址
静态变量的本质:
带作用域的全局变量(纷杂的表象拨开)
你用逆向分析的时候根本区分不了谁是全局变量,谁是静态变量
用另外一个函数的局部变量修改main函数的局部变量,在作用域之外修改的,为什么能突破c语言的枷锁
局部变量是容器,左边的这些个类型是给程序员用的,当你理解其真正含义之后,你想咋用咋用
黑客技术在突破限制的时候都是一个套路:用更底层的规则去突破上层的限制,人的规则
所有特别厉害的黑客都是精于人心或研究过心理学,社会工程学——-最底层的逻辑
windows系统或者各种各样的操作系统有一个特权(请求、描述..)级别——-特权级,cpu里边用两位来表示它,0、1、2、3,总共有四个层次,分别称之为ring 0,ring 1,ring 2,ring 3,但是世界上百分之百的主流操作系统只用到了3环和0环,0环即所谓的内核层(操作系统内核的),3环就是所谓的用户层(跑应用程序的:资源管理器、看到的桌面),所有0环的东西你在电脑屏幕里面看不见,安卓、ios都有进程、线程的概念,进程就是一个整体,一个应用程序执行之后的实例,进程就是教室,线程就是有10个老师同时给你讲课,在操作系统内核里边没有进程的概念,只有线程的概念,而且进程和线程的关系是:(windows里边)线程包含进程,进程更小,线程更大,从结果上来讲,同属于一个进程并且多个线程是多个不同的线程里边同时包含了进程,纤程:把一个线程模拟出了多个线程,现在这个进程基本上相当于一台小虚拟机,每个进程有自己单独的cpu、内存等等,就是一个独立的小电脑,每个进程里边cpu的状态可以是完全不一样的
买来dos———->MS-dos 比尔盖茨新瓶装旧酒卖windows等NT面世
大卫卡特勒开发NT系统————->windows_NT4.0
windows_NT5.0————-windows2000
windows_NT5.1————-windowsxp
windows_NT5.2————-windows2003
windows_NT6.0————-windowsvista
windows_NT6.1————-windows7
windows_NT10.0————-windows10
技术名称(内核版本号) 售卖名称
详细:
Microsoft Windows NT 3.1 (1993-2000) 7年
Microsoft Windows NT 3.5 (1994-1995) 1年
Microsoft Windows NT 3.51 (1995-2001) 6年
Microsoft Windows NT 4.0 (1996-2007) 11年
Microsoft Windows 2000 (Windows NT 5.0) (1999) (2000-2010) 10年
Microsoft Windows XP (Windows NT 5.1) (2001-2014.4.8) 13年
Microsoft Windows Server 2003 (Windows NT 5.2) (2003-2015) 12年
Microsoft Windows Server 2003 R2 (Windows NT 5.2) (2006-2015) 9年
Microsoft Windows Vista (Windows NT 6.0) (2006-2017) 11年
Microsoft Windows Server 2008 (Windows NT 6.0) (2008-2018) 10年
Microsoft Windows 7 (Windows NT 6.1) (2009-2020) 11年
Microsoft Windows Server 2008 R2 (Windows NT 6.1) (2009-2018) 9年
Microsoft Windows 8.0 (Windows NT 6.2) (2012-2016) 4年
Microsoft Windows Server 2012(Windows NT 6.2) (2012-2023) 11年
Microsoft Windows Phone 8 (Windows NT 6.2) (2012-2014) 2年
Microsoft Windows 8.1 (未安装更新的)(Windows NT 6.3)(2013-2014) 1年
Microsoft Windows 8.1 (已安装更新的)(Windows NT 6.3)(2013-2023)10年
Microsoft Windows Server 2012 R2 (Windows NT 6.3) (2013
Microsort Windows 10 (Windows NT 10.0) (2015至2025年)
查看内核版本号:
说操作系统版本最后说前面那个
windows1.0 MS-DOS
windows2.0
windows3.0
windows3.1
windowsNT
windows95
windows98
windows2000、windowsME(2月、7月发布)