Category Archives: Hack Space

Module Check——Usage of std::enable_if

最近写代码的时候,总能在不少STL的函数声明里看见可爱的std::enable_if,虽然自己偶尔用过,不过也只是直接用STL库里的std::is_arithmetic之类。

于是就去Google了std::enable_if,然后参考了如下几篇post,写了一个较为通用的Module Check。

所以还是先从一个小的问题开始讲起吧~

假设我们做了一个中间类作为接口,这个中间类有一个模版构造函数,它接受一个类实例和一个double类型的参数,并且总是调用一个固定的实例方法。

class Intermediate {
public:
    template <typename T>
    Intermediate(const T& object, double value) {
        object.method(value);
    }
};

现在我们有如下的类,

class A {
public:
    void method(double d) const {
        std::cout<<d<<'\n';
    }
};

class B {
public:
    void method(int i) const {
        std::cout<<i<<'\n';
    }
};

虽然如下代码可以编译运行,但是假如我们希望只有类A被这样调用才有效呢?

Intermediate inter_a_1(a, 2.33); // print 2.33
Intermediate inter_b_1(b, 2.33); // print 2

Continue reading Module Check——Usage of std::enable_if

A simple xterm256 wrapper in C++

如果你的terminal支持xterm-256color模式的话,就可以在terminal中使用256种颜色。利用这256种色彩,可以做出很棒/很酷的效果。比如vim的语法高亮。

这里简单的实现了一个C++类,与cout的行为相同,仅在输出类xterm256::color的实例时做处理,将紧随其后的、截止下一个xterm256::color类实例前的文字输出为对应的颜色。

xterm256::color使用3个unsigned short作为初始化参数,依次对应RGB。在输出时,由于仅有256种色彩,将自动转为与xterm-256color颜色表欧氏距离最近的一种颜色。

简要的使用例子及截图如下

Continue reading A simple xterm256 wrapper in C++

C++下的通用K-means Algorithm模版

之前写过一篇利用k-means算法来计算图像中主要颜色的文章,K-means聚类算法计算给定图像中主要颜色。于是今天顺便写了个较为通用的C++下的K-means算法模版。

有一个主要的模版,还有一个稍有变化的模版,仅体现在传入的第三个参数上。

主要的参数如下,

Parameter Description
k 聚类的种数
min_diff 收束条件,旧的cluster中心与新的之间变化的距离
data1 std::vector<数据类型>
data2 std::vector<std::pair<数据类型, 该实例的统计个数>>
center 传入std::vector<std::pair<数据类型, 该实例的统计个数>>,返回该组数据的中心值
distance 传入给定数据中的两个元素, 返回它们的距离

返回值都是包含k个该种类型的元素的std::vector

Continue reading C++下的通用K-means Algorithm模版

数据库系统概论——C++实现求解 属性集X关于函数依赖集F的闭包 & 给定函数依赖集F的最小覆盖

所以再过几个小时就要考《数据库系统概论》了,看书看到一半手痒了,就把书上的两个算法用C++实现了一遍,这两个算法是

  • 求属性集X在U上的函数依赖集F的闭包
  • 求给定函数依赖集F的最小覆盖

详细的算法都写在注释里了~

Continue reading 数据库系统概论——C++实现求解 属性集X关于函数依赖集F的闭包 & 给定函数依赖集F的最小覆盖

wget漏洞CVE-2016-4971

前几天wget出了一个洞,

On a server redirect from HTTP to a FTP resource, wget would trust the HTTP server and uses the name in the redirected URL as the destination filename.

——https://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-4971.html

即,当wget请求一个HTTP站点上的文件时,如果HTTP服务器将它重定向到一个FTP服务器的话,wget将使用HTTP服务器所给出的在FTP服务器上的文件的名字。

如果我们重定向到一个名为.bash_profile的文件,而且用户下载文件的目录下又正好是默认的登录目录,且没有这个.bash_profile的话, 我们的目的就达到了。我们可以在.bash_profile中写上恶意代码,下一次该用户登录上来时,这些恶意代码就会自动被执行,于是23333

Continue reading wget漏洞CVE-2016-4971

在非越狱的iOS上安装系统级的自定字体

在很久之前写过一个笔记,iOS上CoreText加载字体并使用,然后今天做的是在非越狱的iOS上安装系统级的自定字体,其实就是模拟Apple Configurator生成配置文件,然后安装字体,方便的地方在于不需要用电脑,也不必下载Apple Configurator,直接在下面的表单里填上对应的项即可。





填写好基本的信息——字体链接、描述、名字——之后,就可以点“INSTALL FONT”了。

那么这个有什么用呢?在支持自定字体的程序中(比如Pages、Numbers、Keynote等等),我们可以使用自己喜欢的字体,不用越狱,也不用打开iFunbox一类的软件折腾。

Continue reading 在非越狱的iOS上安装系统级的自定字体

看,有灰机!——接收应答机ADS-B信号追踪飞机

根据能查到的资料,飞机在飞行过程中,其数据链有ADS-B(广播式自动相关监视,Automatic dependent surveillance – broadcast)ACARS(飞机通信寻址与报告系统,Aircraft Communication Addressing and ReportingSystem)。目前的话,ADS-B是用得比较多的一种。

有了数据链之后,由于数据链只是一种编码方式,我们需要的还有通信方式。通信方式有SSR(二次监视雷达,Secondary Surveillance Radar),VHF(甚高频,Very High Frequency),SATCOM(卫星通信,Satellite Communications)等。ADS-B是工作在SSR平台下的;而ACARS是通过VHF和空管进行双向通信的。如果离开了VHF的覆盖范围,ACARS就会自动切换到SATCOM方式。

工作在SSR平台下的ADS-B的大致流程如下。地面SSR发出询问电脉冲,飞机上的Transponder(二次雷达应答机)收到这个询问脉冲后,向地面SSR发回一组数据,其中包括飞机的飞行高度、速度和飞机SSR代码等信息。飞机上ADS-B发送的频率是1090MHz,只要我们用的芯片能接收这个到频率的信号,我们就可以追踪飞机了。

Continue reading 看,有灰机!——接收应答机ADS-B信号追踪飞机

Network traffic over DNS

之前试着实现了一下黑暗幽灵(DCM)木马的数据传输方式,A rather marvelous means to send data anonymously via fake DNS query,于是就想着,DCM是通过DNS包附带信息,传给DNS服务器,然后在关键节点上抓包来实现的数据传输。那么这些数据也会到指定的DNS服务器上,假如我们自己实现这样的一个DNS服务器,那不就可以当作代理使用了?

在Google之后,我发现这样的想法已经有人实现了——iodine。不过这里并不想讲如何使用这个软件,下面要讲的就是自己实现一个!

服务端的构想如下,有一个进程监听UDP 53端口,客户端发送身份请求,服务端回应一串字符作为身份代码(后文作identification),然后就算是建立起了链接。这一步类似于cookie或者session的概念。

随后,客户端带着identification,再去请求各种服务。那么这些服务是怎么来的呢?服务端上,有不同的"应用"向监听在UDP 53端口的进程注册服务。这一点类似于node.js里express的想法。

并且,很多需要登录的公共热点都是对DNS包放行的,于是23333

Continue reading Network traffic over DNS