2023年春秋杯网络安全联赛冬季赛UPX2023
0x00 题目分析
upx壳,但是有点小修改
主打一个爆破
0x01 解
查壳,UPX,但不太一样
Don’t try : upx.exe -d
WHY?
CFF看看咋回事
大写变小写了(
丢010里面改大写就行
之后就能正常脱壳了
脱完直接上IDA
符号什么的都有,非常好看,不过要注意change函数和unk_46A020里的东西
先看看change函数
1 | v13 = 3 |
第一个for循环初始化v9为3*len(a2)
,并全部用10进行填充
第二个for循环取a2中的值,然后放入v9中,v9被分为三段,每段长len(a2)
,a2
的第一个值放入v9的第一段,第二个值放入第二段,第三个值放入第二段,第四个值放入第一段,第五个值放入第二段,第六个值放入第三段,之后以此类推,相当于做一个钟摆循环
第三个for将v9中不等于10的值按顺序放入a1中,最后返回一个a1
然后来看看unk_46A020里面的东西(转成dd了)
这个应该就是密文了
1 | char enc[] = { 0x09, 0x63, 0xD9, 0xF6, 0x58, 0xDD, 0x3F, 0x4C, 0x0F, 0x0B, 0x98, 0xC6, 0x65, 0x21, |
知道这些就可以写脚本了
由于题目由flag{}
包裹,所以结合flag长度为42,大概就知道flag{}
这几个字符被放在了密文什么位置,之后写个脚本爆破就好了
获取“flag{}”这几个字符的位置
1 | s = b"flag{" |
根据索引进行爆破得到seed
1 |
|
然后用seed去解密其他字符
1 |
|
最后重新排列一下,这里用到一个映射的思想,注意保证里面的字符不同即可
1 | enc = b"f{52bgb-281lg00ff-46f7-ca009c8e}a381-b7191" |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The Blog of WoaW04!