首页
论坛
课程
招聘
[程序开发] [分享]UraniumVM-适用于Android/iOS/macOS的指令级函数虚拟机
2021-4-19 10:12 4398

[程序开发] [分享]UraniumVM-适用于Android/iOS/macOS的指令级函数虚拟机

2021-4-19 10:12
4398

UraniumVCPU

YunYoo Uranium vCPU framework for arm/arm64/x86/x64 on Android/iOS/macOS.

Android iOS macOS
arm Yes No No
arm64 Yes Yes Yes
x86 Yes No No
x86_64 Yes No Yes

License

UraniumVM is developed by YunYoo(云铀子), all rights reserved.

  • A.Personal private use is free;
  • B.Any other usage should pay for a license;

VM API

1
2
3
// run function 'fn' on UraniumVCPU with 'ctx'
// return value is r[0].sx/rax
long uvm_run_interp(const void *fn, const uvm_context_t *ctx);
1
2
3
4
5
6
7
8
9
// this api is used to make target's function pointer under your control
//
// make a wrapper for function 'fn' with 'usrctx','callback'
// return value is a new function pointer which will run under our VCPU
// you can replace this pointer to target's function pointer
// like C++-Vtable/Script-Native-Bridge
// if return null, you should check errno
const void *uvm_make_callee(const void *fn, void *usrctx,
                            uvm_interp_callback_t callback);

Core Structure

1
2
3
4
5
6
7
8
9
10
11
12
13
// opcode type for callback args
typedef enum uvm_optype_t {
  vcop_read,    // memory read
  vcop_write,   // memory write
  vcop_call,    // function call
  vcop_return,  // function return
#if __ARM__
  vcop_svc,  // arm syscall
#else
  vcop_syscall,  // intel syscall
#endif
  vcop_ifetch,  // interpreter fetch instruction
} uvm_optype_t;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// callback args
typedef struct uvm_callback_args_t {
  // your own context passed for uvm_run_interp/uvm_make_callee
  const void *usrctx;
  // uvm execution context
  uvm_regs_t *uvmctx;
  // current opcode
  uvm_optype_t op;
  union {
    // for vcop_read/vcop_write/vcop_ifetch
    struct {
      const void *src;
      void *dst;
      int byte;
    } rw;
    // for vcop_call
    struct {
      const void *callee;
    } call;
    // for vcop_return
    struct {
      const void *hitaddr;  // which address hit return
    } ret;
    // for vcop_svc
    struct {
      // arm
      // parameters are in armctx->r[0...6]
      // syscall number from armctx->r[7]
      //
      // arm64
      // parameters are in arm64ctx->x
      // syscall number
      //
      // x86/x64
      // ...
      int sysno;
    } svc;
  } info;
} uvm_callback_args_t;

Version History

2021/4/18:

  • 发布V1.0.0;
  • 1.Android x86/x86_64;
  • 3.macOS x86_64;

2021/4/15:

  • 发布V1.0.0;
  • 1.Android arm/arm64;
  • 2.iOS arm64/arm64e;
  • 3.macOS arm64;
1
https://gitee.com/yunyoo/UraniumVCPU

[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年6月班开始招生!!

收藏
点赞1
打赏
分享
最新回复 (17)
雪    币: 0
活跃值: 活跃值 (213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
slbwgslz 活跃值 2021-4-19 10:23
2
0
支持 hook 吗 ,能打印出执行过的汇编代码吗?
雪    币: 4757
活跃值: 活跃值 (449)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
yimingqpa 活跃值 1 2021-4-19 10:28
3
0

代码大小端、数据大小端、运行过程中改代码,

ARM、THUMB、数据混合存在,中断 这些支持吗?

最后于 2021-4-19 10:30 被yimingqpa编辑 ,原因:
雪    币: 1778
活跃值: 活跃值 (1530)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
GeekNeo 活跃值 2 2021-4-19 11:06
4
0
yimingqpa 代码大小端、数据大小端、运行过程中改代码,ARM、THUMB、数据混合存在,中断 这些支持吗?
Android/iOS/macOS只需要处理小端。支持运行过程中改代码:参见ifetch事件。ARM/THUMB混合支持。中断也支持,参见svc事件。
雪    币: 1778
活跃值: 活跃值 (1530)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
GeekNeo 活跃值 2 2021-4-19 11:07
5
0
slbwgslz 支持 hook 吗 ,能打印出执行过的汇编代码吗?
支持,参考A64Dbg的Trace、ADCpp脚本引擎。
雪    币: 4757
活跃值: 活跃值 (449)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
yimingqpa 活跃值 1 2021-4-19 11:19
6
0
GeekNeo Android/iOS/macOS只需要处理小端。支持运行过程中改代码:参见ifetch事件。ARM/THUMB混合支持。中断也支持,参见svc事件。
ARM Thumb不止于手机,处理一下 代码和数据大小端 就棒了。
雪    币: 901
活跃值: 活跃值 (884)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
默NJ 活跃值 2021-4-19 12:59
7
0
支持开源
雪    币: 270
活跃值: 活跃值 (441)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
gtict 活跃值 2021-4-19 15:17
8
0
看了下,,不会用~~尴尬
雪    币: 0
活跃值: 活跃值 (213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
slbwgslz 活跃值 2021-4-19 18:39
9
0
看不明白其中的关联关系,能在UraniumVCPU 的demo中单独体现吗
雪    币: 216
活跃值: 活跃值 (157)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
蒋豪 活跃值 2021-4-19 19:39
10
0

开源?

最后于 2021-4-19 19:43 被蒋豪编辑 ,原因:
雪    币: 1778
活跃值: 活跃值 (1530)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
GeekNeo 活跃值 2 2021-4-20 08:04
11
0
slbwgslz 看不明白其中的关联关系,能在UraniumVCPU 的demo中单独体现吗
UraniumVCPU是模拟一条指令执行的内核,UraniumVM是基于这个内核的完整虚拟机,头文件的接口和数据结构就是这个虚拟机的API。
雪    币: 1778
活跃值: 活跃值 (1530)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
GeekNeo 活跃值 2 2021-4-20 08:07
12
0
蒋豪 开源?
个人私用免费,不开源。为了消除误会,建议看看这篇说明:https://mp.weixin.qq.com/s/Eb0qIjLpf1_grgsqvDrjPg
雪    币: 13
活跃值: 活跃值 (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xtdhwl 活跃值 2021-4-20 09:51
13
0
顶,支持作者的坚持
雪    币: 946
活跃值: 活跃值 (671)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
TUGOhost 活跃值 2021-4-20 11:39
14
0
牛的,顶顶
雪    币: 9
活跃值: 活跃值 (206)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
artake 活跃值 2021-4-20 15:22
15
0
相对开源的qemu有啥优势?
雪    币: 118
活跃值: 活跃值 (402)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小黄鸭爱学习 活跃值 2021-4-20 16:37
16
0
持续关注 支持原创
雪    币: 0
活跃值: 活跃值 (213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
slbwgslz 活跃值 2021-4-20 20:10
17
0
GeekNeo UraniumVCPU是模拟一条指令执行的内核,UraniumVM是基于这个内核的完整虚拟机,头文件的接口和数据结构就是这个虚拟机的API。
明白了 vcop_ifetch 就是 逐条指令执行的回调。这个时候可以进行各种操作。
雪    币: 1778
活跃值: 活跃值 (1530)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
GeekNeo 活跃值 2 2021-4-23 13:40
18
0
artake 相对开源的qemu有啥优势?
Qemu是硬件和系统虚拟化;
UraniumVCPU是指令虚拟化;
UraniumVM是函数虚拟化。
游客
登录 | 注册 方可回帖
返回