2023羊城杯EZ加密器
0x00 分析
常规题目,主要是要知道认出来算法
0x01 解
查壳不放了,反正就是没有
直接上IDA,由于没有函数名,所以搜搜字串
字串里面有点意思的,下面很明显是个base64,不过是换表的,应该哪个地方用到了
先放着,先去看看getflag在哪
非常好,一个简单的strcmp,没有这么多弯弯绕绕
看看密文str1
挺长的,明文应该没这么长,合理怀疑进行了一些扩充
然后去看看别的地方
先看看input flag的地方
结合题目,这里应该是把输入验证码和flag放在一起了
其中变量a1就是验证码,变量a2就是输入的flag了
从这个接收输入的函数出来就会到使用”GetFlag”这个字串函数内了
看来GetFlag这个字串所在的函数就是main了
出来之后可以看到sub_140003C30的两个参数分别是a000000和a11111111111111
这两个就分别是验证码和输入的flag了
下面还有两个函数
一个个看
先看sub_1400036A0
下面可以找到这个数组off_140015108
一直跟进去就会看到这个
看来这个函数sub_1400036A0就是个base64的加密函数了
所以根据接收的变量可以判断,这个sub_1400036A0就是将6位的验证码进行了base64加密
有意思的是在这个数组之上有一个这个
DES的置换表
看来这个程序还用到了DES算法
想了一下根据base64的加密过程,这个6位验证码会输出一个8位的密文
而这个密文是字符串,也就是说一共有8B,64bit
恰好是DES的密钥位数,看来这段base64加密的数据肯定是用来做DES加密的密钥了
回到main函数看看下一个函数sub_140003AE0
结合刚才的分析
sub_1400036A0是进行base64加密的函数,v27就是加密后的密钥,所以sub_140003AE0应该就是DES加密函数了
用刚刚的数组验证一下
看来确实是用到了这个表,也确实是DES加密函数
不过这又有一个问题了,DES加密是一个置换,也就是说出来的密文应该全是hex字符,但是用来对比的密文是这样的
里面有一些特殊字符,所以可能也进行了什么操作
查看一下密文,果然发现了异样
密文被异或了一个7
因为这个验证码压根不知道。所以只能进行爆破了
写脚本!
1 | from Crypto.Cipher import DES |