分配指令空间和数据存储空间

进入vmp解释器

解释器结构

由于时间问题没法快速解析指令对应的handler,所以采取IDA指令跟踪的方式
根据对handler指令分析可以发现
可能为相关运算操作指令




使用IDA指令跟踪可以快速分析指令执行
当数据编码完成后开始对比数据

0x2B为输入数据编码后的结果

直接nop掉跳转指令,运行获取全部对比数据,得到数据

add ?, ?
imul ?, ?
div ?
movzxeax, byte ptr [?]取单字节数据
add ?, ?
imul ?, ?
div ?
movzxeax, byte ptr [?]取单字节数据
612a725f7e736dda72df43ab72bf4de96bc965
612a725f7e736dda72df43ab72bf4de96bc965
import
binascii
import
z3
z
=
z3.Solver()
right
=
binascii.unhexlify(
"612a725f7e736dda72df43ab72bf4de96bc965"
)
flag
=
[z3.BitVec(
"a%d"
%
_,
32
)
for
_
in
range
(
0x13
)]
buff
=
[]
temp
=
flag[
0
]
for
_
in
range
(
len
(flag)):
try
:
temp
=
temp
*
3
+
flag[_
+
1
]
except
IndexError:
temp
=
temp
*
3
temp
%
=
(
0x1000
+
1
)
temp &
=
0xFF
buff.append(flag[
0
] ^ temp ^
len
(flag))
temp1
=
temp
+
len
(flag)
for
_
in
range
(
1
,
len
(flag)):
buff.append(flag[_] ^ temp1 ^ buff[_
-
1
])
temp1
+
=
len
(flag)
-
_
temp1 &
=
0xFF
for
p, i
in
enumerate
(buff):
z.add(z3.simplify(i
=
=
right[p]))
if
z.check()
=
=
z3.sat:
for
i
in
flag:
print
(
chr
(z.model()[i].as_long()), end
=
"")
import
binascii
import
z3
z
=
z3.Solver()
right
=
binascii.unhexlify(
"612a725f7e736dda72df43ab72bf4de96bc965"
)
flag
=
[z3.BitVec(
"a%d"
%
_,
32
)
for
_
in
range
(
0x13
)]
buff
=
[]
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-5-10 15:35
被Delevy编辑
,原因: