安装和使用libvmi最新整理2022年|CSDN创作打卡

官方网址+安装

libvmi:https://github.com/libvmi/libvmi

1、安装依赖:

$ sudo apt-get install cmake flex bison libglib2.0-dev libvirt-dev libjson-c-dev libyajl-dev

cd到你要下载到的文件夹我是cd到了Desktop

cd Desktop
git clone https://github.com/libvmi/libvmi.git

如果是手动下载的zip压缩包,那么还需要解压

unzip -d /home/wen/Desktop /home/wen/Desktop/libvmi-master.zip
cd libvmi-master

用户名我的是wen。

LibVMI使用 CMake ,进入下载的libvmi-master文件夹,执行如下命令:

mkdir build
cd build
cmake ..
make

这些命令,创建了一个build文件夹,在这个文件夹下进行编译。

2、LibVMI安装说明

LibVMI安装说明

这里并不需要build,因为前面已经完成。
从install开始

2.1 官方说明

安装是可选的。如果您将要开发使用LibVMI库的代码,这将非常有用。但是,如果您只是在运行examples,则无需进行安装。如果选择安装LibVMI,可以使用以下步骤进行安装【官网说明】:

su -
make install
ldconfig
exit

2.2【实际操作】在build文件夹下

sudo make install
sudo ldconfig

在root权限下make,会出现
在这里插入图片描述然后ldconfig没有任何信息出现

3、配置LibVMI

3.1 官方说明

为了正常工作,LibVMI要求您在$HOME/etc/libvmi.conf 或 /etc/libvmi.conf.该文件为LibVMI将访问的每个虚拟机或内存映像提供了一组条目。这些条目指定操作系统类型(例如Linux或Windows)、符号信息的位置以及用于访问虚拟机或内存映像中的数据的偏移量。文件格式相对简单。通用格式如下所示:

<VM Name or Filename> {
    <key> = <value>;
    <key> = <value>;
}

VM名称是在使用“xm list”、“xl list”或“virsh list”命令时显示的名称。filename是内存映像的文件名,不包含整个路径。有9种不同的钥匙可供使用。ostype由Linux和Windows目标使用。系统映射仅用于Linux目标。其他变量指定偏移量,以便linux需要linux_*值,Windows需要win_*值。以下列出了可用的密钥:

  • ostype:支持 Linux或Windows来宾。
  • sysmap:虚拟机system.map文件路径。请注意,此文件必须从domU或来宾VM复制到dom0或主机VM中,以便LibVMI可以访问它。
  • linux_tasks:字节数(偏移量),在目标内核的linux/sched.h中,从sruct的开始到task_struct->tasks的字节数。
  • linux_mm:task_struct->mm的偏移量。
  • linux_pid:到task_struct->pid的偏移量。
  • linux_pgd:到mm_struct->pgd的偏移量。
  • win_tasks:到 EPROCESS->ActiveProcessLinks的偏移量。
  • win_pdbase:到 Offset to EPROCESS->Pcb->DirectoryTableBase的偏移量。
  • win_pid:到EPROCESS->UniqueProcessId的偏移量.

可以在libvmi包中找到有助于确定特定来宾的这些偏移量的说明和脚本。Linux/VMI中的offset/libfinder工具和Linux/VMI中的offset guests工具。

LibVMI包括显示调试输出的功能。此输出非常详细,但在跟踪应用程序或LibVMI本身中的错误时可能很有用。要启用调试输出,请取消注释libvmi/debug.h文件顶部附近的VMI_debug变量。在取消对该变量的注释后,您需要重新编译LibVMI(并且可以选择重新安装LibVMI)。启用调试输出后,您将在stdout上看到许多关于LibVMI操作的信息。
如果您请求开发人员提供帮助,请将调试输出(最好是完整的调试跟踪附在您的电子邮件或问题通知单上)与您的问题一起发送,因为这样可以更容易地诊断您的问题。
在对应用程序进行故障排除时,最好能够看到发生了什么。如果您认为问题在LibVMI中,可以尝试启用调试输出来识别问题。如果您认为在LibVMI中发现了一个bug,请向邮件列表发送一封包含此调试输出和bug描述的电子邮件。
如果希望看到应用程序内存映射,请考虑使用VMIIN PrimtHyx函数。此函数允许您轻松地将十六进制和ascii值从内存区域打印到标准输出,这通常可以简化调试。

3.2 实际操作如下

(1)获得findoffsets.ko,有两种方法:

  • 虚拟机中,下载libvmi,解压:
unzip -d /home/ubuntu-xen-1/Downloads /home/ubuntu-xen-1/Downloads/libvmi-master.zip
  • 从远程复制目录到本地:先查看远程的ip:
    宿主机上查看ip:
ifconfig

在虚拟机中拷贝宿主机上的文件目录:

scp -r wen @192.168.133:/home/wen/Desktop/libvmi-master/tools/linux-offste-finder /home/vm1/Desktop/

(2)编译

cd /home/ubuntu-xen-1/Downloads/libvmi-master/tools/linux-offset-finder
make
sudo insmod findoffsets.ko
dmesg

没有make,就sudo apt install make
没有gcc,就sudo apt install gcc
dmesg一堆红黄蓝绿,得到的红色字体就是虚拟机的配置信息
在这里插入图片描述
(3)宿主机上配置虚拟机的配置文件
然后在主机上, /etc/libvmi.conf。将上面红色的配置信息,写入文件中。

sudo gedit /etc/libvmi.conf

在这里插入图片描述
其中要注意的是:sysmap并不是宿主机上的,而是需要从虚拟机中拷贝出来。
方法就是xl进入虚拟机,然后通过scp等通过网络拷贝出来。

因为进入了虚拟机,用的方法就是从本地拷贝到远程。

cd ~
cd /boot
sudo scp System.map-

在这里插入图片描述
然后在配置信息的sysmap=地址中写上,最后如下所示。
在这里插入图片描述
在这里插入图片描述

ubuntu-1 {
ostype = “Linux”;
sysmap = “/home/wen/Downloads/System.map-5.4.0-84-generic”;
linux_name = 0xa78;
linux_tasks = 0x7c0;
linux_mm = 0x810;
linux_pid = 0x8c0;
linux_pgd = 0x50;
}

当然,如果你的内核进行了更新,那么就要注意,需要重新拷贝sysmap。

使用libvmi

进入libvmi的examples目录并执行"./vmi-process-list win7"查看libvmi是否监控成功。
【在这里,我进入的是build下的examples】

cd libvmi-master/build/examples
sudo vmi-process-list ubuntu-xen-1

请添加图片描述
查看module

sudo ./vmi-module-list ubuntu-xen-1

可以对比虚拟机中的module是否一致

lsmod

知识补充

命令

ldconfig

ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。
ldconfig的主要用途:
默认搜寻/lilb和/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件。
搜索出可共享的动态链接库,库文件的格式为:lib***.so.**,进而创建出动态装入程序(ld.so)所需的连接和缓存文件。
缓存文件默认为/etc/ld.so.cache,该文件保存已排好序的动态链接库名字列表。
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令

scp

scp 远程文件拷贝命令

Linux scp命令用于Linux之间复制文件和目录。

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。

(1)从本地复制到远程

命令格式:
建议使用这两个需要输入密码

scp local_file remote_username@remote_ip:remote_folder 

或者

scp local_file remote_username@remote_ip:remote_file 

样例:

scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;

2.复制目录

复制目录命令格式:

scp -r local_folder remote_username@remote_ip:remote_folder

或者

scp -r local_folder remote_ip:remote_folder
(2)从远程复制到本地

从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例
scp remote_user@remote_ip:remote_file local_file

scp -r remote_user@remote_ip:remote_dir local_dir

scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
scp -r www.runoob.com:/home/root/others/ /home/space/music/

说明

1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:

#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator

2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用

复制代码

参数说明:

-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

复制代码

SCP远程文件拷贝
scp远程拷贝命令

查看ip

ifconfig

如果没有,就需要安装net-tools

sudo apt install net-tools
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值