JarvisOJ RE Classical CrackMe2 wp

Classical CrackMe2

真的是学到了很多东西....首先PEID看一下是用C#写的,所以用dnspy进行反编译,找到了关键的类:

然后点进去发现了关键函数,即if比较函数:

也就是text不为空并且text2等于一个xxxx,在这里下断点就发现text是输入的数据,text2就是每次给出的错误弹窗里面的一串base64,当text2的值等于后面的字符串的时候,弹窗就会显示flag。那就先来看看text2是怎么形成的:

然后发现Rijndae1Managed就是AES加密的过程然后再base64转化一下,key就是bytes数组,在此处下断点,发现bytes数组的值为‘pctf2016’*4:

然后再去看看if语句的text2应该等于什么,在if语句处下断点,调试看看return的值:

最后,程序的逻辑就比较清晰了,就是把用户的输入先AES加密然后base64编码然后与题目中给出的base64进行比较,上脚本:


import base64


from Crypto.Cipher import AES


cipher = base64.b64decode("x/nzolo0TTIyrEISd4AP1spCzlhSWJ    XeNbY81SjPgmk=")

key = "pctf2016pctf2016pctf2016pctf2016"

aes = AES.new(key.encode('utf-8'), AES.MODE_ECB)

msg = aes.decrypt(cipher)

print(msg)

这里就出现了一点小问题,最开始脚本写的是

aes = AES.new(key, AES.MODE_ECB)

然后出现了错误......去百度搜找原因最后调试发现原因:

最开始的key是str类型,要把它变成bytes才可以进行AES.new().....python学的真的啥也不是....

以上。

发布了14 篇原创文章 · 获赞 2 · 访问量 335

猜你喜欢

转载自blog.csdn.net/weixin_43876357/article/details/104079933
今日推荐