CVE-2012-4220 原理分析

漏洞信息

该漏洞的一些相关连接:

上述连接中对该漏洞的描述:

diagchar_core.c in the Qualcomm Innovation Center (QuIC) Diagnostics (aka DIAG) kernel-mode driver for Android 2.3 through 4.2 allows attackers to execute arbitrary code or cause a denial of service (incorrect pointer dereference) via an application that uses crafted arguments in a local diagchar_ioctl call.

漏洞分析

造成该漏洞的主要代码如下: More

ARM和Thumb模式下的断点总结

脱壳或者调试SO的时候,需要在恰当的时机让进程停下来,以便于附加调试器到该进程上。被无视的壳虐待之后,总结出以下几种断点的方法。

死循环

ARM Mode

ARM Mode下每条指令长度为4个字节,对应跳转自身的Opcode是FE FF FF EA,对应的助记符是:

LOAD:000033B8 FE FF FF EA                 B               loc_33B8

Thumb Mode

Thumb Mode下每条指令长度为2个字节,对应跳转自身的Opcode是FE E7,对应的助记符是: More

某国产DEX加固原理

Intro

这个加固是来自国内某个公司的作品,虽然在强度不是太高,但思路却不错,很好的平衡了性能和保护效果。目前看来,分析的这个版本只是一个很初级的框架,如果再此之上进行更多的防护和保护,强度会更好。

加固效果

加固之后,其效果是DEX中某些函数被加上ACC_NATIVE标志,原始的DEX代码已经消失,使得反编译、二次打包等功能失效。而加固之后新增的Libt**.so则负责在运行的时候,还原那些被抽取的Dalvik虚拟机代码。

相关结构

了解一下相关的结构有助于分析: More

The End Of An Era

P40429-102642_1

It’s the end of an era. Kevin邮件的第一句。

这次的主角不是Tarja,是我们。毕业后来到SRC,近两年,如今说没了就没了。太匆匆啊太匆匆。
这一段时间的经历对我影响至深,感谢SRC的每一位同事,感谢大家的贡献和努力。
两年的时间,我才明白如何才能做好,可惜现在没有机会再继续。这是我目前最大的遗憾。
多的不说了,祝各位以后顺利。

RDB文件格式分析

RDB文件常见于腾讯的客户端软件,大多数与UI资源相关,包括了各种图片、XML等。

Layout

[File Header][File Description Table][File Data]

文件头包含了文件基本结构的信息,File Description Table描述了文件名、大小和偏移,最后就是实际文件的数据,没有加密或者压缩。

File Header

File Header由四个域组成,C语言描述如下: More

Android Native Library脱壳的一些Tips

这几天看了一下Android下so文件的壳与脱壳,目前这一块应该还算是比较新的市场。个人感觉,受到调试器和计算资源的影响,虽然已经有多家厂商在做,但目前的总体强度和花样,远没有x86下的五花八门。

对于我们这种每天都在被各种病毒的变形外壳虐待的人,掌握了技巧,一般的Android壳还是很好脱的。其实,到目前为止我也只看了一个。

福利

今天,鱼妹兔在看雪论坛上发表的《ApkProtect 分析》绝对是一个很好的研究资料。其中包括了完整逆向的壳代码,还有大量注释的idb,很好的呈现了Android壳的主要流程和必须的细节。掌握了其中的关键,别的壳也就是时间的问题。 More

CVE-2013-3897 UAF Analysis

前几天面试管家,让我分析一个IE10以上的漏洞并给出详细报告,我挑了个CVE-2014-0322。从前都是从崩溃点之后开始分析ShellCode,这次把前前后后的细节都看了一遍,受益匪浅。趁着有感觉,今天又看了一下CVE-2013-3897,发现出错的逻辑是一样的,均和AddRef有关。POC来自这里

分析的目标是Windows XP Professional SP3下IE8的mshtml.dll文件,详细信息如下:

文件名:mshtml.dll
文件版本:8.00.6001.18702
MD5:D469A0EBA2EF5C6BEE8065B7E3196E5E
SHA1:FD6CB9D197BB58C339DEFE6E2C3B03FB3B62B440

这里只记录一下崩溃点之前对象的LifeTime,这也是UAF的主要原因。 More

Code Splicing of Armadillo

Code Splicing本质上是一种Anti-Dump机制。远离就是在加壳的时候抽取一部分代码,并在其中参杂些许垃圾指令。壳运行的时候申请一块内存,再把这些指令和原始的位置用jump连接起来。

大体流程如下:

1. VirtualAlloc申请足够大的内存空间。
2. 使用zlib解压被抽取的代码到该空间。
3. 解压一个表。该表的内存如下
     +0 - 原始跳转jump offset的偏移。
     +4 - 被抽代码相对于buffer的偏移。
     +8 - 有效的Splicing Code的长度。
4. 解压完之后就可以利用这个信息把原始的代码和Splicing Code进行连接。 处理方法:

因为加壳的时候处理比较多了在壳流程中能做手脚的地方不多。大体的解决思路是: More