V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loyan666
V2EX  ›  信息安全

android app 运行在虚拟 cpu 上效率如何

  •  
  •   loyan666 · 247 天前 · 1204 次点击
    这是一个创建于 247 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想将一个虚拟 cpu ,塞进一个 app 里,运行效率可能会慢到无法接受吗?

    5 条回复    2023-08-24 12:50:19 +08:00
    kkocdko
        1
    kkocdko  
       247 天前   ❤️ 1
    你说的“虚拟 CPU”是什么呢?你的问题描述比较模糊,标题写是“App 运行在虚拟 CPU 上”,正文又写“将一个虚拟 CPU ,塞进一个 App 里”。

    如果只是要做隔离,那么 Android 上有较多方案:

    1. 自带的 Workspace
    2. VirtualApp 及衍生产品,这个据我所知 360 有大规模应用,不仅仅是隔离,还可以做审查
    3. VMOS 类,利用不是特别完善的容器技术做到隔离
    4. 使用内核 Namespaces API ,例子有 Waydroid ,但是这个需要内核没有阉割 Namespaces API

    如果是研究性质的,比如想要搞 RISC-V ,那直接用 QEMU 即可。TCG ,当然很慢。
    loyan666
        2
    loyan666  
    OP
       247 天前 via Android
    @kkocdko 感谢大佬回复,
    实际上是想实现汇编指令跟踪(trace),
    就是每条执行汇编,以及当前指令所对应的寄存器都能记录下来,用于分析程序。
    普通虚拟化如 va 、vmos 只能起到应用隔离效果,但是拿不到 cpu 控制权。
    所以想直接实现一个功能,让 app 的 so 都运行在一个模拟 cpu 上(当然为此还要自行实现一系列如 linker 、线程等东西),这样就能控制 cpu 拿到运行时所有汇编指令,
    但是又担心这样做 app 运行效率会不会非常低,导致没有使用价值。
    kkocdko
        3
    kkocdko  
       247 天前 via Android
    看你的需求描述,现有调试器应该都可以直接用的吧?没有调试信息只是不能做精确的分析,但是运行时断点,内存补丁什么的都是可以用的
    kkocdko
        4
    kkocdko  
       247 天前 via Android
    如果真的要按照你的思路来,也可以 qemu ,随便找一篇内核调试的教程就行,步骤应该差不多。但是风险在于所有语句都会被抓到,混在一起非常混乱。一般都是有 debuginfo 才这么干。

    建议你还是直接用那些专门做逆向的工具,ida ,cutter 什么的。不过 Android 上的逆向我其实没怎么接触过,看看其他人怎么说
    loyan666
        5
    loyan666  
    OP
       247 天前
    @kkocdko 是的,先排除特征风控问题不谈,
    理论上可以基于这些 ptrace 方案跟踪指令,但是碍于效率问题,无法采用,因为可能跟踪一次几千万级别的指令,ptrace 可能几天也跑不完,
    qemu 虽然有全虚拟化支持,但是也是碍于效率问题,无法采用,而且用 qemu 就必必须考虑特征问题了,特征太多了,为了 trace 功能,反而增加了更多不必要的工作量。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2921 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:32 · PVG 20:32 · LAX 05:32 · JFK 08:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.