题目有点夸大其词,事实是我也没能想出一个更好的描述来总结这篇文章的内容,所以才写了这么一个标题。
问题背景:某bbs娱乐区发布49选1的彩票,规则很简单,每次由管理人员设置一个1~49的数字,放在txt文件中,然后再用rar加密,上传到帖子的附件中,然后由会员用论坛货币购买自己所选的号码,对应可以选多少注,每注多少钱等等。
问题思考:从rar的角度而言,网络上还是有很多暴力破解的软件的,但是如果你的密码强度够好,比如数字字母特殊符号一起再长达几十位,个人电脑几天不关机也破解不出来。所以这种方法最最不可取。当破解代码的代价远远大于破解到的目标的价值时,没有人会去这么做。
RAR有个小毛病:说它是小毛病,也不尽然,仅仅是对于这种小文本文件才有的毛病,看图:
读者可以自己测试一下,一个字节的txt文本(也就是一个txt文本中只含有一个数字),压缩前为大小为1,压缩后大小也为1,加密压缩后大小为16;2字节的txt文本,压缩前大小为2,压缩后大小为2,加密压缩后大小为16。如果文本使用utf-8编码的话对应文本会比ansi编码大3,加密压缩后依然为16。
矛盾出现:rar的压缩文档中是提供一个CRC32的值,这个值是文档在压缩之前的CRC32值,相信很多人都知道:每个不同的文件都有唯一的一个CRC32值,就算是可能有重复的,那么在内容为1~49的这个小范围内的txt文本也不会有重复。为此,我用hash检测工具挨个测试,并列出了一个表。
txt文本中的内容 CRC32的数值
1 83DCEFB7
01 CF412436
2 1AD5BE0D
02 5648758C
3 6DD28E9B
03 214F451A
4 F3B61B38
04 BF2BD0B9
5 84B12BAE
05 C82CE02F
6 1DB87A14
06 5125B195
7 6ABF4A82
07 26228103
8 FA005713
08 B69D9C92
9 8D076785
09 C19AAC04
10 A15D25E1
11 D65A1577
12 4F5344CD
13 3854745B
14 A630E1F8
15 D137D16E
16 483E80D4
17 3F39B042
18 AF86ADD3
19 D8819D45
20 8A707622
21 FD7746B4
22 647E170E
23 13792798
24 8D1DB23B
25 FA1A82AD
26 6313D317
27 1414E381
28 84ABFE10
29 F3ACCE86
30 936B4763
31 E46C77F5
32 7D65264F
33 &nbs
p; 0A6216D9
34 9406837A
35 E301B3EC
36 7A08E256
37 0D0FD2C0
38 9DB0CF51
39 EAB7FFC7
40 DC2AD1A4
41 AB2DE132
42 3224B088
43 4523801E
44 DB4715BD
45 AC40252B
46 35497491
47 424E4407
48 D2F15996
49 A5F66900
很明显,没有重复的。(上面是ansi编码的时候测试的,utf-8的肯定和这个不一样。)
解决问题:根据上面列出的表格,图片中CRC32为13792798的txt文本文档的内容为23。
反破解方法,在文本中加入其它任意文字即可。呵呵...