2023羊城杯初赛部分Reverse
Reverse
csgo
main_main找到字符串
直接base64解码不对
调试main_main->mainCfunc_enc->maincgo_ce3afc93dff5_Cfunc_enc->go_ce3afc93dff5_Cfunc_enc,拿到正确编码表
fkReverse函数是base64
blast
翻译过来是爆炸,应该和爆破有关
md5初始化,剩余过程应该是被混淆了,问题不大
同时sub_404010函数被调用两次,分析发现进行两次md5
循环和47个大数比较
密文
直接在可见字符范围内爆破
1 | import hashlib |
ez_encrypt
先输入验证码再输入flag
根据GetFlag字符串找到密文和疑似base64表
sub_1400036A0为base64
交叉引用发现base64编码内容a000000为前面的验证码,a11111111111111为输入的flag
sub_140003A20等价下面写法,相当于6位数字,从a000000初始值为000000也可以看出来
1 | bool sub_140003A20(char *a1) { |
还有DES加密,对应sub_140003AE0,key为上面验证码base64编码后结果
1 | from Crypto.Cipher import DES |
从上面可以看出DES的key不同解密结果也能一致,这是因为DES 的 8字节 key 里,每个字节只有 7 bit 真正参与加密,最低位通常是奇偶校验位,不参与密钥调度
vm_wo
自实现vmp
进入myoperate函数,下面是key和code
interpretBytecode函数写了个典型的翻译器
1 | __int64 __fastcall interpretBytecode(__int64 result, int n15) |
可以采用逐字符爆破
1 | import struct |
或者先还原汇编语句
1 | opcode0 = b'\x1a\x00\x03\x19\x01\x01\r\x02\x07\x18\x01\x02\x01\x00\x03' |
从opcode0到opcode3得到完整汇编,reg[3]到reg[6]其实是key
1 | 0: reg[0] = input |
- 标题: 2023羊城杯初赛部分Reverse
- 作者: j1ya
- 创建于 : 2023-09-18 22:59:48
- 更新于 : 2026-10-03 23:06:38
- 链接: https://j1ya-22.github.io/2023/09/18/2023羊城杯初赛部分Reverse/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论