记事本

基于Unicorn和LibFuzzer的模拟执行fuzzing

本文同步自银河实验室博客。 之前,银河实验室对基于unicorn的模拟执行fuzzing技术进行了研究。在上次研究的基础上,我们进一步整合解决了部分问题,初步实现了基于Unicorn和LibFuzzer的模拟执行fuzzing工具:uniFuzzer。 关于这项研究的相关背景,可回顾实验室之前的这篇文章基于 unicorn 的单个函数模拟执行和 fuzzer 实现,这里就不再缀述了。总体...

Java反序列化漏洞辅助工具之gadgetinspector

本文同步自银河实验室博客。 Java反序列化漏洞可谓是近年来人气颇高的一种漏洞。由于其影响范围广,造成危害大,每次新曝光的反序列化漏洞,往往都要掀起一片血雨腥风。而针对这类漏洞的自动化扫描,大都集中于反序列化的入口(source),但对于如何构造调用链(gadget chain),最终到达目标方法(sink),则仍然需要研究者花费大量人工工作。虽然有诸如ysoserial和marshals...

MP4v2视频库漏洞分析

背景介绍 MP4v2是一个读取、创建、编辑MP4媒体文件的开源库。这个开源库在各大Linux发行版仓库中都有提供,也有在Android和iOS上的移植。然而,由于代码较为久远,且似乎已经无人维护,其中存在的安全漏洞较多。最近我们对这个库进行了漏洞挖掘,目前为止已经发现并提交了5个CVE。漏洞的类型也较为典型,例如整数溢出,double free等。在这篇文章中,我们将依次对这些漏洞的成因进...

AFL改进小试

在阅读学习AFL源码的过程中,有一个变异阶段引起了我们的极大兴趣:havoc。AFL的做法,是将一系列变异随机组合到一起,因此这部分是不折不扣的“看天吃饭”。 然而,当我们搞清楚havoc的变异策略后,脑海中闪过的第一个想法就是:能不能减少一些“随机化”,尽量去变异那些“更重要”的字符,从而提高路径覆盖效率?于是,基于这一点,我们对AFL做了一些尝试改进,不过也踩了很多坑。 基本思路 ...

AFL文件变异一览

上一篇文章主要对AFL的一些实现细节进行了分析,但正如文章最后所说,还有很多细节讲到。所以我又另外写了这篇文章,专门介绍AFL是如何对输入文件进行变异的。 总的来讲,AFL维护了一个队列(queue),每次从这个队列中取出一个文件,对其进行大量变异,并检查运行后是否会引起目标崩溃、发现新路径等结果。变异的主要类型如下: bitflip,按位翻转,1变为0,0变为1 arithm...

AFL内部实现细节小记

AFL(American Fuzzy Lop)是一款开源的fuzzing工具。最近我对其代码进行了简要的阅读,大致总结了一些AFL的实现细节,在此记录整理。 代码插桩 使用AFL,首先需要通过afl-gcc/afl-clang等工具来编译目标,在这个过程中会对其进行插桩。 我们以afl-gcc为例。如果阅读文件afl-gcc.c便可以发现,其本质上只是一个gcc的wrapper。我们不...

在Android N上对Java方法做hook遇到的坑

之前编写的Android hook工具YAHFA,在Android N之前的环境上运行基本是没有什么问题的。但是,在Android N之后,同样的代码会造成应用崩溃,并且可以稳定复现。为了解决这一问题,我对Android N引入的新机制进行了一定的研究,并针对性地做了修复。由于网上关于Android N混合编译及方法hook的资料不多,这里简要记录下近期学习的内容和修复YAHFA的思路。 ...

讯飞输入法PC版日志上传解密逆向

入手 驰那边安装讯飞输入法后,他将全部文件打包发送过来。解压后发现有.exe和.dll文件: 所以要检查的目标,就是这些二进制文件。 根据旭抓包的结果,日志请求会访问 /log.aspx?c=1002&v=2.0&t=20170613144351 这样的地址,所以,最基本的就是在全部二进制文件中搜索字符串&t=。搜索确认后,发现在文件BlcCore.dll中...

机器学习在侵权微信公众号识别中的应用

研究背景 最近遇到了收集侵权的微信公众号的需求。根据前期沟通,整理得到了一批搜索关键词以及白名单。 于是,我对之前的公众号信息采集插件进行了调整优化,加快了搜索速度,得到了一批数据: 搜索关键词数量 118 采集字段 微信ID、公众号名称、账号主体、功能描述、是否通过微信认证、logo地址 ...

x86架构下对方法做inline hook的坑

最近在研究Android原生代码hook时,遇到了一个麻烦。具体来说,就是在x86架构下,方法inline hook后,在执行原方法时可能会segfault。这里简要记录下,希望之后能够解决这个问题。 inline hook的基本思路 对方法进行inline hook,基本上就是以下步骤: 将origin方法的起始几条指令,保存到backup 在backup的最后,跳转回or...