本文为看雪论坛优秀文章
看雪论坛作者ID:ookkaa
这个其实稍微研究一下就能定位这个指令了。
vPop vR6
vPush imm32
vAdd imm
vPop vR16
vPop vR3
vPop vR14
vPop vR13
vPop vR10
vPop vR5
vPop vR21
vPop vR9
vPop vR15
vPop vR23
vPop vR7
vPop vR2
vPop vR18
vPop vR11
vPop vR0
vPop vR12
vPop vR20
vPop vR17
vPop vR4
vPop vR8
vPop vR22
vPush imm64
vPush vR6
vAdd imm
vPop vR19
vPop vR22
vPush imm64
vPush vR6
vAdd imm
vPop vR16
vPush vR6
vPush imm64
vAdd imm
vPop vR16
vPush vR4
vPush vR17
vPush vR20
vPush vR12
vPush vR0
vPush vR11
vPush vR18
vPush vR2
vPush vR7
vPush vR23
vPush vR15
vPush vR22
vPush vR21
vPush vR5
vPush vR10
vPush vR13
vPush vR14
vPush vR6
vPush vR5
pop all virtual regs to physical regs(vm exited) Physical RIP 1400010b0
Physical RCX 140003638
vPop vR15
vPush imm32
vAdd imm
vPop vR2
vPop vR14
vPop vR8
vPop vR16
vPop vR6
vPop vR4
vPop vR2
vPop vR23
vPop vR11
vPop vR20
vPop vR3
vPop vR21
vPop vR7
vPop vR5
vPop vR13
vPop vR17
vPop vR9
vPop vR0
vPop vR12
vPop vR1
vPop vR1
vPush imm64
vPush vR15
vAdd imm
vPop vR10
vPush vR12
vPush vR0
vPush vR9
vPush vR17
vPush vR13
vPush vR5
vPush vR7
vPush vR21
vPush vR3
vPush vR20
vPush vR11
vPush vR23
vPush vR2
vPush vR4
vPush vR6
vPush vR16
vPush vR8
vPush vR19
vPush vR23
pop all virtual regs to physical regs(vm exited) Physical RIP 14000108b
Physical RCX 140003638
2ae6 : call qword ptr [rip + 0x1164]
Failed on uc_emu_start() with error returned 8: Invalid memory fetch (UC_ERR_FETCH_UNMAPPED)
rax是寄存器索引,这个索引是根据opcode解密算出来的,解密算法handler里就有。

因为我们已经有了opcode,可以照着opcode,找到所有dispatch handler,
这里又说到dispatch handler,

这里的r12存着handler table。
上面那些mov寄存器的操作,是需要执行在vm退出的时候,把寄存器提取出来给他恢复上。
上图是还原的。下图是原本程序的流程图:
https://github.com/aobfucated/Vmp2.xDemo-Antiobfucated
所有我用到的东西或者思考过程都在上面了。
看雪ID:ookkaa
https://bbs.pediy.com/user-home-865434.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
原文始发于微信公众号(看雪学苑):记录一次vmp2.xdemo的分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论