小鱼塘--自说自话的地方

  • 小玩意
  • 小想法
记录自己技术和想法地方
  1. 首页
  2. 底层技术
  3. 正文

虚拟化技术学习和简单总结

18 8 月, 2023 1279点热度 1人点赞 0条评论
内容目录

    一、背景

    前一段时间自己用ubuntu 但一些windows的软件无法使用,所以用到wine,跑起来一些程序,但效果肯定没有windows好的,毕竟知识模拟。有太多地方需要处理,比喻字体,我开始模拟网易云音乐无法启动,后面我发现是字体没有安装,后面我把一些必要的字体安装就可以了,想不到字体这么重要。

    二、知识点

    1. 进程虚拟化(依赖和非依赖运行系统)
    2. 系统虚拟化

      三、分析

      一、进程虚拟化(依赖)

      这种windows常见内存加载dll或者exe或则沙箱技术,或者wine,wine也是类似的技术,因为他是linux或者其他非windows,所以他要模拟实现windows 系统实现,所以wine兼容西考虑更多。因为研究过内存加载exe技术,而且这种最简单,理论上wine的核心思路差不多,技术思路如下:

    逻辑

    1. 加载要内存运行exe,解析PE头,加载需要dll
    2. 重定位表进行修改需要改地址,比喻函数地址和全局变量
    3. 修改进程信息,这种不一定要使用,如果该进程没有调用获取本模块的信息,那就不会有影响,但读取文件需要设置执行程序的安装目录
    4. 跳到该exe入口函数,开始执行
    5. 遇到不兼容的崩溃,逆向分析,修复不断,不断优化加载框架的通用性,那么框架的兼容性越高

    这种依赖宿主系统,因为是同一个系统,所以exe调用系统资源可以直接调用,这样子减少大量工作量,wine为了完成兼容,需要不断逆向windows 系统API,完成兼容性,所以这么年过去,兼容性也只能勉强能用,因为模拟兼容一个系统付出精力很多,这不是单纯的技术问题,大部分是体力问题,同时还需要各种测试环境,因为只有实际有问题的环境才有问题。

    这里其实还有一种技术扩展,沙箱技术,程序运行在沙箱中,就是类似技术,只是要拦截很多行为,比喻文件访问,因为我们要提供一个假的路径,这样子他访问或者创建文件都是在我们监控下面,如果没有被监控,那么他会对我们真正系统文件进行访问,这样子会导致系统真正中毒,所以这类技术主要通过宿主中hook api,但为了安全还要驱动进行拦截,如果单纯应用程序拦截,可能会有问题,比喻程序调用系统底层API,如果你hook应用层,可能穿透了,导致无法完全拦截api。

    相关资料

    github 上面有开源的代码,搜索内存加载,可以找到很多有关的代码
    内存直接加载运行DLL文件 - 自己的小白 - 博客园 (cnblogs.com)
    使用内存加载躲避静态查杀 (citrusice.github.io)
    如何从内存加载DLL - FreeBuf网络安全行业门户

    二、进程模拟(非依赖系统)

    目前我们接触到是wine,他思路跟我们上面类似,比上面更加麻烦,这种技术认为跟沙箱类似,沙箱为了拦截,实现一些驱动。我感觉沙箱也可以实现假的系统dll,这样子调用所有API都要经过自己的,这样子可以实现各种拦截,然后判断合理就转发给真正的系统的

    资料

    1. wine的代码(我目前没有看)
    2. wine : 如何实现系统调用虚拟化 | Deep Dark Fantasy (martins3.github.io)
    3. How Wine works 101 🍷 | Andy Hippo (werat.dev) 这篇文章写非常好,国内有翻译版本

      三、系统模拟

      这种完全汇编,指令执行,这种单纯软件实现 QEMU ,我看了一下代码实现,但貌似我忘记差不多了,看代码时候没有写笔记,导致忘记。

    逻辑

    1. 解析镜像或者程序
    2. 加载指令
    3. 模拟CPU执行,可以模拟各种指令,无论x86 还是其他的指令集都可以模拟实现,

    这种我只是简单看了一下代码,不是很熟悉,这种模拟cpu肯定没有硬件虚拟化性能快,但通用性肯定没有这种模拟好

    资料

    qemu 代码实现

    其他

    语言或者脚本虚拟机,lua,js,c# ,java,他们运行在他们自己宿主中,他们转换中间字节码,这里为什么要抓换字节码是为了更搞性能,最重要为了扩展性,语言语法怎么扩展最中都转换中间层,底层直接跑中间层就可以了,理论上不要中间层也可以。刚开始学编程认为其他语言编译c然后编译汇编,然后跑指令。

    说一个题外话,鸿蒙系统完美兼容andorid,你觉得它是不是套壳呢?如果只是API兼容,那么wine实现这么年,连跑一些程序都麻烦,所以他肯定不是接口兼容,那么就是虚拟机,在一个系统跑一个android虚拟机 ,那么性能一定有损失,所以从技术角度,鸿蒙一定是android。其实鸿蒙用不用android也没有什么,但太恶心了,因为技术发展可以一步步来,并不是靠欺骗,就算鸿蒙最后转自己系统,目前这种做法就是恶心。国内太多技术欺骗,他们把开源变成独立研发,然后套经费,导致浪费太多时间。

    从技术角度来看,任何技术都是一步步来,前人技术开发一套模块,我们技术在模块上开发,从而不断迭代,这才是根基。没有任何复杂的东西是一蹴而就

    标签: 虚拟化
    最后更新:18 8 月, 2023

    小鱼儿

    爱研究技术,爱玩LOL

    点赞
    < 上一篇
    下一篇 >

    COPYRIGHT © 2022 小鱼塘. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    湘ICP备18005349号