(1)设备信息
(2)使用Git命令下载LiME工具源代码:
https://github.com/504ensicsLabs/LiME
(3)下载设备对应内核源代码
网站地址(Samsung):
http://opensource.samsung.com/reception.do
本设备对应内核源代码文件夹为:SM-G9006V_CHN_MM_Opensource
(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.o
lime-objs := main.o tcp.o disk.o
KDIR := /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=arm CROSS_COMPILE=$(CCPATH)/arm-linux-androideabi- -C $(KDIR) M=$(PWD) modules
(6)执行命令,编译LiME模块:
$ cd $LIME_SRC
$ make
在LiME工具源代码目录下生成LiME模块:lime.ko。
(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”
以下文章内容均参考网页:
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
(1)下载Volatility源代码:
https://github.com/volatilityfoundation/volatility.git
(2)编辑目录/tools/Linux/下的Makefile文件,如下:
obj-m += module.o
KDIR := /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.mk
all: dwarf
dwarf: 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
进入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