高校战疫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 ***** 感谢分享,支持! 感谢分享
感谢分享 不知道为什么我ida调到一般f7按不动了。白嫖一下大佬的wp。谢谢大佬 那个大佬说的那个b表可以直接动调出来的。但是还是不太清楚加密的那个部分在哪。。动调半天没看到,还有就是大佬你是怎么反编译成功的啊,我这直接反编译,就说是堆栈不平衡,改了sp也没有用 0x魍魉 发表于 2020-3-21 01:57
那个大佬说的那个b表可以直接动调出来的。但是还是不太清楚加密的那个部分在哪。。动调半天没看到,还有就 ...
没有遇见这个情况,我没有动态调试调试,纯静态分析。。。 Lily 发表于 2020-3-21 18:15
没有遇见这个情况,我没有动态调试调试,纯静态分析。。。
大佬静态调试main函数是直接就能反编译出来的吗?我这一直堆栈不平衡 0x魍魉 发表于 2020-3-21 18:33
大佬静态调试main函数是直接就能反编译出来的吗?我这一直堆栈不平衡
对啊,话说你是不是用了我压缩包里面的i64文件了,我那个文件是ida7.0的,你不用那个试试,要是你没用那个。。。那我也不知道是什么情况 Lily 发表于 2020-3-21 19:32
对啊,话说你是不是用了我压缩包里面的i64文件了,我那个文件是ida7.0的,你不用那个试试,要是你没用那 ...
我是做题的时候就一直反编译不了那个main函数,然后才动调的,然后看大佬这个直接就反编译成功了,想问问大佬是怎么操作的,不是大佬这个文件反编译不成功
页:
[1]
2