2023香山杯Re部分题解
URL
base64解码
a=[0x78, 0x8B, 0x96, 0x86, 0x78, 0x51, 0x91, 0x50, 0x6C, 0x62, 0x77, 0x53, 0x6C, 0x88, 0x63, 0x50, 0x78, 0x71, 0x4E, 0x50,
0x6B, 0x98, 0x77, 0x53, 0x6A, 0x72, 0x77, 0x97, 0x6C, 0x8B, 0x77, 0x92, 0x6C, 0x98, 0x63, 0x50, 0x6D, 0x71, 0x4E, 0x51,
0x6C, 0x62, 0x77, 0x96, 0x6C, 0x98, 0x5F, 0x50, 0x6B, 0x72, 0x81, 0x51, 0x6C, 0x88, 0x64, 0x57]
for i in range(len(a)):
a[i]-=30
print(a[i],end=' ')

APK

XXTEA加密
找脚本修改下数据
#include <stdio.h>
#include <stdint.h>
#define DELTA 0x9e3779b9
#define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))
void btea(uint32_t *v, int n, uint32_t const key[4])
{
uint32_t y, z, sum;
unsigned p, rounds, e;
if (n > 1) /* Coding Part */
{
rounds = 6 + 52/n;
sum = 0;
z = v[n-1];
do
{
sum += DELTA;
e = (sum >> 2) & 3;
for (p=0; p<n-1; p++)
{
y = v[p+1];
z = v[p] += MX;
}
y = v[0];
z = v[n-1] += MX;
}
while (--rounds);
}
else if (n < -1) /* Decoding Part */
{
n = -n;
rounds = 6 + 52/n;
sum = rounds*DELTA;
y = v[0];
do
{
e = (sum >> 2) & 3;
for (p=n-1; p>0; p--)
{
z = v[p-1];
y = v[p] -= MX;
}
z = v[n-1];
y = v[0] -= MX;
sum -= DELTA;
}
while (--rounds);
}
}
int main()
{
uint32_t v[9]= {689085350 ,626885696 ,1894439255 ,1204672445 ,1869189675 ,475967424 ,1932042439 ,1280104741 ,2808893494};
uint32_t const k[4]= {12345678 ,12398712 ,91283904 ,12378192};
int n= 9; //n的绝对值表示v的长度,取正表示加密,取负表示解密
// v为要加密的数据是两个32位无符号整数
// k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位
// btea(v, n, k);
// printf("after enc:%u %u %u\n",v[0],v[1],v[3]);
btea(v, -n, k);
printf("after dec:%s\n",(char*)v);
return 0;
}
//after dec:c1f8ace6-4b46-4931-b25b-a1010a89c592

浙公网安备 33010602011771号