题目给了小明的机器码:1653643685031597
用户user_id:xiaoming
可以看到题目采用了SIMD指令集
该指令格式在CTF和攻防对抗中经常出现,可以提高执行效率的同时也可以增加逆向的难度。
对于此类指令和题目,我们分析的方法是:遇到查意思,查的多了就跟看正常代码一样,采用动态分析。
将内置的机器码改为题目给的:1653643685031597
修改成功:
得到flag的时候跟machine这个有很大关系。
machine_id处理
在这个加密函数中
发现了MD5特征
经过动调拿到函数加密后的结果
与我们的猜测是相符的
可以发现最终md5(机器码)变成
user_id处理
和调试machine加密一样,最终MD5(user_id)变成:
经过之前相同的加密
变成这个数字:1228240365737281
然而这还没完,居然进行两次相同加密
再次加密后的结果:0502036271810858
可以发现此题出的很好,利用了密码比较的漏洞,没有将密文给出,而是将生成的密文在中间给出,从而造成了数据泄露。
回顾加密流程,可以发现
f(key) = f( f( f(md5(machine)) + f(md5(user_id)) ) )
那么题目给了得到flag的machine和user_id,可以得出
Key =f( f(md5(machine)) + f(md5(user_id)) )
所以最终flag:
flag{1228240365737281}