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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#include <stdio.h>
#include <stdint.h>
//加密函数
void encipher(unsigned int num_rounds, unsigned int v[2], unsigned int const key[4]) {
unsigned int i;
unsigned int v0=v[0], v1=v[1], sum=0xe8017300, delta=0xFF58F981;
for (i=0; i < num_rounds; i++) {
v0 += ((((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]))^0x44;
v1 += ((((v0 << 5) ^ (v0 >> 6)) + v0) ^ (sum + key[(sum>>11) & 3]))^0x33;
sum -= delta; //0xE5F194CB
//0x5A2C6B06
}
v[0]=v0; v[1]=v1;
// printf("sum:%x\n",sum);
}
void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
unsigned int i;
uint32_t v0=v[0], v1=v[1], delta=0xFF58F981, sum=0xfce242e0;
for (i=0; i < num_rounds; i++) {
sum += delta;
v1 -= ((((v0 << 5) ^ (v0 >> 6)) + v0)) ^ (sum + key[(sum>>11) & 3])^0x33;
v0 -= ((((v1 << 4) ^ (v1 >> 5)) + v1))^ (sum + key[sum & 3])^0x44;
}
v[0]=v0; v[1]=v1;
}
int main()
{
// unsigned int pp=0xe8017300;
// for (int i=0;i<1;i++) pp-=0xFF58F981;
// printf("%x\n",pp);
//0x8569d705,0xcb62d74f,0xef10015ad9fa14c50d0df43bcf3f595e358591a8fdf5a93e
unsigned int aa[8]={0xdd243dab,0x898587d8,0x2fdf1d,0xbc4aca2,0x4d68a16a,0x616c5d29,0x5b911af5,0x4c7710dc,};
unsigned int key []= {0x5454,0x4602,0x4477,0x5e5e,};
unsigned int tem[2]={0x32317b66,0x74633364,};//e186adf8
encipher(32,tem,key);
// printf("1: %x\n",tem[0]);
// printf("2: %x\n",tem[1]);
//fakeflag{Is_there_anywhere_else}
for (int i=0;i<8;i+=2){
tem[0]=aa[i];
tem[1]=aa[i+1];
decipher(32,tem,key);
aa[i]=tem[0];
aa[i+1]=tem[1];
}
// for (int i=0;i<8;i++){
// printf("0x");
// for (int p=3;p>=0;p--){
// printf("%x",aa[i*4+p]);
// }
// printf(",");
//
// }
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < sizeof(uint32_t)/sizeof(uint8_t); j++)
{
printf("%c", (aa[i] >> (j * 8)) & 0xFF);
}
}
printf("\n");
int keyy[]={0xB6DDB3A9,0x36162C23,0x1889FABF,0x6CE4E73B,0xA5AF8FC,
0x21FF8415,0x44859557,0x2DC227B7};
int k=0x84a6972f;
for (int i=0;i<8;i++) {
printf("0x%x,",decrypttt(keyy[i],k));
}
// int aaaa[]={0x5A, 0x04, 0x38, 0x35, 0x70, 0x36, 0x3C, 0x31, 0x37, 0x70,
// 0x36, 0x3F, 0x22, 0x3D, 0x31, 0x24, 0x70, 0x39, 0x23, 0x70,
// 0x34, 0x63, 0x33, 0x24, 0x36, 0x2B, 0x2D, 0x5A, 0x22, 0x39,
// 0x37, 0x38, 0x24, 0x71};
// for (int i=0;i<34;i++) printf("%c",aaaa[i]^0x50);
// f2a4b673 811e1727 4446bdaefb3556a53338fae370c4fecfac833f58589e5e2
// 0x73b6a4f2,0x27171e81
return 0;
}
|