什么是虚拟机混淆?
注:这类虚拟机跟VMware之类的虚拟机不是同种东西。
原理
Start:虚拟机入口,完成虚拟机环境的初始化。
Dispatcher:调度器,解释opcode,并选择对应的handle函数执行,当handle执行完后会跳回这里,形成一个循环。
Bytecode:字节码,可执行的代码所转换成的字节码。
执行流程:
在start完成虚拟机环境的初始化->读取可执行代码相对应的字节码->传到Dispatcher(调度器)->dispatcher根据接受到的bytecode选择handler进行执行,实现某个操作。
我们先从虚拟机的简单题目加深对虚拟机的理解。
WxyVM1
首先拖入ida中,查看main函数,F5
之后我们进入关键函数sub_4005B6中
可以看到如上图的结构,与前边的原理图可以对应上。
查看F5之后的代码
__int64 sub_4005B6()
{
unsigned int v0; // ST04_4
__int64 result; // rax
signed int i; // [rsp+0h] [rbp-10h]
char v3; // [rsp+8h] [rbp-8h]
for ( i = 0; i <= 14999; i += 3 )
{
v0 = byte_6010C0[i]; // 循环上每次加3,取到的值包括 1 2 3.用脚本取值,再用脚本判断这么多值里有哪些 发现是 123
v3 = byte_6010C0[i + 2];
result = v0; // 指示运算方式
switch ( v0 ) // v0决定操作方式
// result决定操作输入的哪一位
// v3决定操作的值
{
case 1u:
result = byte_6010C0[i + 1]; // 指示操作的哪一位
*(&input + result) += v3; // 指示运算数
break;
case 2u:
result = byte_6010C0[i + 1];
*(&input + result) -= v3;
break;
case 3u:
result = byte_6010C0[i + 1];
*(&input + result) ^= v3;
break;
case 4u:
result = byte_6010C0[i + 1];
*(&input + result) *= v3;
break;
case 5u:
result = byte_6010C0[i + 1];
*(&input + result) ^= *(&input + byte_6010C0[i + 2]);
break;
default:
continue;
}
}
return result;
}
str_list=[4294967236,52,34,4294967217,4294967251,17,4294967191,7,4294967259,55,4294967236,6,29,4294967292,91,4294967277,4294967192,4294967263,4294967188,4294967256,4294967219,4294967172,4294967244,8]
addr = 0x6010C0
for i in range(14997,-1,-3):
v0 = Byte(addr+i)
v3 = Byte(addr+i+2)
result = Byte(addr + i + 1)
if v0 == 1:
str_list[result] -= v3
if v0 == 2:
str_list[result] += v3
if v0 == 3:
str_list[result] ^=v3
for i in range(len(str_list)):
str_list[i] &= 0xff
print(''.join(map(chr, str_list)))
总结
-
vm类题目有明显的特征:一般情况下,在F5下有while/switch case 这样的语法。
-
该题是简单的vm类题目,先通过该题了解一下vm题目的构造,以便在后边遇上vm类题目时可以分辨出题目类型。之后会有相应的vm题目考点以及解决办法的文章。
题目链接:
链接:https://pan.baidu.com/s/11OeT3TVC7ZJrlqi4PKqjwQ
提取码:9qcc
(题目出自南邮CTF练习平台)
本文始发于微信公众号(山石网科安全技术研究院):CTF逆向专题连载之虚拟机vm混淆(1)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论