對360通信錄加密方式的技術(shù)分析


14351463033448

受到David Auerbach[1]的啟發(fā),我們分析了360通信錄,發(fā)現(xiàn)了一些非常有趣的安全問題,這里我們談?wù)勊鼈鬏敿用芊矫娴膯栴}。360通信錄可以在奇虎的官方網(wǎng)站上下載[2]。這個(gè)應(yīng)用提供了垃圾短信識別、來電號碼識別等功能。下面是關(guān)于這個(gè)應(yīng)用的一些基本信息。

App:?360?contact
Version:?2.1.2
Package:?com.qihoo360.contacts
MD5:?024d2b182fcadf19dc31457e7612c297
SHA-1:?de0c0d41dfae8d9803d898ba8955691dc7dffdf7

找備份的密鑰

這個(gè)應(yīng)用在設(shè)置選項(xiàng)中,還有一個(gè)備份的功能,使用這個(gè)功能,用戶可以將通訊錄備份到云上。我們先來看看用戶備份時(shí)傳輸?shù)臄?shù)據(jù):

14351463033448

從傳輸?shù)臄?shù)據(jù)我們可以看出,1、這個(gè)app使用了http協(xié)議來傳輸數(shù)據(jù);2、傳輸數(shù)據(jù)被加密了。為了查清這個(gè)應(yīng)用如何對數(shù)據(jù)進(jìn)行加密,我們轉(zhuǎn)向到這個(gè)app的代碼。通過代碼,我們發(fā)現(xiàn),這個(gè)app使用了des加密算法來加密待傳輸?shù)臄?shù)據(jù)(Figure 2)。而加密密鑰來自原生代碼(Figure 3)。

14351463033448

14351463033448

接下來,我們轉(zhuǎn)向原生代碼,F(xiàn)igure 4是對應(yīng)的,提供解密密鑰的接口函數(shù)。其中的sub_758164B4()函數(shù)負(fù)責(zé)生成密鑰。請注意,這個(gè)函數(shù)被調(diào)用時(shí),攜帶的第二個(gè)參數(shù)是個(gè)常量。

14351463033448

隨后,我們進(jìn)入到函數(shù)sub_758164B4。分析發(fā)現(xiàn),解密密鑰來自于這個(gè)函數(shù)的第二個(gè)參數(shù),其生成算法非常簡單,即第二個(gè)參數(shù)所指向的字符串中的每個(gè)字符減13,就得到最后的解密密鑰。前面我們提到,這個(gè)函數(shù)的第二個(gè)參數(shù)是個(gè)固定的字符串。

由此,我們得出,通過http協(xié)議傳輸?shù)臄?shù)據(jù)的解密密鑰也是固定的,這個(gè)值為:*#13o-69!

14351463033448

14351463033448

解密數(shù)據(jù)

為了解密數(shù)據(jù),我們又回到了java代碼(Figure 8),通過分析,我們弄清楚了這段傳輸?shù)臄?shù)據(jù)(Figure 1)的具體含義:

14351463033448

14351463033448

接下來的工作應(yīng)該來說就比較簡單了,我們隨后寫了段簡單的代碼來驗(yàn)證了我們的結(jié)論。

14351463033448