2025数字中国APP赛道安全积分争夺赛决赛部分wp

数据加密

crackme

找到关键函数,因为不知道CCCrypt(0, 0, 1u对应什么算法,得到正确的key和iv后尝试解密

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
__int64 __fastcall verify_system_password(const void *a1)
{
_BYTE v2[4]; // [xsp+20h] [xbp-90h] BYREF
__int64 *v3; // [xsp+28h] [xbp-88h]
_BYTE *dataOut; // [xsp+30h] [xbp-80h]
int v5; // [xsp+3Ch] [xbp-74h]
int i; // [xsp+44h] [xbp-6Ch]
const char *v8; // [xsp+48h] [xbp-68h]
size_t dataOutMoved[3]; // [xsp+50h] [xbp-60h] BYREF
size_t dataOutAvailable; // [xsp+68h] [xbp-48h]
size_t v11; // [xsp+70h] [xbp-40h]
const void *v12; // [xsp+78h] [xbp-38h]
unsigned int v13; // [xsp+84h] [xbp-2Ch]
char iv[16]; // [xsp+88h] [xbp-28h] BYREF
char key[16]; // [xsp+98h] [xbp-18h] BYREF

v3 = &qword_1000140B0;
v12 = a1;
++qword_1000140B0;
v11 = strlen((const char *)a1);
dataOutAvailable = (v11 + 16) & 0xFFFFFFFFFFFFFFF0LL;
dataOutMoved[2] = (size_t)v2;
dataOut = &v2[-((dataOutAvailable + 15) & 0xFFFFFFFFFFFFFFF0LL)];
dataOutMoved[1] = dataOutAvailable;
dataOutMoved[0] = 0LL;
v8 = "1234561234561234";
for ( i = 0; i < 16; ++i )
{
++v3[1];
key[i] = encrypted_system_key[i] ^ v8[i];
iv[i] = encrypted_system_iv[i] ^ v8[i];
}
print_crypto_info();
if ( CCCrypt(0, 0, 1u, key, 0x10uLL, iv, v12, v11, dataOut, dataOutAvailable, dataOutMoved) )
{
++v3[2];
v13 = 0;
v5 = 1;
}
else
{
if ( dataOutMoved[0] == 16 )
{
LOBYTE(v13) = memcmp(dataOut, &encrypted_system_password, 0x10uLL) == 0;
v13 = (unsigned __int8)v13;
}
else
{
++v3[3];
v13 = 0;
}
v5 = 1;
}
return v13;
}

隐私合规

TaskPrivate(1)

发现des和base64

只找到了key,猜测key和iv是一样的

密文先from hex再解base64,最后des解密

**MD5{银行卡+密码}**后提交

TaskPrivate(2)

MainActivity里找到申请读取短信和打电话的权限

md5后得到flag


2025数字中国APP赛道安全积分争夺赛决赛部分wp
https://j1ya-22.github.io/2025/04/19/2025数字中国APP赛道安全积分争夺赛决赛部分wp/
作者
j1ya
发布于
2025年4月19日
许可协议