原帖地址:http://bbs.pediy.com/showthread.php?p=1115922#post1115922
经过朋友提醒 最后收集了key 本机上是可以了,但是其他机器不行,硬着头皮又跟了3天..
经过这几天的努力 发现貌似是rc4算法 但是我用标准rc4算法算不出结果
待加密原文
00 01 50 A3 5A 97 00 58 8B 17 67 B1 50 07 23 25
D7 07 3B 5C EB 1D 33 BC 0B CB 1E 39 90 8D DA 5F
90 7F 00 61 34 5B E5 43 4D 02 8D 3E F8 1A 8D 19
23 32 CD AE 5E F9 FA 62 A5 96 75 45 B8 60 2B 17
44 AA B5 98 3D 2A F6 40 0B 10 DB C4 E4 0D E5 6E
59 CF F1 53 EA E9 E4 03 81 F0 70 23 00 95 FF 93
第一次加密后
byData[0x60] =
00 00 52 A0 5E 92 06 5F 83 1E 6D BA 5C 0A 2D 2A
C7 16 29 4F FF 08 25 AB 13 D2 04 22 8C 90 C4 40
B0 5E 22 42 10 7E C3 64 65 2B A7 15 D4 37 A3 36
13 03 FF 9D 6A CC CC 55 9D AF 4F 7E 84 5D 15 28
04 EB F7 DB 79 6F B0 07 43 59 91 8F A8 40 AB 21
09 9E A3 00 BE BC B2 54 D9 A9 2A 78 5C C8 A1 CC
实际上是
for ( int i = 0; i < 0x60; i ++ )
{
byData[i] ^= i;
}
第二次加密
运用到的key
DC B9 A5 72 99 C5 8D 24
又用到一个256字节的缓冲区
让我想到了是rc4算法
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
密码盒子初始化后
XBOX[256]
6A B2 A6 12 EA 4B FA AC 79 5D 84 2A 91 7C 01 D3
24 B6 07 34 55 0F 9C F9 4A 5E E4 1A 22 20 83 21
6B 2E 65 37 62 B0 F7 29 9F BC CF 92 3B 88 98 80
E1 3A 7B EC F6 0D E8 53 A2 1D 26 9D AA E7 B7 47
B1 3F 0E 67 00 18 90 B8 5F 70 CC 86 28 75 14 33
1C 4D CE BD AE A7 BB 87 82 06 0A 6D B4 81 52 A8
49 31 7A A0 78 1B 1E BE 99 2F 11 ED CA 89 3D CB
25 1F 85 8E 6C 56 8F 8C 3C EE 96 DF 48 E9 C0 A9
66 C6 8A A4 5A D7 27 44 39 E6 09 DB 0B FD B3 D0
15 42 C9 08 F4 64 C3 30 94 60 19 05 AF 57 DE 41
EB 4C F0 E5 A1 0C E0 D5 B5 35 16 BF 7D 63 D8 BA
F3 CD C7 9A FC 23 B9 61 58 68 32 6F C8 D6 E2 F8
AD 02 D2 72 40 DA C5 69 DC E3 95 54 FF 5B 46 97
03 50 45 4F C1 EF 8B AB 2D FE F1 59 FB 13 C4 6E
2B C2 93 5C 3E A5 F5 7E 38 43 76 71 9E D9 2C D1
74 D4 F2 A3 DD 77 4E 36 9B 73 51 10 04 7F 17 8D
第二次加密后
待加密的数据变成
27 D1 93 37 F0 42 56 FB 74 6C 79 AE 43 52 66 25
C6 03 AE 95 87 9E 38 F4 4B 54 E9 6E 96 62 FD 5C
16 C7 E1 93 7F AA 99 95 B4 70 03 CC EC 37 15 23
4B 8B AF A3 3A 98 B2 3B E3 25 D3 E3 B9 51 19 B5
F1 77 6B 47 B2 D3 6A 13 9D 92 53 0D A3 12 7A 6F
33 90 5F F7 B0 2B CA 01 97 9D 75 F6 43 B9 B6 1C
经过分析得出是 算法是
for ( int i = 0; i < 0x60; i ++ )
{
int iKeyPos = key[i % 8];
outdata[i] = byData[i] ^ iKeyPos ^ XBox[iKeyPos];
}
这个XBOX 要怎么初始化? 跟了下rc4的初始化 结果和我这里分析的不一样
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课