Microsoft Office Access 2003已经面试很久了,相关的解密程序也早就面试了。我用过一些,界面很好,很人性化。对密码的读取也是很方便的,这些都是我们应该学习的地方。今天我写着篇文章主要是让大家在使用的基础上更加了解Access数据库密码读取软件的原理。希望大家多多的指教。 下面我们开始。 Microsoft Office Access 2003 的密码存储的地方和过去的版本并不太一样,但是变动不是很大。 以前是从第63位开始顺序和字符串作异或,密码最大为13位,可是现在的Microsoft Office Access 2003的密码长度为20位,看上去密码比过去更加难以破解,其实不然,这次加密非常简单,大家往下看。 下面是access的头用二进制编辑器打开以后的二进制码。 以散列保存的,我们先来看一下没有家密码的头。 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000:00 01 00 00 53 74 61 6E 64 61 72 64 20 4A 65 74 00000010:20 44 42 00 01 00 00 00 B5 6E 03 62 60 09 C2 55 00000020:E9 A9 67 72 40 3F 00 9C 7E 9F 90 FF 85 9A 31 C5 00000030:79 BA ED 30 BC DF CC 9D 63 D9 E4 C3 D3 41 FB 8A 00000040:BC 4E B1 68 EC 37 6A D7 9C FA F1 CD 28 E6 24 25 00000050:8A 60 63 07 7B 36 C2 E1 DF B1 40 67 13 43 F8 3C 00000060:B1 33 03 F2 79 5B A5 26 7C 2A 4F E9 7C 99 05 13 00000070:98 FD 63 40 F3 4E 9B 58 82 66 5F 95 F8 D0 89 24 00000080:85 67 C6 1F 27 44 D2 EE CF 65 ED FF 07 C7 46 A1 00000090:78 16 0C ED E9 2D 62 D4 54 06 00 00 34 2E 30 00 看到了吗用红色标出来的是未加密的字符串,在往下看 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000:00 01 00 00 53 74 61 6E 64 61 72 64 20 4A 65 74 00000010:20 44 42 00 01 00 00 00 B5 6E 03 62 60 09 C2 55 00000020:E9 A9 67 72 40 3F 00 9C 7E 9F 90 FF 85 9A 31 C5 00000030:79 BA ED 30 BC DF CC 9D 63 D9 E4 C3 D3 41 FB 8A 00000040:BC 4E 80 68 DE 37 59 D7 A8 FA C4 CD 1E E6 13 25 00000050:B2 60 5A 07 4B 36 F3 E1 ED B1 73 67 27 43 CD 3C 00000060:87 33 34 F2 41 5B 9C 26 4C 2A 4F E9 7C 99 05 13 00000070:98 FD 63 40 F3 4E 9B 58 82 66 5F 95 F8 D0 89 24 00000080:85 67 C6 1F 27 44 D2 EE CF 65 ED FF 07 C7 46 A1 00000090:78 16 0C ED E9 2D 62 D4 54 06 00 00 34 2E 30 00 以上这个是加密过的头,用红色标出来的是密码存放的位置,剩下的问题就简单了,我们开始看一下是如何加密的。 用户输入的密码,从第一位和红字 第一位做ASC11异或,在放回红字第一位,解密只需把加密过的16近制字符和红字做异或即可。 下面我们写一个简单的程序来做一下解密 ///////////////////////////////// // ----小松---- ///////////////////////////////// #include <stdio.h> #include <tchar.h> int _tmain(void) { char passwd_n[20] = {0xB1, 0xEC, 0x6A, 0x9C, 0xF1, 0x28, 0x24, 0x8A, 0x63, 0x7B, 0xc2, 0xDF, 0x40, 0x13, 0xF8, 0xB1, 0x03, 0x79, 0xA5, 0x7C,}; //未加密 char passwd_y[20] = {0x80, 0xDE, 0x59, 0xA8, 0xC4, 0x1E, 0x13, 0xB2, 0x5A, 0x4B, 0xF3, 0xED, 0x73, 0x27, 0xCD, 0x87, 0x34, 0x41, 0x9C, 0x4C}; //已加密 for(int i = 0; i < 20; i++) { printf("%C,", passwd_n[i]^passwd_y[i]); } } 上面这个简单的程序完成了密码的读取,大家如果有兴趣可以自己尝试。
|
2007年4月6日星期五
Access 2003的密码深入浅出
订阅:
博文评论 (Atom)
没有评论:
发表评论