flag0073
1. 从靶机服务器的FTP上下载flag0073,分析该文件,请提交正确flag的长度。提交格式:XXXX。
进到main函数

可以看到输入不等于38个,就会跳转到wrong flag,所以正确flag的长度为38个
2. 提交程序所使用的算法的名称。提交格式: 0xXXXX。
md5,第五题有讲怎么知道是md5
3. 提交flag正确时的输出。提交格式: 0xXX。
shift+f12可以看到well done!

4. 请用程序所使用的算法计算112233的值,并提交其结果。提交格式: XXXX。
用md5sum计算112233的值即可
5. 提交flag的值。提交格式:XXXX。
在主函数里sub_40182f函数对sub_401864进行了加密操作,长度为0x1061也就是4193

密钥为0x11

可以通过idc脚本进行解密

解密后我们可以看到多了一段汇编语言

我们可以看到汇编语言当中,还call了一次sub_40182f函数来进行解密,而参数是word_40157A的地址以及0x2B5的长度
所以我们解密完第一个函数后,先在函数入口用U转换为数据段,然后再用C转换为汇编,要注意i下面还有一大串的数据段也要用C来转换成汇编代码,然后再在入口按P定义为函数

sub401864函数解密成功,但此时我们并不能反编译40157A我们之前看到汇编里还call了一次解密函数来对word_40157A进行解密,所以我们再次使用IDC脚本以0x40157A作为地址,然后进行解密

再通过上述 同样的操作转换为函数后就可以进行正常反编译了,点进sub40157A函数,可以看到开头就有四个值

这个就是md5算法的特征,所以第三题是md5
而我们看到代码上面有一大串的md5值,众所周知,md5不可逆,只能通过碰撞来解密,那我们在省赛kali下该怎么解这个东西呢?答案是用python3 的hashlib模块加密一个flag的可能组成列表来与里面的md5的值进行碰撞,我们可以将小写a-z和大写a-z以及花括号和0123456789都写进一个字符串里,然后将字符串用hashlib来进行md5加密,加密后再与程序里的md5值一一碰撞。

写出脚本进行解密,hashlist即程序里的那一大串md5值,而list即为我们a-z A-Z 0-9 {} _组成的hash列表,通过两边的值来进行碰撞,确定这些md5原本的值即可,运行脚本即可得到flag
本文详细解析了如何通过逆向工程技术分析靶机服务器FTP上的flag0073文件,揭示了程序使用的算法是MD5,描述了解密过程,包括正确flag的长度、正确的输出、计算112233的MD5值,以及最终如何使用Python的hashlib模块进行MD5碰撞解密来找出flag的值。
695

被折叠的 条评论
为什么被折叠?



