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

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

2021-5-10 15:16
6417

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

进入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="")
#flag{di3869Fop1lNm}
import binascii
 
import z3
 
z = z3.Solver()
 
right = binascii.unhexlify("612a725f7e736dda72df43ab72bf4de96bc965")
 
flag = [z3.BitVec("a%d" % _, 32) for _ in range(0x13)]
 
buff = []
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

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