AES加密逆向学习
https://blog.csdn.net/zhangmiaoping23/article/details/8949290
ECB模式 平均分组 每组互不干扰
CBC模式 平均分组 改明文和前一个密文异或之后再进行加密 所以需要一个初始化数组对第一组异或
一般来说AES加密前会调用一个函数对密匙进行拓展 然后才会处理明文
解题:
首先输入为32位 之后的sub_402219()又一个异或 只能动态查看了
使用插件发现以下这么多加密
并且sub_40207B如下
这个函数内没有用到Input 且最终得到的值还是在参数unk_603170里面 我们可以动态get值
动态之后的sub_402219()
首先是密匙扩展 然后是等分为两组分别加密 这里能判断出是ECB模式的加密
以下摘录自 https://blog.csdn.net/heyatzw/article/details/76165635
电码本模式(Electronic Codebook Book (ECB)
这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密
密码分组链接模式(Cipher Block Chaining (CBC))
这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
之后一个for循环对比 写出脚本解密即可
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from Crypto.Cipher import AES from Crypto.Util.number import * f = open('so.in') a = '' for i in range(2): s = f.readline() for j in range(16): a += chr(int(s[j*3:j*3+2],16)) b = '' s = f.readline() for j in range(16): b += chr(int(s[j*3:j*3+2],16)) print a,b _aes = AES.new(b,mode = AES.MODE_ECB) print _aes.decrypt(a)
补充。。。
so.in内容
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
BC 0A AD C0 14 7C 5E CC E0 B1 40 BC 9C 51 D5 2B 46 B2 B9 43 4D E5 32 4B AD 7F B4 B3 9C DB 4B 5B CB 8D 49 35 21 B4 7A 4C C1 AE 7E 62 22 92 66 CE