红白机
看了一眼是 6502 汇编,直接找了个模拟器跑了一下:
xor
愣是让我手搓了半天。直接去 IDA 把大体逻辑扒拉下来:
1 | lst1 = [ord(i) for i in "6329079420771558"] |
反过来,写一下,跑一遍,就拿 Flag 了:
1 | fin = [ord(i) for i in "`agh{^bvuwTooahlYocPtmyiijj|ek'p"] |
ezpython
在混沌的源头寻找秩序,当时间的沙漏倒置,你会发现钥匙不仅仅藏在表面之下。
是 Python,但是打包好的 exe 文件。拿 pyinstxtractor 和 uncompyle6 解包和反编译后可以看到源码:
1 | from gmssl import sm4 |
很好啊,直接解密… 哎?怎么解密不出来。那就看一眼打包好的 gmssl/sm4 吧:
1 |
|
哎好,在依赖里面藏了个坑。不过这个坑也不难填,直接把 key 里面的每个字节都异或 37 然后正常 SM4 解密就行了。
real checkin xor
1 | def verify_func(ciper,key): |
签到题。
1 | def verify_func(ciper, key): |
stick game
JavaScript 被混淆了,不过不要紧,稍微格式化后也能看。搜索 score 能找到分数变化部分的代码,手动给它加点分数,然后正常流程结束游戏就可以了(高亮的那一行是我自己补的):
This article is authored by Luoingly and is licensed under CC BY-NC 4.0
Permalink: https://luoingly.top/post/beginctf-2024-reverse-writeup/