.NET逆向题
程序真正的入口在蓝条内的函数中,我们点进去之后向下翻,寻找可疑比较语句(由于函数较短,很容易找到)
根据下断点的两个语句分析,text应该就是输入的原文,而text2就是text经过加密后的密文。第一句是将text加密后赋值给text2,第二句是将text2和真正的flag的密文比较。
为了确保万无一失,我们下好断点然后观察变量的值。
text果然是输入的文本,并且根据text的不同text2也随之改变,大概可以猜测text2是text以某种方式加密后base64表示的结果。
首先进入第一个断点内的语句
bytes数组是加密密钥,其值在后续动态调试中可以找到,RijndaelManaged百度搜一下知道是AES相关的东西
于是我们跟进下的第二个断点内的语句。发现很复杂,但是我们只需要知道这个函数最后返回的值即可,不用太过关心怎么得到的。所以适当下好断点可以得到值为
写个程序跑一遍即可
from Crypto.Cipher import AES
import base64
import os
text="x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk="
key="pctf2016pctf2016pctf2016pctf2016"
text=base64.b64decode(text)
cipher=AES.new(key)
text=cipher.decrypt(text)
print(text)