edx

干货|微软远程桌面服务蠕虫漏洞(CVE-2019-1182)分析

元气小坏坏 提交于 2019-12-24 14:40:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 2019年8月,微软发布了一套针对远程桌面服务的修复程序,其中包括两个关键的远程执行代码(RCE)漏洞,CVE-2019-1181和CVE-2019-1182。与之前修复的“BlueKeep”漏洞(CVE-2019-0708)类似,也具有蠕虫特性,即利用这些漏洞的恶意软件可能会在无需用户交互的情况下在易受攻击的机器间进行传播。 本文主要通过对CVE-2019-1182漏洞进行分析,让大家对于漏洞的成因及漏洞修复有一个更加全面的认识。 系统版本: Windows 10 1903 补丁: windows10.0-kb4512508-x64_1893edc9a11d760be11e49d2500170ceee8026d7 漏洞危害 公网开放RDP服务的主机数量巨大,影响面极大。危险等级:严重,请用户尽快升级更新。 成因分析 分别提取补丁前和补丁后rds(Remote Desktop Service)进程相关bin文件及相关驱动模块,经过ida和bindiff分析后定位到rdpbase.dll。该模块改动很少(只有一处函数差异),可以很快定位到问题函数,如下图所示。 分析差异函数DecompressUnchopper::Decompress发现存在一处整型溢出漏洞。 上图左边是patch之后的代码

C语言 数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理

最后都变了- 提交于 2019-12-23 16:05:49
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> C语言 数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理 C语言中,数组初始化的方式主要有三种: 1、声明时,使用 {0} 初始化; 2、使用memset; 3、用for循环赋值。 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码: [cpp] view plain copy #define ARRAY_SIZE_MAX (1*1024*1024) void function1() { char array[ARRAY_SIZE_MAX] = {0}; //声明时使用{0}初始化为全0 } void function2() { char array[ARRAY_SIZE_MAX]; memset(array, 0, ARRAY_SIZE_MAX); //使用memset方法 } void function3() { int i = 0; char array[ARRAY_SIZE_MAX]; for (i = 0; i < ARRAY_SIZE_MAX; i++) //for循环赋值 { array[i] = 0; } } 效率: 分别执行上面三种方法,统计下平均时间可以得出: for循环浪费的时间最多,{0} 与memset 耗时差不多。 原理: 1、for循环

EDX Course API: Getting EDX course list

谁说胖子不能爱 提交于 2019-12-13 07:58:22
问题 I am making a project in python/flask. I want to get a list of all the courses of edx. But the API provides the list page by page. I can't figure out how to get the entire list. Any help is appreciated. Thanks! 回答1: I assume you are using this endpoint https://courses.edx.org/api/courses/v1/courses/ As can be seen, there is a pagination block in the result: "pagination": { "count": 3261, "previous": null, "num_pages": 327, "next": "https://courses.edx.org/api/courses/v1/courses/?page=2" },

EdX API to get a Course List

断了今生、忘了曾经 提交于 2019-12-13 02:24:44
问题 It seems to be possible for anyone to get a list from all edx courses. unfortunately the available documents are looking incomplete. Is there any way to obtain a course list? 回答1: Are you talking about the list of courses running on edx.org? For that, you would need an OAuth key to access that API endpoint, and I don't believe that edx.org currently gives out OAuth keys. That API endpoint is currently intended for internal use only. If you want to run your own Open edX installation, then you

Integrating HTML5 EME video with edX platform: Why is “initDataType” empty?

折月煮酒 提交于 2019-12-12 05:39:49
问题 I have been trying to integrate HTML5 EME videos with edX video xblock In that I am facing this error: Failed to generate a license request DOMException: The initData parameter is empty. <script > 'use strict'; // Define a key: hardcoded in this example // This corresponds to the key used for encryption var KEY = new Uint8Array([ 0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b, 0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0xae, 0x3c ]); var config = [{ initDataTypes: ['webm'], videoCapabilities: [{

EDX - /tmp/VBoxGuestAdditions.iso: No space left on device (RuntimeError)

倾然丶 夕夏残阳落幕 提交于 2019-12-11 08:29:43
问题 When doing 'vagrant up' for EDX fullstack with the Eucalyptus 2 open release, I get this error message - /tmp/VBoxGuestAdditions.iso: No space left on device (RuntimeError) I'm running Ubuntu 16.0.4 LTS Also there is a report that the GuestAdditions versions don't match. I know this host is not officially supported yet, but I do like pioneering =] Got different reports about installed GuestAdditions version: Virtualbox on your host claims: 4.2.0 VBoxService inside the vm claims: 5.0.20 Going

冬天OS(三):jmp to kernel

99封情书 提交于 2019-12-11 07:59:16
-------------------------------------------------------- 打印内存信息 开启分页 jmp to kernle -------------------------------------------------------- 上节我们说过,在进入保护模式之后紧接着就要 jmp 到 kernel ,jmp 之前我们还要做几件事情... 一,显示可用内存并开启分页 ; ---------------------------- ; <loader.asm> ; Jack Zheng 11.26 ; ---------------------------- .... ; ---------------------------- ; ---- ; 在实模式下获得可用内存信息 ; ---- mov ebx, 0 ; ebx = 后续值, 开始时需为 0 mov di, _MemChkBuf ; es:di 指向一个地址范围描述符结构(Address Range Descriptor Structure) .MemChkLoop: mov eax, 0E820h ; eax = 0000E820h mov ecx, 20 ; ecx = 地址范围描述符结构的大小 mov edx, 0534D4150h ; edx = 'SMAP' int

堆和栈的区别 之 数据结构和内存

99封情书 提交于 2019-12-06 09:52:29
数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。 堆和栈都是一种数据项按序排列的数据结构。 栈就像装数据的桶或箱子 我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。 这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。 堆像一棵倒过来的树 而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。 通常我们所说的堆的数据结构,是指二叉堆。 堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。 由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。 内存分配中的栈和堆 先看百度百科中的内存堆栈介绍: 堆栈空间分配 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 堆栈缓存方式 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

1. 加载动态链接库

人走茶凉 提交于 2019-12-05 07:19:16
c_long 的大小和平台有关:(32)位。 64位 编译出来的 dll 如果和 python 的版本不一样,那么就会出现下面的错误 当前是 64 的,所以修改了之后就可以了。 #include<stdio.h> extern "C" void show() { printf("hello"); } from ctypes import * handle = WinDLL("./test.dll") handle.show() 也可以使用 LoadLibrary ,进行加载。 加载方式而造成调用方式不同。 此文章针对windows环境 如果成员方法使用了调用协议,那么就会有一个this指针作为隐式的第一个参数。 调用约定,32bit x86保护 edi,esi,ebp,ebx寄存器,使用fdx,eax对来处理返回值 __cdecl 32bit和16bit的约束相同,参数从右往左进栈(这样第一个参数就是栈顶元素),调用者清理参数。方法名前定义 _ 如 int Double(int a,int b){return a*b;}这里默认是__cdecl,通过在前加修饰符 _ 表示调用约定为 __cdecl __stdcall win32程序,除了可变参数函数外(可变函数遵循的是 __cdecl标准)以及一些使用 __fastcall的函数。 参数从右往左进栈,被调用者清理栈。方法名修饰

堆和栈的区别 之 数据结构和内存

前提是你 提交于 2019-12-04 14:56:25
数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。 堆和栈都是一种数据项按序排列的数据结构。 栈就像装数据的桶或箱子 我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。 这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。 堆像一棵倒过来的树 而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。 通常我们所说的堆的数据结构,是指二叉堆。 堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。 由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。 内存分配中的栈和堆 先看百度百科中的内存堆栈介绍: 堆栈空间分配 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 堆栈缓存方式 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。