smali是目前Dalvik指令集最适合阅读和解析的汇编语法,是做Android软件逆向分析必须学习的内容。比较可惜的是,到现在也没有特别好的smali阅读工具。下面给出的是平时习惯的Vim+Ctags组合下阅读smali的方法。先看最终效果:
可以看到,vim支持smali的语法高亮,ctags支持解析smali中的域和方法。实现这个的方法如下:
smali是目前Dalvik指令集最适合阅读和解析的汇编语法,是做Android软件逆向分析必须学习的内容。比较可惜的是,到现在也没有特别好的smali阅读工具。下面给出的是平时习惯的Vim+Ctags组合下阅读smali的方法。先看最终效果:
可以看到,vim支持smali的语法高亮,ctags支持解析smali中的域和方法。实现这个的方法如下:
北卡大学蒋旭宪教授团队开发了一个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权限就做到了攻击,所以应该不是直接修改数据库。
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应用软件会遇到两个问题:
下面以Douban.fm.ipa的解密为例,解决这两个问题,为了保持完整性,从头开始说明步骤。注意有的指令在Mac上运行,也有的指令在iOS上运行,根据命令提示符区分。在iOS上的默认路径是/var/mobile/Applications/79A81359-AD9D-4268-91FC-93D1E77F5208/Douban.fm.app/。
Continue reading