首页
论坛
课程
招聘
[原创]2021年第四届红帽杯Re-virtual_world
2021-5-10 15:16 2908

[原创]2021年第四届红帽杯Re-virtual_world

2021-5-10 15:16
2908

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

进入vmp解释器

解释器结构

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

1
2
3
4
5
6
7
add ?, ?
 
imul ?, ?
 
div ?
 
movzxeax, byte ptr [?]取单字节数据

可能为相关运算操作指令




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

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

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

1
612a725f7e736dda72df43ab72bf4de96bc965

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
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="")
#flag{di3869Fop1lNm}

[注意] 招人!base上海,课程运营、市场多个坑位等你投递!

最后于 2021-5-10 15:35 被Delevy编辑 ,原因:
上传的附件:
收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 15
活跃值: 活跃值 (81)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
大橘 活跃值 2021-5-11 19:51
2
0
大佬有没有 第一个ezre的wp
游客
登录 | 注册 方可回帖
返回