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

原创粉丝点击