Android应用的内存抓取
来源:互联网 发布:淘宝举报售假要求 编辑:程序博客网 时间:2024/06/06 20:24
工具准备
1. 一台Windows PC,安装好Android NDK,能用ADB连接你的Android设备;另外需要专业版的WinHex,建议购买正版,写本文时是488RMB一套;
2. 一台root过的Android手机,内存最好1G以上,空闲存储空间2G以上,安装的系统版本最好在4.2.2以上;
(较早的版本可能会遇到gdb兼容性问题,不过笔者也没有在较老的版本本测试过,只是看到有文章说最好这个版本,所以老的版本说不定也可以工作,只要能找到合适版本的gdb就可以)。
3. 在Android设备上安装好BusyBox
操作步骤
一、用ADB登陆到你的Android设别,确保获得root权限(su)
二、在Android设备上启动你想抓取内存的应用
三、查出目标应用的PID
可以使用命令dumpsys meminfo | grep com.*找到你的目标应用,或这如果知道应用名关键字,用ps -ef | grep namekey也可以查到
四、用GDB调试程序,dump内存
如果你的设备上安装了gdb,直接使用命令 gdb -pid xxxx 就可以注入到目标程序,用gcore saveFile 就可以将应用的当前内存数据保存到saveFile文件中。保存文件时需要把目标文件设置到有写权限的目录下,这个输出文件大约需要占用1G左右的存储空间,选择目标位置的时候需要注意。
如果你的设备上还没有gdb,可以在网络上搜索适合你的手机CPU体系结构的gdb可执行程序,用adb push到手机上使用;
然而,实际上,Android的NDK里已经有了用于调试本地代码的GDB程序,只不过是在手机上运行gdbserver,然后在PC上远程连接调试的方法。下面的步骤介绍如何使用这中调试方式:
- 针对你的手机平台的gdbserver可以从NDK安装根目录下的prebuilt中找到,例如加入你的手机是ARM体系的CPU, 则使用$NDKROOT/prebuilt/android-arm/gdbserver/目录下的gdbserver程序,用adb push到你的手机上,放到/system/bin目录,添加可执行权限,运行即可:
gdbserver :1234 --attach pid
该命令会启动gdbserver,附加到ID为pid的进程上,并在TCP端口1234上监听gdb client连接。
- 在NDK目录$NDKROOT/toolchains目录下查找gdb客户端程序,如我的Android设备是ARM体系的,然后要在X86体系的PC上使用gdb客户端,所以打开的客户端就是: $NDKROOT/\toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin目录下的程序arm-linux-androideabi-gdb.exe。
在gdb提示符下输入下面的命令:
<pre name="code" class="plain">gdb>shell adb forward tcp:1234 tcp:1234gdb>target remote localhost:1234
使用下面的命令将应用的内存映像保存到文件:
gdb>gcore savefile.out
Note: 如果在用adb上传文件时遇到Read Only File System的问题,可以尝试切换到root用户,然后重新以读写方式加载文件系统的:
mount -o remount rw /system
五、使用WinHex解析文件内容
其实上面的步骤已经完成了抓取Android应用内存的任务,但是抓取出来的文件有什么用呢?其实抓出来的文件就是个可执行文件的内存映像,里面程序运行需要的内容应有尽有,如果你非常熟悉ELF文件的格式,完全可以自己编写一个工具解析出你想要的内容。
而这里,我介绍一个强大的工具,WinHex。
用WinHex打开上面dump出的内存文件,选择tools->Disk Tool->File Recover by Type,然后选择你感兴趣的文件类型,并设置查找选项,选择输出目录,即可进行恢复。
整个操作步骤就是这样了,要拿到你想要的内容,就看自己的功力了。
当然,要完成这个操作的前提是你的gdb能attach到目标进程上去,有些应用可能会使用反调试技术,如腾讯的手游,这种方法就不好使了,在第一步启动gdbserver的时候就会出错。如何处理这种情况就是另外一个话题了。
0 0
- Android应用的内存抓取
- 抓取Android应用的log
- Android 内存优化---管理应用的内存
- Android应用的内存分析
- Android应用的内存分析
- Android应用的内存分析
- android 管理应用的内存
- Android应用的内存分析
- android的log抓取
- Android内存泄露抓取工具leakcanary
- Android内存泄露抓取工具leakcanary
- Android 利用jsoup 抓取腾讯应用市场的软件APP,作为我们自己应用的数据
- Android 利用jsoup 抓取腾讯应用市场的软件APP,作为我们自己应用的数据
- Charles抓取iOS/Android应用网络封包
- 使用Fiddler抓取android应用http数据
- 防止android应用的内存泄露
- 关于android应用--内存的优化
- Android应用获取更多内存的方法
- 数组中元素原地逆置
- xcode安装模拟器失败 (could not download and install iOS 7.1 simulator ,需要授权才能安装这些软件包)
- 任玉刚【Android开发艺术探索】读后笔记一
- Android adb 常用的几个命令...
- 内联,重载,缺省参数
- Android应用的内存抓取
- 数组和指针
- ubuntu su 密码
- 线程同步,对象级别的锁和类级别的锁
- 求输入数字的和以及均值 ---C++
- 使用spring-data-redis开发redis应用
- 读书笔记之-node入门
- g711u与g729比较编码格式
- android随笔08——代码注册广播接收者