转 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,增强自身的防护能力。

dex内存提取的更多相关文章

  1. 避免SWF被内存提取工具提取的方法

    内存工具从内存中抓取SWF一般是依靠寻找SWF的前7个字节(3个SWF文件必有的标示字节“FWS”或“CWS”或“ZWS”+4个记录该SWF文件长度的字节),所以避免被提取我们只要在加载SWF到内存后 ...

  2. 内存提取SWF,破解doswf方法概述

    参考文献: http://blog.ceflash.com/%E5%86%99%E7%82%B9swf%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%9A%84%E4%B8%9C%E8% ...

  3. swfdump——从内存中提取swf的工具

    刚刚整理代码时发现以前写的从进程的内存镜像中提取swf文件的工具,现在分享出来,希望能帮到有需要的朋友.这个小工具是命令行使用,没有界面,可以很方便的从指定进程中(比如浏览器,swf播放器等等),按s ...

  4. 【腾讯优测干货分享】如何降低App的待机内存(五)——优化dex相关内存及本章总结

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/01Abwe0p1h3WLh28Tzg_Dw 1.5案例:优化dex相 ...

  5. Android内存管理(5)*官方教程:Logcat内存日志各字段含义,查看当前内存快照,跟踪记录内存分配,用adb查看内存情况时各行列的含义,捕获内存快照的3种方法,如何让程序暴漏内存泄漏的方法

    Investigating Your RAM Usage In this document Interpreting Log Messages                 内存分析日志中各消息的含 ...

  6. 我这样减少了26.5M Java内存!

    WeTest 导读 历时五天的内存优化已经结束,这里总结一下这几天都做了什么,有哪些收获.优化了,或可以优化的地方都有哪些.(因为很多事还没做,有些结论需要一定样本量才能断定,所以叫一期)一期优化减少 ...

  7. 全面理解Java内存模型(JMM)及volatile关键字(转载)

    关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoad ...

  8. 全面理解Java内存模型(JMM)及volatile关键字

    [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772461 出自[zejian ...

  9. 全面理解Java内存模型(JMM)及volatile关键字(转)

    原文地址:全面理解Java内存模型(JMM)及volatile关键字 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型( ...

随机推荐

  1. GDAL读写矢量文件——Python

    在Python中使用OGR时,先要导入OGR库,如果需要对中文的支持,还需要导入GDAL库,具体代码如下.Python创建的shp结果如图1所示. 图1 Python创建矢量结果 #-*- codin ...

  2. html5 ajax多图片可预览上传图片

    最近不是特别忙,我就利用html5写了个上传图片(或其他文件)的页面,主要利用是html5的file api,此页面比较简陋,没做样式的优化,包含上传图片预览,多图片上传,上传进度条(利用html5的 ...

  3. Java学习第1天:序言,基础及配置tomcat

    所谓是福不是祸,是祸躲不过,到底还是回到java的阵地上来.既然它这么热,那就学学它,现在这件事已经提上议事日程,也已经开始. 今天做的事: 泛泛的翻了几本书,敲了一些练习代码,比如字符串操作,接口等 ...

  4. C++对象模型:成员变量<一>非静态成员变量

    非静态成员变量,分别两种可能,要么类自定义,要么继承而来.根据<深度探索C++对象模型>的解读. class X { private: int x,y,z; }; 在这个类中,有三个私有成 ...

  5. 主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis)

    上一篇总结了潜在语义分析(Latent Semantic Analysis, LSA),LSA主要使用了线性代数中奇异值分解的方法,但是并没有严格的概率推导,由于文本文档的维度往往很高,如果在主题聚类 ...

  6. java锁的种类以及辨析(转载)

    java锁的种类以及辨析(一):自旋锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我 ...

  7. chrome常用小插件

    1.广告终结者                    (去广告) 2.adsafe2.0.1                  (去广告) 3.Infinity New Tab           ( ...

  8. 团队作业第5周 - 测试与发布(Alpha版本)- 天冷记得穿秋裤队

    团队作业第5周 - 测试与发布(Alpha版本)- 天冷记得穿秋裤队 Alpha版本测试报告 在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个? 前后端至今一共发现有10个bug,修复的 ...

  9. [device-orientation] 使用手机设备的方向感应实现图片选择

    <div class="main"> <h2>Device Orientation</h2> <table> <tbody&g ...

  10. 分形之列维(levy)曲线

    莱维C形曲线(Lévy C curve)是个自我相似的分形,最先由保罗·皮埃尔·莱维在1938年的论文Plane or Space Curves and Surfaces Consisting of ...