月度归档:2012年07月

让Vim和Ctags支持smali语法

smali是目前Dalvik指令集最适合阅读和解析的汇编语法,是做Android软件逆向分析必须学习的内容。比较可惜的是,到现在也没有特别好的smali阅读工具。下面给出的是平时习惯的Vim+Ctags组合下阅读smali的方法。先看最终效果:

可以看到,vim支持smali的语法高亮,ctags支持解析smali中的域和方法。实现这个的方法如下:

继续阅读

Android上的点击劫持rootkit原型

北卡大学蒋旭宪教授团队开发了一个Android上的点击劫持型rootkit原型。从新闻和视频来看,这个rootkit可以做到:

1. 隐藏,使已经安装的软件在桌面、launcher和系统设置中消失,但实际上依然存在于手机系统中并能正常运行,恶意代码可以利用这个技术隐藏自身;

2. 劫持,使桌面或launcher中的图标被用户点击后,实际执行其他的恶意应用软件,后者可以伪装成前者,实现进一步的攻击。

新闻地址是:

http://web.ncsu.edu/abstract/technology/wms-jiang-clickjack/

视频演示位于:

http://www.youtube.com/watch?v=RxpMPrqnxC0

个人猜测攻击的是系统中intent-filter相关的数据库。但视频是在官方ROM中实现的,也就是说没有获得root权限就做到了攻击,所以应该不是直接修改数据库。

PiOS阅读笔记

SecLab的PiOS: Detecting Privacy Leaks in iOS Applications是目前iOS上仅有的几篇高质量论文之一。花了一整天的时间阅读,记一点笔记。

目的

检测iOS软件是否存在用户隐私泄漏。

方法

1. 对二进制文件,构造类层次结构,生成CFG

2. 从隐私数据源到隐私数据泄漏点的执行路径中,检查是否存在与用户的交互

3. 分析数据流,判断隐私数据是否真的从源转移到泄漏点

主要困难

1. Objective-C是OO语言,绝大部分的调用都是成员函数,并且调用并不使用虚函数表,而是通过消息传递(objc_msgSend)。实际调用了哪个函数,是一个动态判断的过程。

2. 分析数据流时,Cocoa这个框架也需要考虑进去

实现

一、CFG

完全用IDA Python插件的形式来做,使用IDA Pro的反汇编结果。

1. 从mach-o文件头部抽出__objc_classlist节,找出其中的所有类信息,得到类继承层次关系,此外还从节中得到每个类实现的方法和变量。

2. 解析方法调用,即从obj_msgSend还原出实际会调用的类和方法。为了确定R0和R1,采用backward slicing,即回溯相关寄存器的操作直到一个静态值,然后再操作会到调用点判断调用时的值。此外,对动态生成的值,只考虑其对象类型,不考虑实际的值。

二、找出可能的隐私泄漏

1. 找出隐私数据源和泄漏点的API,并通过CFG找出代码路径

2.数据流分析,基本是污点分析的思路

结果

1. objc_msgSend的解析成功了82%,经验上看这个数据比较真实

2. 观察到很多软件里都使用了相同的广告库代码,并且这些代码中普遍存在泄漏设备ID(UDID)的情况,这一点与后来Android上很像。此外又发现统计和跟踪用户行为的库。一共有55%的软件存在这些第三方库,因此建立白名单,避免重复分析。

3. 在205个软件的CFG中找到代码路径,在其中172个中自动找出数据路径。剩下33个中,6个确实不存在,有27个是误报,存在数据路径但没能检测出。

4. 找到的绝大部分是设备ID的,其次是地理位置的(这两类中,Cydia软件居然少于官方软件)。另外有5个泄漏通讯录、1个泄漏手机号、1个泄漏Safari历史记录和照片。

局限

1. objc_msgSend不一定能完整解析出调用

2. 从id关联到类型的问题

iOS5下手工解密应用软件

按以往资料解密iOS5应用软件会遇到两个问题:

  1. nm出来的符号里,没有start了,因此不知道在哪里下断点,即便下到常规的0x2000处,也会断不下来;
  2. 找到合适的断点后,gdb只要run就出现奇怪的错误,还是断不下来。

下面以Douban.fm.ipa的解密为例,解决这两个问题,为了保持完整性,从头开始说明步骤。注意有的指令在Mac上运行,也有的指令在iOS上运行,根据命令提示符区分。在iOS上的默认路径是/var/mobile/Applications/79A81359-AD9D-4268-91FC-93D1E77F5208/Douban.fm.app/。
继续阅读