相关资源

0x1 分析

  • Shift+F12 查看字符串,追寻到 “you are right.”的使用处, 发现核心处理代码

img

img

img

  • 进入查看发现35行 sub_140011339 将key置为[2233,4455,6677,8899]

  • 36行 sub_140011145 将input复制到v9, 无用

  • 37行 sub_1400112B7 利用input和key执行核心加密算法,且可逆向

    img

  • 38行 sub_140011352 检查结果

    img

0x2 逆向脚本

逆写算法就可以,注意循环下标也要逆序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <limits.h>

int main() {
unsigned int a1[]= {0x1A800BDA, 0xF7A6219B, 0x491811D8, 0xF2013328, 0x156C365B, 0x3C6EAAD8, 0x84D4BF28, 0xF11A7EE7, 0x3313B252, 0xDD9FE279 };
int a2[]={2233,4455,6677,8899};
int v3,v5,v6;
for (int i = 8; i >= 0; i-- ) {
v5 = 0;
v6 = 256256256 * i;
v3 = i + 1;
for(int j=0; j<=0x20; j++) {
v6+=256256256;
}
do {
++v5;
v6 -= 256256256;
a1[v3] -= (v6 + a2[(v6 >> 11) & 3]) ^ (a1[i] + ((a1[i] >> 5) ^ (16 * a1[i])));
a1[i] -= v6 ^ (a1[v3] + ((a1[v3] >> 5) ^ (16 * a1[v3]))) ^ (v6 + a2[v6 & 3]);
} while ( v5 <= 0x20 );
}
for(int i=0;i<10;i++){
printf("%#x ",a1[i]);
}
return 0;
}

img

HZCTF{hzCtf_94_re666fingcry5641qq}

⬆︎TOP