文件名称:编写追踪程序-learun 力软7.0 安装教程手册 内部版.
文件大小:12.95MB
文件格式:PDF
更新时间:2024-07-29 18:28:30
信息安全大赛 获奖作品
(3)编写追踪程序 这是我们工作中 具挑战性和创新性的技术工作。为了能够从 底层了解Qemu虚拟机与客户主机之 间的通信过程,我们深入学习了Qemu的源码和linux内核。下面是分四块介绍我们的追踪程序: 分析qemu源代码,qemu把每一个目标cpu指令分割成有一段c代码实现的位操作指令集,这些c 代码经gcc编译到一个目标文件中,然后动态翻译器将其作为输入把guest的指令存储到内存中 并翻译成连续的host操作系统可执行的指令块,然后设置相关的跳转地址,以供系统执行。 修改qemu源代码,在主函数中添加接口函数,在i386相关代码中添加日志记录模块,在vl.c的 主函数main中添加日志文件的名称、路径等信息;更多的修改主要体现在systable.h中,首先 把Linux 2.6.20内核相关的数据结构及函数等移植,然后分别添加了捕捉系统调用名称、进程 号、父进程号、进程名、父进程名、返回值等重要参数的函数,共分析了327个系统调用。其次 找 到 Qemu 的 执 行 命 令 前 和 返 回 时 设 置 环 境 变 量 的 函 数 接 口 void raise_interrrupt (int,int,int,int)和void op_iret_protected(void),然后在其中添加我们自己的接口函数, 即sys_int_enter(int)和sys_int_ret(void)函数,前者获取执行系统调用前的环境变量值,后 者获取执行完系统调用后返回的系统变量值,如寄存器的值、函数的参数以及函数的返回值等 等。 在这300多个系统调用中我们根据程序的特点着重针对内存地址转换、open和execve等调用添加 细化的函数,使其输出更加具体、准确。 编写过程中 大也是 难的部分是物理地址和逻辑地址的转换,我们在参考大量linux内核书籍 的基础上,成功掌握了内核的地址转换机制,这是可以准确记录进程信息和系统调用信息的基 础。 要访问进程内核堆栈的信息,必须找的由用户堆栈切换到内核堆栈的切换点,从而根据ESP找到指 向进程内核栈顶的指针,又因为进程内核栈的大小是8K,栈顶指针经过加减,指向了存储进程信息的栈 底,于是获得了有关进程的PID、PPID、进程名等信息。 4)Qt编程实现前台图形界面: 这是我们为了不同用户考虑而做出的一项体现我们系统的广泛使用性和创新性的工作。 Qt 提供了跨平台的 c++编程方式,它使用“一次编写,随处编译”的方式,可用于构建多平台图形用户界 面。我们使用 Qt 编写了在 linux 下的图形界面 WatchLog 来显示追踪到的日志结果,使得用户可以更方便的使 用蜜罐系统进行系统调用信息的查看和管理。 3.实验及结果 运行环境: 四、 Host OS:Fedora 10