dex内存提取

转 http://blog.csdn.net/asmcvc/article/details/18216531

智能手机的普及将移动互联网的发展推到了一个让所有人都为之兴奋的高度,我想即使是以商业眼光见长的“苹果教父”乔布斯也不会料想到短短几年时间,智能手机就已经成为了所有人离不开的商业产品,各种商业应用层出不穷,人们越来越习惯在手机上选购商品,越来越习惯用手机来购买火车票、电影票,越来越习惯用手机来完成支付。

       但随着而来的是日趋凸显的移动安全问题,据多家安全机构调查显示,智能手机病毒特别是在Android平台上最近几年呈爆发式增长,套餐窃贼、支付宝大盗等手机病毒则表明手机病毒已经越发智能、越发难以控制,并且危害巨大,窃取隐私、盗号、交易劫持等案例屡见不鲜……;这是一个技术贴,这些套话咱们到此为止,下面咱们说说移动安全怎么做。

       安全出了问题总要有人跳出来解决问题,但是我们希望跳出来的是“真卫士”而不是自身存在问题的“伪卫士”。笔者长期从事移动安全研究,对移动安全的各家解决方案都做过一些研究,有的很有价值但有的却不那么让人满意,下面就让笔者来揭秘多家移动应用加固的安全保护效果到底怎么样。

       国内某知名移动应用安全加固企业(针对Android平台)使用dex(android可执行文件)隐藏的技术,提供安全加固解决方案。但加壳/加密只是移动安全的第一步,也是最脆弱的一步。只能对抗静态分析和简单的逆向工程。

然而, 不管如何隐藏dex, 最终在运行时都必须释放到内存, 所以本文的思路是从内存中找到解密后的dex文件, 进而得到加固前的apk,由于dalvik的执行机制要求dex在内存中是连续的,所以想办法拿到内存的coredump就很可能完成破解。

       破解的过程,已有Bob Pan(一名匿名安全研究人员)发表在其他安全论坛上但却未引起重视,笔者也于早些时候考虑到这种方案并予以验证,在此感谢Bob Pan,文章地址:http://blog.csdn.net/pxb1988/article/details/17167795

 

笔者的破解过程如下:

1:安装加固后的apk并运行

2:将前面编译好的gdbserver复制到android模拟器里面,修改其权限

adb push gdbserver/data/local/tmp/

adb shell chmod 755/data/local/tmp/gdbserver

2、查看所装apk的进程

adb shell

ps

可以看出,共有三个进程,且相互ptrace,所以不能直接用gdb连接其主进程,但是可以gc线程、binder线程。

3:进入线程的tid目录下

ls /proc/345/task

可以看到:

 

这么多的线程,任意链接上一个即可。

4:链接一个线程

adb shell

cd /data/local/tmp

./gdbserver :1234 --attach346

 

5:另开一个终端

adb forward tcp:1234 tcp:1234

6:启动上面生成的gdb

./gdb

 

7:链接本地:1234端口

target remote :1234

8:然后输入gcore 拷贝

gcore

出现一下结果则表示已完成:

 

9:用vim打开core.346文件

vim命令行下输入:

:%!xxd

等待一段时间后就会出现:

 

10:搜索与程序相关的类名,记下大概位置

 

如上面的行号:34672

11:然后通过查找dex.035找到离它最近的dex文件头

 

搜索发现在3569346行的dex.035最近,应该是我们所需的dex文件。

12、从中读取dex文件开始位置和大小

从中可以读出,dex文件开始位置为:3676c10  十进制为:57109520

dex文件大小为:3508e0(起始位置偏移32位)十进制位:3475680

13:抠出dex文件

dd if=core.346 bs=1count=3475680(十进制的dex文件大小数值) skip=57109520(dex文件头的

起始位置的十进制数值) of=x.dex

x.dex即为提取出来的dex文件

 

总结:成功逆向出dex文件,我们就可以使用常见的apktool等逆向攻击继续完成到smali甚至java语言的逆向,在此就不累述了。整个过程不超过10分钟的时间,笔者就完成了对该Android应用的破解。该安全公司的安全加固似乎不能让人满意。此外,在笔者的研究下,该安全公司的安全加固还存在以下问题:

A:对Android系统的不同版本兼容性不完美,Android 3.x系统上不能运行经过该安全公司加固的应用。

B:dex(Android)可执行文件的本地化问题,据笔者研究发现,安全加固只是将dex文件解密并释放在本地的隐藏文件夹下存储(/data/data/应用名/.cache),即使不在内存中还原也可以使用自动化脚本将该dex文件本地还原,破解更加简单。

 

对于移动安全的担心,笔者在游走于各大安全论坛时发现在近期即将举行的OWSAP安全沙龙苏州站的议题就是针对移动应用安全。活动网址:http://www.owasp.org.cn/OWASP_Events/20140121

据笔者的了解,该沙龙是由通付盾安全团队协调举办的属于OWSAP体系的移动安全沙龙,当中就有对业内各家移动安全加固方案的比较。

据悉,通付盾也有自己的安全加固解决方案,并为几家金融机构和银行提供了安全加固,经笔者实际下载其加固后的应用安装测试,通付盾对一些加固中出现的问题做了处理。例如加固后的应用也可以在Android 3.x上运行,采用内存加载dex的加固方式,本地不存有解密后的dex文件,极大的提高了程序的兼容性、稳定性和破解的难度。此外,据了解,该公司提供的安全服务有较高的门槛,为了防止被黑客利用,通付盾有较严格的安全审核机制,一般只为第三方企业和金融机构提供安全加固方案,并对其要加固的应用进行全面的安全评估,确保其没有安全隐患。

此外,其公司创始人Dr.Wang从硅谷带回了移动安全的全新解决方案——“移动安全三战法:加固、密信、风控”,对移动应用实现从发布到使用、从客户端到会话再到安全风控的全程安全保护,或许能构建移动安全领域真正的SafeZone,让安全成为应用的DNA,增强自身的防护能力。

posted @ 2014-08-10 23:53  ☆绿茶☆  阅读(5787)  评论(0编辑  收藏  举报