A Comparison between LLVM Infrastructure and Tree-sitter for Static Analysis

Static analysis is often assigned to LLVM infrastructure for its rich interfaces for manipulating codebase. However, I leveraged tree-sitter frequently to perform static analysis on C code recently. After implementing some fundamental analyses (such as CFG, call graph, slicing, and so on), I further constructed some advanced methods. I dug out many new bugs in OpenSSL and Linux kernel. After experiencing it first hand, I think tree-sitter is enough to cope with lightweight code analysis such as code searching-like tasks (Weggli does achieve this by tree-sitter).

周末小记

今日立冬,早上起床后发现屋顶的玻璃窗上积满了树叶和雪,内心大喜。

使用Nginx与ModSecurity搭建WAF测试环境

本文介绍使用nginx作为服务器,ModSecurity作为WAF搭建攻击测试环境的过程。总的来说分为以下几个过程:编译安装ModSecurity,编译安装nginx,在nginx中开启ModSecurity并导入owasp-modsecurity-crs,测试四个过程。由于本文的目的是搭建测试环境,因此在docker中进行。

我读研究生的感受

研究生入学大约已经10个月,所以写这篇博文记录一下这段时间的生活感受,意图起到自我反思、启发后来者的作用。中科院的研究生(硕士与直博)制度是第一年集中培养,该学年主要任务为选修课程完成学分要求;第二年开始回所培养,以科研为主。因此,这10个月我都待在雁栖湖校区修读课程,同时承担组里的小部分任务。

HolaPeWatch

HolaPeWatch is an ease-to-use PE format file analysis tool. Since in developing, it can only support 32-bit with several functionalities like binary editor and goto.

比特币

写这篇文章时,每枚比特币的价格已经高于五万美元。我不懂、也不去讨论其背后的金融原理,但是比特币的技术细节我还是可以探究一二。比特币以“去中心化”闻名,那这么一个没有中心节点的系统是如何运作的,正是本文的主题。

使用pyenv进行Python版本与虚拟环境的管理

使用Python,尤其是运行机器学习相关的程序时,有两个经常需要面临的问题:Python的版本、Python依赖包的版本。pyenv可以方便地进行Python版本的管理;再结合pyenv-virtualenv插件,通过对不同项目创建不同的虚拟环境来应对依赖包的版本问题。

incaseformat样本详细分析

incaseformat病毒近日爆发,影响了不少主机。这么一个古老的病毒能够造成这么大的影响,令人感到意外。我从微步在线上下载了样本进行分析。需要注意的是,incaseformat有两个在野版本,详见https://www.52pojie.cn/thread-1351233-1-1.html。我分析的应该是原始版本,但是两个版本除了Sysutils::DateTimeToTimeStamp库函数所使用的全局变量IMSecsPerDay不同,其他没有什么区别。在文章的最后有样本相关资源的链接。

程序的生成与运行

这篇文章里,我将介绍一个程序从源码到内存中运行的整个过程。这涉及到很多方面的知识,如有错误还请读者斧正。

Reasons for failing to find target api using codeql

As a new practical tool to search bugs in target programs, codeql is more and more popular among software security researchers. A crucial step using codeql is to find target api, then you can define your own violation check. However, due to many possible factors, users may fail to find target api. Here I present a simple guide to find reasons. we assume the target api is tgt_api() in code.c.

Linux下软件编译常见问题

编译过程说明

在Linux下使用诸如apt、pacman和yum这样的软件管理工具安装软件比较简单,往往一条命令就足够了。但是,如果想安装一个旧版本软件进行测试与研究,或者是一个比较冷门的软件,就需要用户获取源代码从头进行编译。前一段时间我积累了许多这种经验,因此本篇文章从实用的角度描述编译时可能出现的问题及解决办法。

我的保研之路

托高中的福,在本科读了一个保研率还算可以的学校。在大一的时候我挺注重专业课的学习,系名次比较靠前;大二与大三我则改变策略—平日里以兴趣为指向进行和计算机有关的“瞎搞”,在考试前两周再集中时间复习。这三年的本科学习使我意识到,如果所处专业保研率还可以(不低于10%),在最后能够取得保研资格其实是一件轻而易举的事情。我也不知道这是对期末考试试卷的讽刺,还是对保研资格评定的讽刺。