原文
00 01 50 98 8C C3 00 58 26 01 A0 C9 9A 29 40 E2
E0 CD 0E 3A E3 62 CE 52 37 45 ED 03 AE 98 3C 7D
9E 0A 03 BE 53 E9 A2 E2 EB B5 FC 32 E6 A9 EB 76
AA 0F 0D 05 6C 56 FD 7E 2C D8 C0 E9 AD 68 EF 58
F9 59 57 54 E6 B7 58 55 0A 07 13 64 F0 1C 0D 3C
15 95 54 6F 60 BC 66 FB C0 02 97 B3 DC 46 D0 BB
第一次加密后数据是
00 00 52 9B 88 C6 06 5F 2E 08 AA C2 96 24 4E ED
F0 DC 1C 29 F7 77 D8 45 2F 5C F7 18 B2 85 22 62
BE 2B 21 9D 77 CC 84 C5 C3 9C D6 19 CA 84 C5 59
9A 3E 3F 36 58 63 CB 49 14 E1 FA D2 91 55 D1 67
B9 18 15 17 A2 F2 1E 12 42 4E 59 2F BC 51 43 73
45 C4 06 3C 34 E9 30 AC 98 5B CD E8 80 1B 8E E4
我第一个算法是猜出来的
for ( int i = 0; i < size; i ++ )
{
data[i] = data[i] ^ i; // 就是第一次加密后的数据
}
这个是加密key
DC B9 A5 72 99 C5 8D 24
最后加密后结果是
27 D1 93 31 2F D7 56 FB 2E 74 76 81 4A 07 FF C7
E7 A2 CD 1F A4 02 2A 15 7F 1C 6B 63 0B 74 37 B4
A6 70 FF A3 B5 98 D0 E6 FD 09 2B 9F 24 FA D2 CD
4C FD BC 72 9B 25 1D AD 00 3B 0D 99 E0 D0 39 43
C7 F5 56 69 04 96 85 CC 02 8F A1 F3 29 31 CB A3
BC 50 40 66 FA FE 5B 1D DC 2A 3C 6B C7 01 9F 89
经过第一次加密后 头2个字节都是 0
27 = DC ^ FB(这个FB 不知道怎么算出来的)
D1 = B9 ^ 68(这个68 又是怎么来的)
刚才又跟了一下
把第一次的数据全部根据要求设置成一个值的话 第二次加密结果如下
key
DC B9 A5 72 99 C5 8D 24
0
27 D1 A9 F7 F9 1F 70 46
1
CF E1 04 FC 0D 85 86 94
2
18 D6 70 57 9C AC 5D D3
3
B2 8B 45 6D 80 00 3E 0D
4
F1 6F E9 FD CE C7 6B 4F
5
22 71 4E FE 36 68 B4 0A
key是固定的 只要内容一样 每次加密出来的数据都是一样的, 求第二次加密是怎么计算的 源码是经过vm处理过的 但是可以确定参数和key是不变的 只要 第二次加密后的数据 和 key 进行运算后等于最后加密后的结果便可
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)