LiME与Volatility的编译和使用
来源:互联网 发布:制作婚庆视频软件 编辑:程序博客网 时间:2024/05/16 16:08
1 下载内核源代码与LiME工具
(1)设备信息
型号:Samsung Galaxy S5
Android版本:6.0.1
基带版本:G9006VZNU1CPJ2
内核版本:3.4.0
(2)使用git命令下载LiME工具源代码:
https://github.com/504ensicsLabs/LiME
(3)下载设备对应内核源代码
网站地址(Samsung):
http://opensource.samsung.com/reception.do
本设备对应内核源代码文件夹为:SM-G9006V_CHN_MM_Opensource
2 准备编译LiME模块的环境
(1)配置环境变量
export NDK_PATH=/home/richard/android-ndk-r15b/export KSRC_PATH=/home/richard/SM-G9006V_CHN_MM_Opensource/Kernel/export CC_PATH=$NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/export LIME_SRC=/home/richard/LiME/src/
(2)在内核源代码目录/Kernel/arch/arm/configs/中查找与设备相匹配的默认配置文件。
将该配置文件拷贝至内核源代码主目录下,并重命名为“.config”。(本设备对应的默认配置文件为msm8974_sec_defconfig)
(3)执行命令,在图形界面中进一步更新内核配置文件:
$ make menuconfig
在图形界面中,选择Enable loadable module support目录,并选中该目录下的Forced module support和Module unloading选项,以配置支持LKM。
退出图形界面并更新内核配置文件.config。
(4)执行命令,配置内核源代码,为之后编译LiME模块做准备:
$ cd $KSRC_PATH$ make ARCH=arm CROSS_COMPILE=$CC_PATH/arm-linux-androideabi- modules_prepare
(5)编辑LiME工具源代码中的Makefile文件,为之后编译LiME模块做准备,如下:
obj-m := lime.olime-objs := main.o tcp.o disk.oKDIR := /home/richard/SM-G9006V_CHN_MM_Opensource/Kernel/PWD := $(shell pwd)CCPATH := /home/richard/android-ndk-r15b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/default:$(MAKE)ARCH=armCROSS_COMPILE=$(CCPATH)/arm-linux-androideabi--C$(KDIR)M=$(PWD)modules
(6)执行命令,编译LiME模块:
$ cd $LIME_SRC$ make
在LiME工具源代码目录下生成LiME模块:lime.ko。
3 使用LiME模块dump目标设备内存
(1)执行命令,将LiME模块lime.ko导入目标设备/sdcard/目录中:
$ adb push lime.ko /sdcard/lime.ko
(2)执行命令,设置本地主机和设备间的TCP端口转发通道:
$ adb forward tcp:4444 tcp:4444
(3)以root用户登录设备,执行insmod命令,以加载LiME模块至系统内核,并设置TCP转发端口为4444,dump出的设备内存格式为lime:
$ adb shell$ su$ insmod /sdcard/lime.ko “path=tcp:4444 format=lime”
错误:
insmod: cannot insert '/sdcard/lime.ko': Function not implemented
大部分Android手机的内核在编译时默认关闭了对于LKM的支持,要解决此问题,必须重新编译Android内核并刷入手机以支持LKM,具体实现可参考:
http://blog.csdn.net/rzwinters/article/details/75530835
(4)在本地主机中开启另一个终端,执行nc命令连接设备,以获取LiME模块dump出的设备内存:
$ nc localhost 4444 > limemem.m
P.S. 在执行insmod命令加载LiME模块时,还可以设置通过SD卡转储的方式获取LiME模块dump出的设备内存:
insmod /sdcard/lime.ko “path=/sdcard/limemem.m format=lime”
4 下载并编译Dwarfdump
以下文章内容均参考网页:
https://github.com/volatilityfoundation/volatility/wiki/Android#examine-the-memory-dump-with-volatility
(1)下载Dwarfdump源代码(libdwarf-20170709.tar.gz):
https://www.prevanders.net/dwarf.html
(2)执行命令,配置并编译libdwarf和dwarfdump:
$ cd dwarf-20170709/libdwarf$ ./configure && make $ cd ../dwarfdump $ ./configure && make
5 下载、配置并编译Volatility
(1)下载Volatility源代码:
https://github.com/volatilityfoundation/volatility.git
(2)编辑目录/tools/linux/下的Makefile文件,如下:
obj-m += module.oKDIR := /home/richard/SM-G9006V_CHN_MM_Opensource_LIME/Kernel/ CCPATH := /home/richard/android-ndk-r15b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/DWARFDUMP := /home/richard/dwarf-20170709/dwarfdump/dwarfdump-include version.mkall: dwarfdwarf: module.c$(MAKE) ARCH=arm CROSS_COMPILE=$(CCPATH)/arm-linux-androideabi- -C $(KDIR) CONFIG_DEBUG_INFO=y M=$(PWD) modules $(DWARFDUMP) -di module.ko > module.dwarf
错误:/bin/sh: 1: /home/richard/dwarf-20170709/dwarfdump/: Permission denied
Makefile中的DWARFDUMP变量应指向Dwarfdump主目录下dwarfdump目录中的dwarfdump可执行文件,即/dwarf-20170709/dwarfdump/dwarfdump。(细心)
(3)执行命令,编译Volatility,生成module.ko模块,并查看生成的module.dwarf文件:
$ make $ head module.dwarf
(4)执行zip命令,将module.dwarf文件与Android内核源代码中的System.map文件打包为一个zip文件,并移动至/volatility/plugins/overlays/linux/目录:
$ zip ~/volatility/volatility/plugins/overlays/linux/G9006V.zip module.dwarf ~/SM-G9006V_CHN_MM_Opensource/Kernel/output/System.map
错误:内核源代码目录中不存在System.map文件
按照以下网页中Cross Compile the Kernel步骤重新编译内核源代码,获得编译生成的System.map文件:
https://github.com/volatilityfoundation/volatility/wiki/Android#examine-the-memory-dump-with-volatility
6 使用Volatility查看dump出的设备内存
进入Volatility主目录,执行python脚本插件,查找设备对应的profile文件:
$ cd ~/volatility/$ python vol.py --info | grep G9006V
参考如下网页中的python脚本插件命令,以分析dump出的设备内存:
https://github.com/volatilityfoundation/volatility/wiki/Linux-Command-Reference#linux_pslist
$ python vol.py --profile=LinuxG9006VARM -f ~/limemem.m linux_pslist
错误:
*** Failed to import volatility.plugins.registry.shutdown (ImportError: No module named Crypto.Hash)
参考以下网页解决该错误:
http://techglimpse.com/error-while-running-volatility-software-failed-to-import-volatility-plugins-malware-svcscanimporterror-no-module-named-crypto-hash-solved/
*** Failed to import volatility.plugins.malware.apihooks (NameError: name 'distorm3' is not defined)
参考以下网页解决该错误:
http://blog.csdn.net/my_xxh/article/details/51603953
- LiME与Volatility的编译和使用
- LiME与Volatility的编译和使用 (MD)
- volatility安装及使用
- LiME
- 局部可理解的与模型无关的解释(LIME)技术介绍
- linux 静态库与动态库的编译和使用
- windows下zeromq和jzmq的编译与使用
- C++模板函数和模板类的编译与使用
- windows下redis 和 hiredis的编译与使用
- (java)正确使用volatile变量(managing volatility)
- LIME:一种解释机器学习模型的方法
- LIME:一种解释机器学习模型的方法
- wxWidgets的编译与使用
- ffmpeg的编译与使用
- X264的编译与使用
- iw的编译与使用
- qvfb的编译与使用
- acl 的编译与使用
- vue.js 入门
- C-可变参数个数函数的构建
- 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载
- eclipse和jmeter链接mysql数据库
- 转载:JqueryUI学习笔记-选项卡tabs
- LiME与Volatility的编译和使用
- 浅谈activity的创建与DecorView的创建加载
- Excel中如何制作下拉列表及联动下拉列表
- MySql下最好用的数据库管理工具是哪个?
- 云计算、大数据和AI,如同长江后浪推前浪一般涌现区块链
- 数据链路层
- check第二次不生效问题
- 简单的聚类分析及应用
- maven-addplugin找不到插件