转 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. poj 2240 Arbitrage(最短路问题)

    Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit o ...

  2. (数位dp)Bomb (hdu 3555)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555     Problem Description The counter-terrorists found ...

  3. JDBC架构

    JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成: JDBC API: 提供了应用程序对JDBC的管理连接. JDBC Driver API: 支持JDBC管 ...

  4. Android Studio开发之Gradle科普

    我们以前开发都是用 Eclipse ,而 Eclipse 大家都知道是一种 IDE (集成开发环境),最初是用来做 Java 开发的,而 Android 是基于 Java 语言的,所以最初 Googl ...

  5. Windows 8创新之路——样章分享

    在电脑里面躺了大约也有半年多的光景了. 在Windows 8.1还有不到一个月的时间里,将这些内容分享出来,也算是对得起自己那段时间的熬夜. 希望大家多提宝贵意见. 谢! 点击标题可浏览SkyDriv ...

  6. form表单提交时action路劲问题

    项目总出现window上部署可以访问,linux下部署不能访问的问题 linux下访问action必须是全路径,可以加上“${pageContext.request.contextPath}”  便可 ...

  7. 深入探索AngularJS

    目录 深入探索AngularJS 作用域Scope是DOM和Directives交互的抽象 Scope是POJO对象 Scope是上下文 Scope继承树 Scope附加功能 正交功能 Element ...

  8. QT中的一些信号

    QLineEdit: 通过改变QLineEdit的echoMode(),可以设置其属性,比如以密码的形式输入. 文本的长度可以由maxLength()限制,可以通过使用validator()或者inp ...

  9. ConcurrentHashMap源码解析(2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. ConcurrentHashMap()     /**      * 创建ConcurrentHashMap ...

  10. Spring IOC 容器源码分析 - 填充属性到 bean 原始对象

    1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反 ...