X-NUCA(牛咖)联赛8月逆向专题赛赛前--获取正确的key的解题思路
ha6ppy进行MD5后所得的16字节摘要,将摘要与0x16异或后(Result)写死在程序中。
用户输入key,将key进行MD5加密,加密后的结果与0x16异或,异或后的结果与Result进行比较,相等则用户输入了正确的key。
输入hint时的提示:_.__.._._.___.____.._._. ,为“MD5”的ASCII码的二进制表示(_表示0,.代表1)。
分析上面一段,发现有个循环比较[ECX]和[EDX]中的值,相等时才输出信息提示获取到正确的key,在此处下断点,获取[ecx]和[edx]中数据(由ESI可知长度为16字节):
使用[ECX]和[EDX]中的值解密MD5,未得到Flag,继续向上分析,发现[ECX]中的值在前面都异或了CL(0x16)
将[EDX]中的值(C9 15 6D 0B C7 61 D6 43 2D 2D B5 F4 F7 B0 B3 21)异或0x16得到正确key的MD5值(DF 03 7B 1D D1 77 C0 55 3B 3B A3 E2 E1 A6 A5 37),然后cmd5解出得ha6ppy。