利用VMware获取shell
获取 vmlinuz
方式一
对于 vmdk 没有加密的虚拟设备来说,可以直接通过挂载磁盘的方式提取出 vmlinuz 文件,但是要注意磁盘中的内核文件命名可能不同!!!
使用 DiskGenius 挂载虚拟磁盘,通过寻找 vmlinuz 文件的特征信息来确定具体文件
一般情况 vmlinuz 文件头部 会含有上图中的字符串信息,或者通过头标识符也可以判断文件,所以 flatkc 就是该环境中的 vmlinuz 文件,右键导出即可。
使用工具 vmlinux-to-elf 可以将内核文件转换为 elf 文件,方便我们接下来的逆向分析。
注意:请不要用该方法得到的 rootfs.gz 直接解压使用,否则后期打包时会出现问题!!!
方式二
将虚拟磁盘挂载到其他虚拟机中,并启动虚拟机
搜索并打开 disk
应用
找到新添加的硬盘后,点击启动按钮,接着硬盘会被挂载,进而得到 rootfs 和 vmlinuz
寻找断点函数
加载 vmlinux_elf 文件到 ida 中进行分析。
通常 vmlinuz 初始化流程中最后一步,内核会执行 init_post 函数。其中在该函数中最终会执行/sbin/init。
记录该函数地址 FFFFFFFF807AC0E9
,为了接下来调试做准备
配置 vm 调试信息
debugStub.listen.guest64 = "TRUE"
debugStub.listen.guest64.remote = "TRUE"
debugStub.port.guest64 = "12345"
debugStub.listen.guest32 = "TRUE"
debugStub.listen.guest32.remote = "TRUE"
debugStub.port.guest32 = "12346"