BruceFan's Blog

Stay hungry, stay foolish

0%

这篇文章主要是参考中科大一位同学的文章,介绍了符号执行的基本原理,以及其中的路径状态空间爆炸、复杂结构语义和操作语义建模及程序全局分析这三个关键技术的难点。

阅读全文 »

前一篇文章中介绍了hook系统调用的方法,但是通过lsmod等方法可以看到正在内核运行的模块。所以本文主要介绍隐藏LKM的方法,其实很简单。

从lsmod命令中隐藏模块

对于rootkit来说,隐蔽性非常重要,但lsmod命令就能直接看到我们编写的模块。这里先介绍一下lsmod原理,以便理解如何在lsmod命令中隐藏模块。
lsmod命令是通过/proc/modules来获取当前系统模块信息的。而/proc/modules中的当前系统模块信息是内核利用struct module结构体的表头遍历内核模块链表、从所有模块的struct module结构体中获取模块的相关信息来得到的。结构体struct module在内核中代表一个内核模块。通过insmod把模块插入内核时,模块便与一个struct module结构体相关联,并成为内核的一部分,所有的内核模块都被维护在一个全局链表中,链表头是一个全局变量struct module *modules。任何一个新创建的模块,都会被加入到这个链表的头部,通过modules->next即可引用到。为了让模块在lsmod命令的输出中消失,就需要在这个链表内删除这个模块。

阅读全文 »

Linux文件系统与设备驱动

图中所示为Linux中虚拟文件系统(VFS)、磁盘/Flash文件系统及一般的设备文件与设备驱动程序之间的关系。

应用程序和VFS之间的接口是系统调用,而VFS与文件系统以及设备文件之间的接口是file_operations结构体成员函数,这个结构体包含对文件进行打开、关闭、读写、控制的一系列成员函数。

阅读全文 »

这是一个hctf2016的比赛题目,题目中的漏洞是堆相关的,但与之前写过的堆漏洞有所不同,程序中申请的堆块比较小,只能用uaf去利用。
经过对程序的分析,分析出如下两个结构体:

str_struct是漏洞利用所用到的结构体,每次创建字符串都会malloc一个这个结构。
漏洞发生在delete_str函数中,在delete时没有检查这块内存是否被释放过,造成double free。

阅读全文 »

这篇文章主要是对模糊测试的一个入门级的认识,没有太多干货,主要是一些概念性的东西,为以后深入学习做一点铺垫。
用于模糊测试的模糊测试器分为两类:

  • 一类是基于变异(mutation-based)的模糊测试器,这一类测试器通过对已有的数据样本进行变异来创建测试用例
  • 另一类是基于生成(generation-based)的模糊测试器,该类测试器为被测系统使用的协议或是文件格式建模,基于模型生成输入并据此创建测试用例。
阅读全文 »

ASM是一款基于JAVA字节码层面的代码分析和修改工具;无需提供源代码即可对应用增添所需的Debug代码。用于应用API性能分析,代码优化和代码混淆等工作。ASM的目标是生成,转换和分析已编译的JAVA class文件,可使用ASM工具读、写、转换JVM指令集。
ASM工具提供两种方式来产生和转换已编译的class文件:

阅读全文 »

前几天通过从网上查阅相关资料,大体了解了一些Android无源码调试的方法,本文主要总结无源码调试的三种方法:

  • smalidea + Android Studio
  • IDA
  • 插桩(Instrumentation)
阅读全文 »

什么是Rootkit

简单地说,rootkit是一种能够隐身的恶意程序,也就是说,当它进行恶意活动的时候,操作系统根本感觉不到它的存在。想象一下,一个程序能够潜入到当前操作系统中,并且能够主动在进程列表中隐藏病毒,或者替换日志文件输出,或者两者兼而有之——那它就能有效地清除自身存在的证据了。此外,它还可以从受保护的内存区域中操纵系统调用,或将接口上的数据包导出到另一个接口。本文将重点介绍如何通过hooking系统调用来进行这些活动。在本文的第一部分,我们将自定义一个系统调用,然后构造一个hook到这个系统调用上的rootkit。在最后一部分,我们将创建一个rootkit来隐藏我们选择的进程。

阅读全文 »