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

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

2021-5-10 15:16
5506

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

进入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}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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