巅峰极客2023初赛部分wp
Crypto
数学但高中
本来想手搓的,在队友提醒下直接GPT4生成脚本
生成的脚本有点问题,把整个椭圆都画出来了,显然看原函数只有半个椭圆
1 | import numpy as np |
另外,一些字母也可以直接看出来,因为题目说没有字母,所以不可能是O
1 | flag{Funct10n_Fun} |
还可以在线画,记得给函数加花括号
https://www.desmos.com/calculator?lang=zh-CN
Reverse
gore
先脱壳
搜索main_main函数一个是AES,一个是Base64,主函数后半部分还有一个^0x1A
查字符串能明显看到base64变表:456789}#IJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123ABCDEFGH
接下来需要动调拿到AES的key,解密函数处下一个断点,接下来去找动调后的串
多了123是因为一开始输的就是123,拿到key:wvgitbygwbk2b46d
先异或0x1A再加v57[i%16],最后和密文v53比较
1 | enc=[0xE6, 0xCE, 0x89, 0xC8, 0xCF, 0xC5, 0xF5, 0xC9, 0xD2, 0xD9, |
m1_read
识别出来是AES
白盒加密是一种特殊的加密方法,它允许加密数据在不受信任的环境中被解密而无需暴露密钥本身,不会直接保存一个明显的16字节 key,而是把密钥融合进大量查表、轮函数和编码变换中
针对白盒加密可以使用DFA攻击,在倒数第一轮列混淆和倒数第二轮列混淆之间修改中间结果的一个字节,会导致最终密文和正确密文有4个字节不同。通过多次的修改,得到多组错误的密文,然后通过正确密文和这些错误密文推算出加密模式下第10轮的密钥,从而能推算出原始密钥
aes+异或0x66
1 | import frida |
用frida hook key,在第9轮时随机修改中间状态的1个字节,第一次输出可以看作正确密文,后面多次输出是在第9轮随机改一个字节后的错误密文
1 | var baseAddr = Module.findBaseAddress("m1_read.exe") |
利用phoenixAES实现DFA
1 | # s1是前文中的33轮数据,以字符串形式存储(包含换行,否则无法识别) |
用Stark提供一轮密钥暴力破解AES-128
在提供的out.bin里根据M1卡的存储格式,第一行中,4B为校验位,剩下为厂商信息,需要解密的部分为第三行
1 | from Crypto.Cipher import AES |
flag{cddc8d28dabb4ea9}
- 标题: 巅峰极客2023初赛部分wp
- 作者: j1ya
- 创建于 : 2023-07-24 20:09:19
- 更新于 : 2026-10-02 16:17:02
- 链接: https://j1ya-22.github.io/2023/07/24/2023巅峰极客初赛部分wp/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。