BruceFan's Blog

Stay hungry, stay foolish

0%

最近一直在做机器学习相关的工作,但是对机器学习的基础还没有什么太好的掌握,所以打算从头开始学习一些基本的算法,太深入的数学原理先不深究,需要用到时再补吧(说得跟真的一样)。
$k$-近邻算法,它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每个数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。一般来说,我们只选择样本数据集中前$k$个最相似的数据,这就是$k$-近邻算法中$k$的出处,通常$k$是不大于20的整数。最后,选择$k$个最相似数据中出现次数最多的分类,作为新数据的分类。

阅读全文 »

这篇文章用python实现一下区块链的基本概念,主要目的是凑热闹学习区块链相关知识,没有太大实际用途。

创建区块链

区块链就是许多区块的链表,区块链里的每个链表都有自己的签名,包含前一个区块的数字签名和一些数据(例如交易)。

阅读全文 »

监督学习和无监督学习

简单来说:是否有监督(supervised),就看输入数据是否有标签(label)。输入数据有标签,则为有监督学习,没标签则为无监督学习。

阅读全文 »

模板是C++中泛型编程的基础,一个模板就是一个创建类或函数的蓝图。

函数模板

我们可以定义一个通用的函数模板(function template),而不是为每个类型都定义一个新函数。compare的模板版本如下:

阅读全文 »

题目概述

这是一道CTF的kernel题,题目不是很难,但是可以学到很多知识,下面会用两种方法对这个题目进行解决:
1.修改进程的cred结构体中权限相关的信息,将权限改为root;
2.通过ROP将cr4中的smep位置反,关闭SMEP机制,然后ret2usr获取root权限。
题目给出了三个文件:rootfs.cpio、bzImage和boot.sh。boot.sh内容如下:

阅读全文 »

之前写过一篇文章介绍过libc malloc,主要是PC上的malloc机制。这篇文章要介绍的是jemalloc,Android早在5.0就切换到了jemalloc。所以想要学习Android上堆相关的漏洞利用就要对jemalloc有所了解。

阅读全文 »

CVE-2015-3636是一个Android系统上可通用的root提权漏洞,这种提权漏洞的挖掘越来越困难,一方面是因为Android系统碎片化十分严重,另一方面是漏洞缓冲机制的不断引入。

漏洞概述

该漏洞属于Linux Kernel级别的use-after-free漏洞,存在于Linux内核的ping.c文件中。当用户态调用系统调用socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP),用返回的socket文件描述符作为参数调用系统调用connect(),并且connect的第二个参数中sa_family == AF_UNSPEC时,就会因为访问0x200200这个地址引起系统crash。如果攻击者巧妙地填充或者覆盖PING socket对象,就能达到获取root权限的目的。

阅读全文 »

前面一篇文章介绍过libFuzzer的基本用法了,本文就用libFuzzer来搞一些实际的事情。这里的学习还是以libfuzzer-workshop这个系列教程为主。

Heartbleed Vulnerable(CVE-2014-0160)

编译有漏洞的openssl版本 libfuzzer-workshop/lessons/05

阅读全文 »

简介

LibFuzzer是一个in-processcoverage-guidedevolutionary模糊测试引擎,是LLVM项目的一部分。LibFuzzer和要被测试的库链接在一起,通过一个特殊的模糊测试进入点(目标函数),用测试用例feed要被测试的库。fuzzer会跟踪哪些代码区域已经测试过,然后在输入数据的语料库上产生变异,来最大化代码覆盖。代码覆盖的信息由LLVM的SanitizerCoverage插桩提供。

阅读全文 »