<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    UC加密算法與解密

    概述:

    ??? UC是一款比較有名的國產(chǎn)聊天軟件,早先由longmaster開發(fā),現(xiàn)在已經(jīng)被新浪收購。目前新浪Web語音聊天室也已經(jīng)改裝為使用UC插件了。這樣一來新浪的Web聊天室看上去也很“安全”了。
    ?
    ??? 本文談?wù)刄C的文本加密方法,主要還是講分析方法要點和Blowfish的特征,因為結(jié)果本身并沒有什么好講的,還原實現(xiàn)直接看代碼就可以了。
    ?
    ?http://www.team509.com/download/ucsniffer.rar
    ?http://www.team509.com/download/ucsniffer.src.rar



    正文:

    ??? 我注意到UC的時候它的版本是v2.40,那時UC的聊天數(shù)據(jù)就已經(jīng)加密了,,一直到現(xiàn)在的UC2005(內(nèi)部版本號好象是什么4.10.625)。另外軟件本身也加了殼,在這一點上,UC比QQ做的好那么一點。然而,它的聊天文本加密是一個典型的完全不顧及密碼學(xué)基本常識的蹩腳作品。我是說,它居然使用固定密鑰!!!實際上再好的公開算法,也經(jīng)不住固定密鑰的糟蹋。真是可惜呀。
    ?
    ??? 關(guān)于Blowfish:Blowfish算法是密碼學(xué)牛人Bruce Schneier設(shè)計的算法,是一個64位分組,變長密鑰的分組密碼算法。據(jù)作者本人講,設(shè)計這個算法要達(dá)到四個目標(biāo):Fast,Compact, Simple和Variably Secure,想來應(yīng)該是做到了。我不是十分清楚對該算法的分析現(xiàn)在達(dá)到了什么境界,不過本文目的不是去分析算法,而是針對特定的錯誤應(yīng)用找出其中的漏洞。因此我們只要能辨認(rèn)出這個算法就可以了。
    ?
    ??? 這個算法明顯的匯編特征是,需要維護(hù)一個不小的表,加密的輪函數(shù)需要不斷查表以進(jìn)行運算。具體一點說是4個100h元的數(shù)組,每個元是一個32位整數(shù)。總計大小4*400h*4=1000h字節(jié)。另外附近還有一個18個元素的表,每個元素也是4字節(jié)。這些表的數(shù)值由加密密鑰初始化而得到,但是在以后的加密過程中這個表是只讀的,就是說其中的數(shù)據(jù)是不變的。表的使用方法是,把輸入的整數(shù)拆分成四個字節(jié),分別作四次查表,得到的結(jié)果作加法和異或運算后得到最后的該輪運算的結(jié)果。如果你看到某加密算法的匯編代碼中有這樣特征的話,十有八九就是Blowfish了。
    ?
    ??? 分析UC的過程,這里以UC2.40為例。首先查殼,ASPack 2.11 -> Alexey Solodovnikov(后來變成了ASPack 2.12),脫殼過程就不贅述了,跟蹤也不難,稍微細(xì)心一點,我們應(yīng)該很快就能找到對數(shù)據(jù)進(jìn)行加密處理的地方。一層層鉆進(jìn)call里面去后,我們可以看到下面這樣一段代碼:

    .text:005F92D4 sub_5F92D4????? proc near?????????????? ; CODE XREF: sub_5F9330+23 p
    .text:005F92D4???????????????????????????????????????? ; sub_5F9394+24 p
    .text:005F92D4
    .text:005F92D4 var_2?????????? = word ptr -2
    .text:005F92D4 arg_0?????????? = dword ptr? 8
    .text:005F92D4 arg_4?????????? = dword ptr? 0Ch
    .text:005F92D4
    .text:005F92D4???????????????? push??? ebp
    .text:005F92D5???????????????? mov???? ebp, esp
    .text:005F92D7???????????????? push??? ecx
    .text:005F92D8???????????????? push??? ebx
    .text:005F92D9???????????????? mov???? eax, [ebp+arg_4]
    .text:005F92DC???????????????? mov???? edx, [ebp+arg_0]
    .text:005F92DF???????????????? mov???? ecx, eax
    .text:005F92E1???????????????? and???? cx, 0FFh
    .text:005F92E6???????????????? mov???? [ebp+var_2], cx
    .text:005F92EA???????????????? shr???? eax, 8
    .text:005F92ED???????????????? mov???? ebx, eax
    .text:005F92EF???????????????? and???? bx, 0FFh
    .text:005F92F4???????????????? shr???? eax, 8
    .text:005F92F7???????????????? mov???? ecx, eax
    .text:005F92F9???????????????? and???? cx, 0FFh
    .text:005F92FE???????????????? movzx?? ecx, cx
    .text:005F9301???????????????? shr???? eax, 8
    .text:005F9304???????????????? and???? ax, 0FFh ; 到這里之前把輸入拆成了4個單字節(jié)
    .text:005F9308???????????????? movzx?? eax, ax
    .text:005F930B???????????????? mov???? eax, [edx+eax*4+48h] ; 這里
    .text:005F930F???????????????? add???? eax, [edx+ecx*4+448h] ; 這里
    .text:005F9316???????????????? movzx?? ecx, bx
    .text:005F9319???????????????? xor???? eax, [edx+ecx*4+848h] ; 這里
    .text:005F9320???????????????? movzx?? ecx, [ebp+var_2]
    .text:005F9324???????????????? add???? eax, [edx+ecx*4+0C48h] ; 這里
    .text:005F932B???????????????? pop???? ebx
    .text:005F932C???????????????? pop???? ecx
    .text:005F932D???????????????? pop???? ebp
    .text:005F932E???????????????? retn
    .text:005F932E sub_5F92D4????? endp
    ?
    ?
    ??? 看到了嗎?EDX這個地方是一個18元的整數(shù)表,其實也就是Blowfish代碼中維護(hù)的P盒,18*4=72=48h,那么EDX+48h,EDX+448h,EDX+848h和EDX+C48h就是S盒了,每個大小400h。標(biāo)注“這里”的這四句是四次查表運算,結(jié)果放在EAX里返回。完全和Blowfish的輪函數(shù)F相同,所以看到這里,基本可以確定算法就是Blowfish了。多次觀察加密過程,可以發(fā)現(xiàn)這個表里的數(shù)據(jù)總是不變的,說明UC的運行沒有任何密鑰協(xié)商過程,用的是固定密鑰。
    ?
    ??? Bruce原來的代碼(http://www.schneier.com/code/bfsh-sch.zip)中用P,S來命名,我覺得不大好,所以我改寫的時候稍微把名字加長了些。
    ?
    ??? 由于固定密鑰,為了代碼的簡便,我選擇了直接從內(nèi)存里(7B0034)把這段生成好的1048h字節(jié)數(shù)據(jù)扒下來,寫在了我的解密代碼中,這也就是我的代碼中P_BOX和S_BOX的來歷。這樣做一個好處是省去了調(diào)用InitializeBlowfish函數(shù)的時間,另外也真正做到專碼專用了。只要UC一天不改,這代碼就一天有效,決不含糊。
    ?
    ??? 現(xiàn)在的UC還是一直就使用這樣的算法,至少兩年都沒改過了,而且還把新浪Web聊天室也如此包裝了一下。解密既然不難,接下來的事情其實就都沒有難度了,我隨便分析了一下,寫了個ucsniffer。
    ?
    ??? 關(guān)于UC的語音聊天沒有仔細(xì)研究,如果沒改動過的話,應(yīng)該還是明碼,直接在線收聽或者錄下來慢慢聽都是可以實現(xiàn)的。


    結(jié)論:
    ??? 總地來說我覺得Blowfish算法本身應(yīng)該還是不錯地,知道使用Blowfish也說明作者應(yīng)該懂一些密碼安全知識,可惜最糟糕的事情莫過于此,固定的密鑰把所有本來應(yīng)該有的安全性全部破壞掉了。

    posted on 2006-12-05 10:31 77 閱讀(2768) 評論(1)  編輯  收藏

    評論

    # re: UC加密算法與解密 2007-05-09 17:29 AAAAA

    您好! 試過您的代碼.
    對聊天內(nèi)容能進(jìn)行破解. 但是,好像比較長的內(nèi)容,不能完全顯示.
    對于舊版本的UC在登陸時, 也能進(jìn)行密碼的解析, 但新版就不能了.
    我的mail: plyat@tom.com  回復(fù)  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(12)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    API文檔

    java開發(fā)與研究

    にほん

    上海房產(chǎn)

    東京生活

    數(shù)據(jù)庫大全

    編程與開發(fā)

    美國開發(fā)生活

    走向管理

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 午夜小视频免费观看| 久久久久av无码免费网| 免费国产在线观看| 理论亚洲区美一区二区三区 | 亚洲综合色在线观看亚洲| 国产精品亚洲а∨天堂2021 | 亚洲无码精品浪潮| 一级做a爱过程免费视频高清 | 久久久亚洲精品国产| 日日麻批免费40分钟无码| 久久久久久久亚洲Av无码| www.免费在线观看| 亚洲中文字幕无码av| 日本一区免费电影| 亚洲黄片手机免费观看| 亚洲最大激情中文字幕| 中文字幕成人免费视频| 中文字幕亚洲精品无码| 亚洲福利精品电影在线观看| 国产午夜精品免费一区二区三区| 7777久久亚洲中文字幕蜜桃| 在线观看的免费网站| 国产亚洲福利精品一区二区| 亚洲日韩一页精品发布| 国产男女爽爽爽爽爽免费视频| 亚洲欧美日韩一区二区三区| 亚洲乱码中文字幕手机在线| 免费人成视频在线观看网站| 久久夜色精品国产噜噜亚洲a| 亚洲精品456播放| 精品无码无人网站免费视频| 亚洲中文字幕一二三四区苍井空| 四虎永久成人免费| 男女午夜24式免费视频| 亚洲欧美成aⅴ人在线观看| 亚洲熟妇av一区二区三区漫画| 亚洲一区二区三区免费在线观看| 国产精品亚洲精品久久精品| 亚洲人成在线观看| 四虎永久免费观看| 69免费视频大片|