<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聊天室看上去也很“安全”了。
    ?
    ??? 本文談談UC的文本加密方法,主要還是講分析方法要點和Blowfish的特征,因為結果本身并沒有什么好講的,還原實現(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做的好那么一點。然而,它的聊天文本加密是一個典型的完全不顧及密碼學基本常識的蹩腳作品。我是說,它居然使用固定密鑰!!!實際上再好的公開算法,也經(jīng)不住固定密鑰的糟蹋。真是可惜呀。
    ?
    ??? 關于Blowfish:Blowfish算法是密碼學牛人Bruce Schneier設計的算法,是一個64位分組,變長密鑰的分組密碼算法。據(jù)作者本人講,設計這個算法要達到四個目標:Fast,Compact, Simple和Variably Secure,想來應該是做到了。我不是十分清楚對該算法的分析現(xiàn)在達到了什么境界,不過本文目的不是去分析算法,而是針對特定的錯誤應用找出其中的漏洞。因此我們只要能辨認出這個算法就可以了。
    ?
    ??? 這個算法明顯的匯編特征是,需要維護一個不小的表,加密的輪函數(shù)需要不斷查表以進行運算。具體一點說是4個100h元的數(shù)組,每個元是一個32位整數(shù)。總計大小4*400h*4=1000h字節(jié)。另外附近還有一個18個元素的表,每個元素也是4字節(jié)。這些表的數(shù)值由加密密鑰初始化而得到,但是在以后的加密過程中這個表是只讀的,就是說其中的數(shù)據(jù)是不變的。表的使用方法是,把輸入的整數(shù)拆分成四個字節(jié),分別作四次查表,得到的結果作加法和異或運算后得到最后的該輪運算的結果。如果你看到某加密算法的匯編代碼中有這樣特征的話,十有八九就是Blowfish了。
    ?
    ??? 分析UC的過程,這里以UC2.40為例。首先查殼,ASPack 2.11 -> Alexey Solodovnikov(后來變成了ASPack 2.12),脫殼過程就不贅述了,跟蹤也不難,稍微細心一點,我們應該很快就能找到對數(shù)據(jù)進行加密處理的地方。一層層鉆進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代碼中維護的P盒,18*4=72=48h,那么EDX+48h,EDX+448h,EDX+848h和EDX+C48h就是S盒了,每個大小400h。標注“這里”的這四句是四次查表運算,結果放在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。
    ?
    ??? 關于UC的語音聊天沒有仔細研究,如果沒改動過的話,應該還是明碼,直接在線收聽或者錄下來慢慢聽都是可以實現(xiàn)的。


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

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

    評論

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

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


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


    網(wǎng)站導航:
     
    <2007年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    統(tǒng)計

    常用鏈接

    留言簿(12)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    API文檔

    java開發(fā)與研究

    にほん

    上海房產(chǎn)

    東京生活

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

    編程與開發(fā)

    美國開發(fā)生活

    走向管理

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 97精品免费视频| 亚洲一区二区三区偷拍女厕| 永久免费A∨片在线观看| 亚洲国产欧美国产综合一区| 亚洲视频在线观看一区| 中文字幕亚洲日本岛国片| 四虎成人免费网址在线| 2022久久国产精品免费热麻豆| 成全视成人免费观看在线看| 青草久久精品亚洲综合专区| 亚洲精品福利你懂| 久久精品亚洲精品国产色婷 | 亚洲va中文字幕无码久久不卡| 精品久久久久久久免费加勒比| 免费观看激色视频网站bd| 久久国产乱子伦精品免费强| 一区二区三区免费视频网站| 精品亚洲成A人在线观看青青| 在线观看亚洲AV日韩A∨| 亚洲国产精品成人综合久久久| 亚洲好看的理论片电影| 国产精品亚洲成在人线| 老司机亚洲精品影视www| 免费女人18毛片a级毛片视频| 色吊丝永久在线观看最新免费| 毛片免费vip会员在线看| 日本成年免费网站| 7723日本高清完整版免费| 57pao一国产成视频永久免费| 99视频在线看观免费| 亚欧免费一级毛片| 久久综合国产乱子伦精品免费 | 久久精品亚洲日本佐佐木明希| 亚洲精品无码乱码成人| 亚洲人成精品久久久久| 国产精品亚洲片在线观看不卡 | 在线观看人成视频免费无遮挡| 黄色网页在线免费观看| 久久久久久久国产免费看| 两性色午夜免费视频| 毛片免费在线观看|