BruceFan's Blog

Stay hungry, stay foolish

0%

本文主要介绍一下APK简单加固的破解方法,以及一些其他的逆向技巧和知识。现在市场中加固APK的方式一般有两种:一种是对源APK整体做一个加固,放到指定位置,运行的时候再解密动态加载;另一种是对so进行加固,在so加载内存的时候进行解密释放。本文主要针对第一种方式。

阅读全文 »

要理解Java反序列化漏洞需要一些Java的相关知识:
1.使用Java反射机制
2.利用sun.reflect.annotation.AnnotationInvocationHandler类
3.调用TransformedMap类的decorate方法时,参数一的Map对象需要put进”value”与非空的值
4.AnnotationInvocationHandler类的实例化参数一需要为java.lang.annotation.Retention类
下面先介绍基础知识,再利用类TransformedMap与AnnotationInvocationHandler分析漏洞。

阅读全文 »

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

阅读全文 »

前一篇文章中介绍了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文件:

阅读全文 »