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

dex内存提取,布布扣,bubuko.com

时间: 2024-08-19 09:34:28

dex内存提取的相关文章

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

内存工具从内存中抓取SWF一般是依靠寻找SWF的前7个字节(3个SWF文件必有的标示字节“FWS”或“CWS”或“ZWS”+4个记录该SWF文件长度的字节),所以避免被提取我们只要在加载SWF到内存后,修改这头7个字节即可(SWF加载后修改这几个字节不影响SWF的运行). 那么SWF在内存中的字节在哪儿呢? 1.对于文档类来说就是: 1 this.loaderInfo.bytes; 2.对于加载的SWF来说是: 1 loader.contentLoaderInfo.bytes; 所以我们只要修改

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

WeTest 导读 历时五天的内存优化已经结束,这里总结一下这几天都做了什么,有哪些收获.优化了,或可以优化的地方都有哪些.(因为很多事还没做,有些结论需要一定样本量才能断定,所以叫一期)一期优化减少JavaHeap内存占用约26.5M. 在任何性能优化之前,要做的第一件事就是找到性能瓶颈!而找到性能瓶颈通常需要强大的debug工具辅助.内存方面Android有 AndroidStudio 的 Android Profiler.Allocation Tracker,以及Eclipse的MAT用于

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

原文地址:全面理解Java内存模型(JMM)及volatile关键字 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入理解Java并发之synchronized实现原理 Java并发编程-无锁CAS与Unsafe类及其并发包Atomic 深入理解Java内存模型(JMM)及volatile关键字 剖析基于并发AQS的重入锁(Reetr

DSP2812  启动详解

百度文库转载 1. 从0X3F FFC0处复位→执行0X3F FC00地址处的初始化引导函数(Initboot) →根据GPIO选择引导模式→确定用户程序入口地址→从入口处开始执行用户程序. 输入外部引脚为/XRS, /XRS为低电平时,DSP终止执行,PC指向地址:0x3FFFC0,当/xRS变成高电平时,DSP开始执行0x3FFFC0中存放的指令.这条指令是条跳转指令或者说是复位中断向量,这个中断向量指向地址0X3F FC00处的初始化引导函数(Initboot),即将地址0x3FFC00(

SSH学习三 SESSION

一.session方法 Session:由同一个IE窗口向同一个WEBAPP发的所有请求的总称,一个会话 同一个会话的多个额请求可以从前到后多个请求.??祖给孙,孙不给祖 浏览器:搜集sessionID信息,并发到服务器.没有就不发送. 查找sessionID,若找到,看servlet是否需要session,需要就从服务器内存提取旧的session对象.否则维持旧的Session不动,修改session的使用时间. 如果没找到,看是否需要session,再创建session对象,并且保持sess

360加固保动态脱壳

测试环境: 调试器: IDA6.5 手机及系统版本: .SO层脱壳 一:.如何到达壳入口点? 1.我是通过对dvmLoadNativeCode函数下断,分析它执行流程最后到达壳入口(如果您有更好的办法还请告知,感谢中...),函数dvmLoadNativeCode是执行加载so文件的操作.(2.3系统是这个名字),2.3以上系统被名称粉碎了,不过在2.3以上系统中可以在libdvm.so中搜索函数名也是可以找到的,(我当前系统函数名为:_Z17dvmLoadNativeCodePKcP6Obje

BoxedApp Packer 将您的原始应用“打包”成单个完全的可执行二进制文件

及时应对移动化趋势 在没有安装到本地硬盘驱动的情况下,使用闪存卡.网络文件夹或者可移动磁盘远程启动应用程序通常是一件令人头疼的事,你会发现,应用程序会突然会丢失文件.路径错误或者远程注册表故障等一系列问题.(真奇怪,别人都接触不到我的注册表,还怎么能对它进行改动!) 当安装一个应用不再是一个好的选择的时候,另外的方式就是将它变成一个可执行文件,不依赖外部资源,可以随时随地运行. 将应用压缩到二进制文件中 BoxedApp Packer是一个开发者实用工具,能将您的原始应用“打包”成单个完全的可执

Android应用的安全的攻防之战

一.前言 在前两篇破解的文章中,我们介绍了如何使用动态调试来破解apk,一个是通过调试smali源码,一个是通过调试so代码来进行代码的跟踪破解,那么今天我们就这两篇文章的破解方法,来看看Android中开发应用的过程中如何对我们的应用做一层安全保护,当然现在市场中大部分的应用已经做了一些防护策略,但是没有绝对的安全,破解只是时间上的问题.所以攻破和防护是相生相克,永不停息的战争,没有绝对的安全,也没有万能的破解之道. 下面我们就来看看如何做到我们的应用更安全,我们主要从这五个方面来看看怎么操作

Android动态逆向分析工具ZjDroid--脱壳神器

项目地址:https://github.com/BaiduSecurityLabs/ZjDroid 前提条件: 1.Root手机一部 2.须要通过Xposed installer( http://dl.xposed.info/latest.apk)安装Xposed Framework; 一.ZjDroid工具介绍 ZjDroid是基于Xposed Framewrok的动态逆向分析模块,逆向分析者能够通过ZjDroid完毕下面工作:1.DEX文件的内存dump2.基于Dalvik关键指针的内存Ba