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

2023-08-24 01:36:31 +08:00
 loyan666

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

1368 次点击
所在节点    信息安全
5 条回复
kkocdko
2023-08-24 05:47:18 +08:00
你说的“虚拟 CPU”是什么呢?你的问题描述比较模糊,标题写是“App 运行在虚拟 CPU 上”,正文又写“将一个虚拟 CPU ,塞进一个 App 里”。

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

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

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

建议你还是直接用那些专门做逆向的工具,ida ,cutter 什么的。不过 Android 上的逆向我其实没怎么接触过,看看其他人怎么说
loyan666
2023-08-24 12:50:19 +08:00
@kkocdko 是的,先排除特征风控问题不谈,
理论上可以基于这些 ptrace 方案跟踪指令,但是碍于效率问题,无法采用,因为可能跟踪一次几千万级别的指令,ptrace 可能几天也跑不完,
qemu 虽然有全虚拟化支持,但是也是碍于效率问题,无法采用,而且用 qemu 就必必须考虑特征问题了,特征太多了,为了 trace 功能,反而增加了更多不必要的工作量。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/967805

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX