春秋杯2023冬 复现
春秋杯2023冬 复现
upx2023
首先发现无法直接upx -d的命令脱壳,再仔细看,发现是修改了upx的特征码,将UPX0等改为了upx0导致命令脱壳失败,所以我们首先要在010中将特征码修改回来(UPX的特征码是55 50 58),都修改后就可以直接upx -d脱壳了,然后我们拖进IDA分析:
发现是一个rand—seed的一个形式,还有一个change函数但是代码有点复杂,看不太懂,所以我们动态调试看一下,放一个测试字符串康康:
1 | flag{0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ} |
得到:
1 | f{37BFJNRVZlg02468ACEGIKMOQSUWY}a159DHLPTX |
发现change函数大概只是将flag的顺序换了一下,没有修改值,所以关键就来到如何找到seed,然后逆向异或出顺序换了的flag,所以我们直接爆破seed,来找到时间戳:
1 |
|
爆破出的结果:
1 | seed = 1682145110 |
那么我们找到了顺序调换后的flag,再在python中用字符串索引得到真正的flag:
1 | example1 = 'flag{0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ}' |
flag:
1 | flag{0305f8f2-14b6-fg7b-bc7a-010299c881e1} |
总结:这个题当时是因为没有注意到upx的特征码被修改,所以去手脱upx,dump数据后发现出错了,思路被打乱了没有解出来,不过这个题也告诉了我upx加密特征码修改这个知识点,最后的脚本部分还是比较清晰的。
评论