Lily 发表于 2020-3-9 13:49:56

高校战疫WP——easyparser

RUST写的虚拟机

在init_array中的sub_40DB20()函数中初始化被比较的字符串,主要是将dword_483C68中包含的32个字符都减去0x37

在main函数中进行比较,主要逻辑是将输入的每一位与'c'异或,即0x63,之后进行左移和且操作,即<<=2&0x3f

写爆破脚本逆出来即可

```python
a=
x=r''
for i in a:
    if i>0x37:
      print(hex(i-0x37),end=',')
#打印出来b
b=
print(len(b))
for i in b:
    for x in range(0x20,0x80):
      u=x
      u^=ord('c')
      u<<=2&0x3f
      if(u==i):
            print(chr(x),end='')
```

最后得flag{G0d_Bless_Wuhan_&_China_Growth!_}

我把那个带注释的i64文件也加进去了,里面有我对解释器各个功能的注释,pop和push啥的可能写反了,反正主要流程就下面那一点
0:(2,0,2,0,0x12): xor s,s
5:(0,0,0,2,0,3): s=q]
11:(0,0,0,0x37,0,9):s-=0x37
17:(0,2,0,0,0,4):q]=s
23:(0,2,0,1,0,7)s+=1
cmp s,0x20
jnz 5

s=0xe1
s=q]
s=q]
s^='c'
s<<=2&0x3f
cmp s s
jnz error
s++
s++
cmp s 0x20
jxx 0x2a
具体的i64文件我也放到附件了,有一些注释是错的或者是简略的,还请大家独立分析
**** Hidden Message *****

roger 发表于 2020-3-9 15:05:02

感谢分享,支持!

Yakum0 发表于 2020-3-13 11:55:40

感谢分享

Resery 发表于 2020-3-16 20:57:44

感谢分享

0x魍魉 发表于 2020-3-21 01:40:54

不知道为什么我ida调到一般f7按不动了。白嫖一下大佬的wp。谢谢大佬

0x魍魉 发表于 2020-3-21 01:57:59

那个大佬说的那个b表可以直接动调出来的。但是还是不太清楚加密的那个部分在哪。。动调半天没看到,还有就是大佬你是怎么反编译成功的啊,我这直接反编译,就说是堆栈不平衡,改了sp也没有用

Lily 发表于 2020-3-21 18:15:39

0x魍魉 发表于 2020-3-21 01:57
那个大佬说的那个b表可以直接动调出来的。但是还是不太清楚加密的那个部分在哪。。动调半天没看到,还有就 ...

没有遇见这个情况,我没有动态调试调试,纯静态分析。。。

0x魍魉 发表于 2020-3-21 18:33:44

Lily 发表于 2020-3-21 18:15
没有遇见这个情况,我没有动态调试调试,纯静态分析。。。

大佬静态调试main函数是直接就能反编译出来的吗?我这一直堆栈不平衡

Lily 发表于 2020-3-21 19:32:40

0x魍魉 发表于 2020-3-21 18:33
大佬静态调试main函数是直接就能反编译出来的吗?我这一直堆栈不平衡

对啊,话说你是不是用了我压缩包里面的i64文件了,我那个文件是ida7.0的,你不用那个试试,要是你没用那个。。。那我也不知道是什么情况

0x魍魉 发表于 2020-3-21 19:46:07

Lily 发表于 2020-3-21 19:32
对啊,话说你是不是用了我压缩包里面的i64文件了,我那个文件是ida7.0的,你不用那个试试,要是你没用那 ...

我是做题的时候就一直反编译不了那个main函数,然后才动调的,然后看大佬这个直接就反编译成功了,想问问大佬是怎么操作的,不是大佬这个文件反编译不成功
页: [1] 2
查看完整版本: 高校战疫WP——easyparser