[zhuan]Android安全讲座第九层(二) 内存dump
http://sunzeduo.blog.51cto.com/2758509/1409450
近来android上越来越多的应用对自身的保护机制加强了重视,主要表现在几个方面。
1 dex加壳
2 so加壳
3 dex藏在so中,在适当的时候释放。
这是技术上一个进步,并且还有一些专业的公司提供了整个安全的解决方法,比如防ptrace,或者加密dex文件等。但是不管如何,在技术层面,cpu要
运行的指令还必须是cpu能够支持的,除非不考虑效率利用复杂的动态内存机制来保护代码,一般情况下,加载内存的so或者dex等文件还都是原生态的
cpu可以执行的指令集。
因为有时候骇客要破解你精心涉及的算法是一件很麻烦的事情,他要求一条一条的看枯燥的汇编代码,不是达不到,而是效率特别低。所以这个时候内存dump却是骇客们经常采用的一种手段了。
linux下的内存dump离不开
ptrace,所以有些安全方案直接防止别的进程对其ptrace,主要手段就是ptrace住自己。即便如此,依然有孜孜不倦的骇客成功绕开了防止
ptrace的保护机制,关于这方面的事情,我以后有时间在专门写一篇文章分享。今天只讲如何内存dump,内存dump需要的ptrace目标进程。
为了方便我个人的使用,我编写了一个memdump工具,这是一个elf的可执行文件,在android系统下adb shell进去以后直接可以执行。首先说一下这个工具的用法。
1
2
3
|
shell@android:/ # memdump usage: memdump pid start_addr end_addr filaname 255 |shell@android:/ # |
用法十分简单,将memdump通过 adb push拷贝到你的手机里面,我是放在了/system/bin 下面了,这样我不用每次找路径,直接运行命令即可。
然后后面需要有4个参数
1
2
3
4
|
pid 要dump目标进程的进程号 start_addr 要dump目标进程数据的虚拟起始地址 end_addr 要dump目标进程数据的虚拟结束地址 filename dump出来的数据要保存的文件名称(要求有路径) |
ok 介绍完了命令使用方法,下一步就具体操作一下如何使用的。
如图一
上图中我自己编写了一个 包名为 com.example.socketcomm 的apk应用,里面加载了一个 libsocketback.so的库,打开以后其进程号为 11164 ,通过查看其maps信息,发现其可执行的
代码段在
1
2
|
56d34000-56d37000 r-xp 00000000 103 : 04 579426 /data/data/com.example.socketcomm/lib/libsocketback.so |
这三个物理页面上
由于物理页面是以0x1000对其,我不知道这个so具体的大小,但是没有关系,先将其全部dump出来
再做处理。
如上图,
memdump 11164 0x56d34000 0x56d37000 /sdcard/dump.so
通过这个命令将libsocketback.so dump到了 /sdcard/dump.so
然后退出adb cmdline 以后,通过 adb pull 将 /sdcard/dump.so 拉到linux host机器上
再使用 readelf -h dump.so 查看 elf文件头部,果然是
Type: DYN (Shared object file)
这个共享对象。
仔细的同学会看到
readelf: Error: Unable to read in 0x370 bytes of section headers
这条错误,产生的原因是 linux在加载so的时候是按照程序视图的方式加载的,主要关心的是
Start of program headers: 52 (bytes into file)
这
个开始的头部信息,对于链接方式的视图的 段名等数据并不敏感,所以直接从内存dump出来的数据,是没有 .symstrtab .symtab
.strtab
这些段的,所以解析错误也很正常。一般常用的修补so的方法是拿到原来的so,这个你只要有这个应用就应该能拿到,然后根据elf文件头部,找到
Start of section headers: 12600 (bytes into file)
段表在文件中的偏移地址,拼接一下文件即可,这个程序的编写需要对elf文件有一定的了解,回头我会根据自己的研究和学习补充一些elf格式相关的博文。
从本质来看,基本上这个时候的so中的指令都应该是符合业务逻辑的指令了,dex文件的提取同理,这个时候大家可以通过ida工具对其进行静态分析。
附件为:memdump工具,我压缩了一下,解压即可,关于源代码,谁有需要在下面留个邮箱,我发过去即可。
[zhuan]Android安全讲座第九层(二) 内存dump的更多相关文章
- Android安全讲座第九层(二) 内存dump
近来android上越来越多的应用对自身的保护机制加强了重视,主要表现在几个方面. 1 dex加壳 2 so加壳 3 dex藏在so中,在适当的时候释放. 这是技术上一个进步,并且还有一些专业的公司提 ...
- Android笔记--Bitmap(二)内存管理
Bitmap(二) 内存管理 1.使用内存缓存保证流畅性 这种使用方式在ListView等这种滚动条的展示方式中使用最为广泛, 使用内存缓存 内存缓存位图可以提供最快的展示.但代价就是占用一定的内存空 ...
- Android学习系列(37)--App调试内存泄露之Context篇(下)
接着<Android学习系列(36)--App调试内存泄露之Context篇(上)>继续分析. 5. AsyncTask对象 我N年前去盛大面过一次试,当时面试官极力推荐我使用AsyncT ...
- Android学习笔记_51_转android 加载大图片防止内存溢出
首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...
- Android应用程序框架层和系统运行库层日志系统源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...
- 5个Android开发中比较常见的内存泄漏问题及解决办法
android中一个对象已经不需要了,但是其他对象还持有他的引用,导致他不能回收,导致这个对象暂存在内存中,这样内存泄漏就出现了. 内存泄漏出现多了,会是应用占用过多的没存,当占用的内存超过了系统 ...
- android手机测试中如何查看内存泄露
(一) 生成.hprof文件生成.hprof 文件的方法有很多,而且Android 的不同版本中生成.hprof 的方式也稍有差别,我使用的版本的是2.1,各个版本中生成.prof 文件的方法请参考: ...
- Android 加载大图片到内存
本文演示android中图片加载到内存 首先设计界面: 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- Android系列之网络(二)----HTTP请求头与响应头
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
随机推荐
- dedecms织梦首页被篡改 网站被黑被跳转的解决办法建议
2018年的中秋节即将来临,我们Sine安全公司,最近接到很多用dedecms程序的企业公司网站客户的反馈,说是公司网站经常被篡改,包括网站首页的标题内容以及描述内容,都被改成了什么北京赛车,北京PK ...
- 【动态规划】[UVA1025]A Spy in the Metro 城市里的间谍
参考:https://blog.csdn.net/NOIAu/article/details/71517440 https://blog.csdn.net/c20180630/article/deta ...
- 20145202马超 2016-2017-2 《Java程序设计》第一次实验
之前做的(http://www.cnblogs.com/tuolemi/p/5707098.html) 其余的 断点的使用 行断点 条件断点 参考(http://www.cnblogs.com/roc ...
- [Hbase]hbase命令行基本操作
-进入hbase shell hbase shell - 帮助help help - 查看hbase versionversion - 查看hbase 状态 status - 创建表create 't ...
- mysql 函数以及操作总结
1. 拼接 concat(参数1,参数2,.. ,参数) 实现将多个字符串拼接到一起 要批量修改一个字段值 字段值又是复杂的sql 计算得来 通过查询字段值 和 修改的条件fundId(这是 ...
- 一步一步构建手机WebApp开发——环境搭建篇
从2007年,乔布斯带来了第一代Iphone手机,整个移动互联网发生天翻地覆的变化,也同时证明了乔布斯的一句名言:“再一次改变世界”. 在当今的移动互联网,手机App居多,很多App对移动设备的要求也 ...
- FJOI 2019 游记
(FJOI 2019 滚粗记) Day 0 早上刷了一些水题,然后就上路了. (画图3D好好玩) 来得晚只有十几分钟时间看考场,于是连试机题都没有Ak. Day 1 果然我还是太菜了 走过来的时候再讨 ...
- python发起请求提示UnicodeEncodeError
具体错误: UnicodeEncodeError: 'latin-1' codec can't encode characters in position 73-74: Body ('测试') is ...
- JMeter接口响应数据出现乱码的三种解决方法
第一种方法: Content encoding设置为utf-8,若仍为乱码,请用方法2 图1 第二种方法: 修改bin文件夹下的jmeter.properties文件 搜索ISO,把“#sampler ...
- JavaScript RegExp 身份证、账号密码、email正则
什么是正则表达式 正则表达式是构成搜索模式. 在文本中搜索数据时,可以使用此搜索模式来描述正在搜索的内容. 正则表达式可以是单个字符,也可以是更复杂的模式. 正则表达式可用于执行所有类型的文本搜索和文 ...