<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/tips/11342

                    持續更新的惡意軟件
                    原文:http://blog.talosintel.com/2015/12/cryptowall-4.html

                    0x00 摘要


                    在過去的一年里,Talos花費了大量的時間去研究ransomware的運作原理,它與其他惡意軟件的管理,還有它的經濟影響。這項研究對開發檢測方法和破壞攻擊者的攻擊有很大的價值。CrytoWall是一款惡意軟件,在過去的一年里,先是升級成了CryptoWall2,隨后升級為CryptoWall3。盡管大家都在努力檢測和破壞它的攻擊行為,但是這款惡意軟件開發者還是很厲害的,改進了一些技巧,然后現在放出了CryptoWall4這個版本。

                    為了保證我們能最有效地檢測出來,Talos對CryptoWall4進行了逆向,去理解它的行為,還有升級之后的差異,并放在這里分享我們的研究成果。

                    讀者可能不熟悉,ransomware是一款惡意軟件,它鎖定用戶的文件(比如照片,文檔,音頻文件等等),然后對其進行加密。用戶要給贖金才能解密這些文件,查看里面的內容。通常,用戶會通過釣魚郵件感染ransomware。CryptoWall4的核心功能仍然沒變,加密用戶文件然后要贖金解密。然而,Talos發現了一些新的特性。比如加密算法變了,而且CryptoWall4加入了一項新的技術來禁用并刪除了Windows所有的自動備份機制,沒有外部的備份想自行恢復文件基本不可能了。

                    我們還發現CryptoWall4用了一些沒有公開的API來獲得入侵主機的本地語言設置。在后面的文章里,會更詳細地闡述Talos發現的CryptoWall的新特性。

                    對于有經驗的讀者,我們建議您繼續讀下午。我們強烈建議用戶和企業遵循安全規范,而且采用多層次的檢測手段來規避風險。我們對新版本CryptoWall的深入分析,給了我們保護用戶和確定更好的檢測方案的技術支持。最后,針對FBI聲明說的:用戶沒辦法了還是支付贖金吧。Talos強烈建議用戶們不要支付贖金,因為這樣會直接讓這項惡意行動受益。

                    0x01 感染


                    CryptoWall的經營者用網絡釣魚和drive-by-download來將他們的惡意程序傳播給用戶。一旦CryptoWall4被成功運行,就會從C2服務去下載一個RSA公鑰。然后所有的文件都被暫時地先被AES秘鑰加密,之后就會被下載下來的RSA公鑰加密。然后會用三種不同的方式告訴用戶,你被加密了。第一種是一個文本文件,第二種是一張.png的圖,第三種是一個HTML文檔。所有的都會自動地從受害者的桌面打開。如下面所示。

                    Alt text FigureA.1

                    Alt text FigureA.2

                    Alt text FigureA.3

                    Alt text FigureA.4

                    Alt text FigureA.5

                    一個有趣的發現是,一旦CryptoWall4不能從C2 server檢索到RSA公鑰,它就會不停地循環來下載公鑰。只要公鑰得不到,CryptoWall就不會破壞受害者的電腦。Talos同樣觀察到,這個樣本也有一些另外的安全檢查,比如如果受害者機器上的語言不受支持,就會自動終止感染進程。下面幾種語言設置不會被感染:

                    Russian, Kazakh, Ukrainian, Uzbek, Belarusian, Azeri, Armenian, Kyrgyz, Georgian.

                    很明顯,攻擊者想要排除一些地區,使之免受感染。

                    感染進程就如下圖描述的一樣:

                    Alt text Figure B

                    從上圖所示的 ”Delete all shadow copies“開始,CrytoWall4已經注入到了svchost進程。注入到這個進程是為了在受害者機器上獲得更高的權限,以此來繞過UAC。有權限了才能靜默地刪除所有的系統備份,不然會有UAC提示用戶來處理。

                    下圖C描述的是其網絡通訊,用的是HTTP協議,但是對payload進行了加密。如圖D和圖E

                    Alt text Figure C

                    Alt text Figure D

                    Alt text Figure E

                    CryptoWall4用了一個新的文件名生成算法來給加密后的文件命名:

                    1. 掃描磁盤驅動器,排除在白名單里的磁盤驅動器
                    2. 從目錄下得到原始文件,然后跳過白名單里的文件名和擴展名
                    3. 產生隨機的文件名長度(5-10)
                    4. 由隨機的‘a-z’來構建文件名,長度是3得到的。(先得到0-1000的隨機數,然后對26取模,再變成‘a-z’的字母)
                    5. 文件名字符串以Null結尾
                    6. size/2和size中間取一個隨機數num1。(size為文件名長度)
                    7. 在1個num1中去一個隨機數num2(num2決定接下來往文件名字符串里插入隨機數字的個數)
                    8. 獲得一個隨機的 0-9(char類型),插入到文件名的隨機位置
                    9. 重復step8,num2次
                    10. 用同樣的算法來生成擴展名,不過長度是2-5
                    11. 文件名后加上擴展名

                    CryptoWall4用的CRC32校驗算法來排除一些目錄,文件名和擴展名。下面是一些白名單:

                    Extensions:
                    exe, dll, pif, scr, sys, msi, msp, com, hta, cpl, msc, bat, cmd, scf
                    Directories:
                    windows, temp, cache, sample ,pictures, default pictures, Sample Music, program files, program files (x86), games, sample videos, user account pictures, packages
                    Files:
                    help_your_files.txt, help_your_files.html, help_your_files.png, thumbs.db

                    完整的白名單在文章末尾Appendix A.

                    這些在白名單里的目錄,文件名以及擴展名都是為了保證操作系統的穩定性。這意味著受害者可以繼續用他們的電腦來支付贖金。任何被感染的用戶都應該記住,下次開機,加密又會自動運行,然后把新創建的任何文件都加密一次。

                    生成新文件的文件名后,它的加密算法如圖F所示:這也清楚地告訴我們,在CryptoWall4將文件加密之后,如果沒有RSA私鑰來還原AES秘鑰,要還原文件,基本不可能。然而私鑰只存在于攻擊者的電腦上,而且不會傳給用戶的電腦。換句話說,用戶不支付贖金獲得私鑰,就沒辦法還原文件。用戶應該備份好自己的重要文件,才能保證遭受這種攻擊后,不用支付贖金就能將其恢復。

                    Alt text Figure F

                    0x02 主體


                    病毒程序主體被壓縮,且被不同的殼保護了,殼里面有很多垃圾代碼,無用的API調用,還有代碼混淆技巧,比如用調用隨機的API,參數還很奇怪。

                    Alt text Figure G

                    第二層保護用的一種交錯跳轉形式的代碼:

                    INSTRUCTION 1
                    INSTRUCTION 2
                    JNO nextSteo
                    

                    0x03 解壓縮代碼


                    主要的代碼和之前版本的CryptoWall是非常相似的:首先構造自己的IAT,獲得需要的系統調用并且創建自己的主事件對象來管理進程同步(名字是workstation的MD5)。這個事件有兩個目標:在執行期間,阻止其余的CryptoWall4進程運行而且為感染有關的不同的進程實現同步。這寫代碼注入到一個新命名為“explorer.exe”進程里。注入到目標進程里的實際代碼,用了這兩種技術中的一種:

                    1. ZwCreateSection和ZwMapViewOfSection
                    2. ZwAllocateVirtualMemory , ZwWriteVirtualMemory 和 ZwProtectVirtualMemory

                    最后,代碼被重新安置。用了兩種不同的技術來進行注入:

                    1. 用ZwQueueApcThread這個內部API來將APC隊列注入到目標進程
                    2. 經典的CreateRemoteThread方法

                    最終注入到新的 宿主“explorer.exr”進程里的代碼,會被執行然后用CryptoWall4感染系統并且實現持續感染。程序主體被復制進%APPDATA%目錄,然后在用戶根目錄的"Run"鍵值后添加進去,實現開機自啟。

                    病毒程序會用一種現在還沒被發現方法來禁止所有的系統還原點,和windows備份。首先調用SRRemoveRestorePoint,然后參數是0-1000,直到方法返回ERROR_INVALID_DATA。它將注冊表HKLM\Software\Microsoft\Windows Nt\SystemRestore路徑下的“DisableSR”鍵值設置為1,這樣就完全禁止了系統還原。最后它開始執行刪除存儲備份的標準命令:

                    #!bash
                    vssadmin.exe Delete Shadows /All /Quiet
                    

                    接下來的流程在 “svchost.exe”進程里面。代碼會重建IAT表,創建另一個事件(只在“svchost.ext”里使用),然后去形成并且打開自己的配置文件。這一步經常會失敗,因為配置文件這時候還沒有存在。dropper打開并解壓位于自己內部的C&C URL列表(用的LZ壓縮算法)。最后它嘗試發廣播去連接其中的某個 C&C server。

                    可以在IOC段找到惡意程序使用的C&C server的列表。

                    CryptoWall4的網絡包比較特別,是下面這樣的:

                    | request Id | crypt7 | workstation MD5 [|subRequest Id 1|subRequest 1 Data| … ]

                    在寫這篇文章的時候,我們成功地了分出了五種不同的類型的包(request ID不同)。

                    1,3  --- Announcement packet --用來告訴C&C server有新的機器被感染了
                    7 --- Multi purpose packets。第一個sub-request ID用來區分不同類型的包:
                       1 - Public key request  -用來向 C&C server請求一個新的公鑰,為之后的加密做準備
                       2 -  End announcement packet 用來告訴服務器感染結束了。另一個sub-request ID代表感染如何結束的詳細信息:
                       1  - Success
                      2, 3 - Unsupported OS language packet - Exit 
                    

                    這些包用標準的HTTPS協議送到網絡上,但是在這之前就被加密了。加密算法很普通,用一個隨機的字符串作為key,然后形成這樣格式的數據流:

                    | Letter |=| encryption Key in Hex | encrypted stream |

                    例如:
                    s=6975376e7a9b0fd24886fbd0c0de32d3ab4dd97174462ca3b06af16a1c840ae893eddacafbd93e56847c23a41352d4f45fc75468e4408

                    在廣播進程成功連接到 C&C server后,就會請求獲得公鑰。這里有一個CryptoWall4的做的不足的地方:如果防火墻或者IPS足夠好,能夠攔截CryptoWall4的包,感染就進行不下去了。RSA-2048公鑰請求包的request ID是7。C&C server返回的包這樣子構成:

                    1. 付款URL的列表
                    2. base64加密的RSA-2048公鑰
                    3. base64加密的PNG圖片(圖片由系統的語言設置決定)

                    Alt text Figure H.1

                    Alt text Figure H.2

                    Alt text Figure H.3

                    公鑰用CryptStringToBinary API來解密。解密后的數據被存在一個全局變量中。HTML和text文件(用LZ 壓縮算法壓縮)由dropper釋放出來,最終創建好配置文件并被加密,存儲在 C:\Users\[Username]\AppData\Roaming\[Random 8 digits]中。

                    CryptoWall4會確認配置文件的完整性,包含執行惡意代碼所需要的全部信息。還會保證就算被中斷了,惡意程序還是能繼續加密文件。這個文件有很多連續的區段,開頭是一個DWORD的值,來指定該區段的大小。

                    CryptoWall4在配置文件里,存儲如下的信息:

                    文件加密進程完成后,最后三個文件會被寫到感染者機器的所有目錄下。

                    配置文件最終被壓縮(LZ壓縮算法,RtlCompressBuffer API,參數是2 COMPRESSION_FORMAT_LZNT1),然后為寫入磁盤中。

                    一切順利的話,主線程會被創建,之前的線程被終止(RtlExitUserThread)

                    0x04 主線程


                    主線程從導入公鑰開始,這會把加密的公鑰的二進制的數據解析成能被Windows Crypto APIs識別的數據結構。CryptoWall4用的CryptDecodeObjectEx API來解析加密的公鑰。這之后,二進制數據被轉化為一個CERT_PUBLIC_KEY_INFO結構體。最后,新的數據結構被導入到Crypto APIs中,用的函數是CryptImportPublicKeyInfo,會返回一個xx句柄。然后會計算公鑰的MD5,這一步非常重要,因為它會被用來檢查受害者的文件是否已經被加密。

                    這之后,真正的加密進程啟動。對每個邏輯分區,會有下面的檢查:

                    #!cpp
                    LPWSTR pngFilePath = new TCHAR[MAX_PATH];
                    // This produces something like "C:\HELP_YOUR_FILES.PNG"
                    ComposePngPath(driveName, "HELP_YOUR_FILES.PNG", pngFilePath, MAX_PATH);
                    if (!FileExists(pngFilePath) == TRUE) {
                     // Proceed with the encryption
                     // … … …
                    }
                    

                    一般來說,如果磁盤的根目錄下含有HELP_YOUR_FILES.PNG文件,這塊磁盤會被跳過。我們不知道這是一個bug還是它故意這么做的。對每個過濾掉的磁盤,一個新的加密線程會被啟動(線程主函數的參數是一個小的結構體,一部分是公鑰,一部分是磁盤名字符串的指針)

                    主線程會等待所有的加密進程完成。然后把那三個含有解密指示的文件放在兩個位置:一是開始菜單的啟動目錄,而是桌面。

                    最后,一個end announcement包會被創建并發給C&C server。配置文件被刪除,進程被終止(用的ZwTerminateProc)

                    Alt text Figure I

                    0x05 加密線程


                    加密線程有兩個主要任務:首先它調用“DoFilesEncryption”將所有白名單之外的文件加密,最后它將HELP_YOUR_FILES.PNG寫到根目錄里。

                    DoFileEncryption會遍歷目標磁盤目錄下所有的文件夾和文件。

                    遇到子目錄,會檢查目錄名字,進行CRC32檢驗,看是否在白名單里(這樣,“windows”,“system32”,“temp”這樣的文件夾被過濾掉)。而且檢查HELP_YOUR_FILES.PNG是否存在,如果不存在,就繼續調用DoFileEncryption,參數是當前的目錄。

                    對文件的檢查做了兩次:擴展名和文件名。沒有在白名單里面的,會調用EncryptFile來進行加密。

                    “EncryptFile”函數,是用來將目標文件加密的。“IsFileAlreadyEncrypted"函數會檢查目標文件是否已經被加密:讀取最開始的16字節,然后和公鑰的MD5值作比較。

                    這個時候,惡意程序會生成隨機的文件名和擴展名。下面是算法:(用的RtlRandomEx API獲得每一個可打印字符)

                    #!cpp
                    // Generate a random value
                    DWORD GenerateRandValue(int min, int max) {
                        if (min == max) return max;
                        // Get the random value
                        DWORD dwRandValue = RtlRandomEx(&g_qwStartTime.LowPart);
                        DWORD dwDelta = max - min + 1;
                        dwRandValue = (dwRandValue % dwDelta) + min;
                        return dwRandValue;
                    }
                    // Generate a Random unicode string
                    LPWSTR GenerateRandomUString(int minSize, int maxSize) {
                        DWORD dwStringSize = 0;             // Generated string size
                        DWORD dwNumOfDigits = 0;            // Number of number letters inside the string
                        LPWSTR lpRandString = NULL;         // Random unicode string
                        // Generate the string size, and alloc buffer
                        dwStringSize = GenerateRandValue(minSize, maxSize);
                        lpRandString = new TCHAR[dwStringSize+1];
                        for (int i = 0; i < (int)dwStringSize; i++) {
                              DWORD dwLetter = 0;                       // Generated letter
                              dwLetter = GenerateRandValue(0, 1000);
                              dwLetter = (dwLetter % 26) + (DWORD)'a';
                              lpRandString[i] = (TCHAR)dwLetter;
                        }
                        // NULL-terminate the string
                        lpRandString[dwStringSize] = 0;
                        // Now insert the digits inside the string
                        DWORD dwUpperHalf = GenerateRandValue(dwStringSize / 2, dwStringSize);
                        dwNumOfDigits = GenerateRandValue(1, dwUpperHalf);
                        for (int i = 0; i < (int)dwNumOfDigits; i++) {
                              DWORD dwValue = 0, dwPos = 0;       // Generated value and position
                              dwValue = GenerateRandValue(0, 9) + (DWORD)'0';
                              dwPos = GenerateRandValue(0, dwStringSize-1);
                              lpRandString[dwPos] = (TCHAR)dwValue;
                        }
                        return lpRandString;
                    }
                    // Generate a random file name starting from a file full path
                    BOOLEAN GenerateRandomFileName(LPWSTR lpFileFullPath, LPWSTR * lppNewFileFullPath,
                     LPWSTR * lppOrgFileName) {
                        LPWSTR lpRandFileName = NULL;         // New random file name (without extension)
                        LPWSTR lpRandExt = NULL;              // New random file extension
                        LPWSTR lpNewFileName = NULL;          // The new file full name
                        DWORD dwSize = 0;                     // size of the new filename
                        // Check the arguments
                        if (!lpFileFullPath || !lppNewFileFullPath || !lppOrgFileName)
                              return FALSE;
                        // Generate the new file name (without extension)
                        lpRandFileName = GenerateRandomUString(5, 10);
                        // Generate the random file extension
                        lpRandExt = GenerateRandomUString(2,5);
                        // Combine the new file name and extension and generate the final new file path
                        // ....
                        dwSize = wcslen(lpRandFileName) + wcslen(lpRandExt) + 1;
                        lpNewFileName = new TCHAR[dwSize+1];
                        swprintf_s(lpNewFileName, dwSize+1, L"%s.%s", lpRandFileName, lpRandExt);
                        // ....
                    }
                    

                    新的文件被創建,一個新的AES-CBC 256 key也通過調用CryptGenKey和CryptExportKey生成。這個32位的key會用來加密整個文件。

                    這時CryptoWall4采取了一個技巧:講生成的AES key用從C&C server得到的RSA-2048公鑰加密,這樣就生成了一個256位的key,而且只能被攻擊者解密。

                    RSA公鑰的MD5值會寫到被加密的文件頭部16字節。然后CryptoWall4寫入256位的加密字串。原始文件的屬性和大小被寫入接下來的8字節。原始文件名被得到的AES密鑰加密,然后和文件大小一起,被寫入到新的加密文件中。

                    這之后,開始真正的文件內容加密。原始文件每次被讀512kb,存到一個大的數據塊里。每個數據庫會被加密密鑰進行AES-CBC 256加密。然后直接寫入到新文件里(開頭四字節是塊的大小)

                    完成后,CryptoWall4占用的所有資源被釋放。原始文件被刪除,這個過程比較有趣,見下面代碼:

                    #!cpp
                    // Move the new encrypted file name in the old original position, replacing the old one
                    
                    bRetVal = MoveFileEx(newEncFileName, lpOrgFileName,
                    MOVEFILE_WRITE_THROUGH | MOVEFILE_REPLACE_EXISTING);
                    if (!bRetVal)
                    // Delete the old file in the standard manner:
                        DeleteFile(lpOrgFileName);
                    else {
                        // Rename the original replaced file in the new random file name
                        bRetVal = MoveFileEx(lpOrgFileName, newEncFileName, MOVEFILE_REPLACE_EXISTING);
                    }
                    

                    從偽代碼看得出來,存儲原始文件的磁盤區被特殊地重寫了,這樣能保證數據恢復起來非常困難。這是惡意程序的作者來保證高付款率的新奇有趣的方法。減少數據恢復的可能,這樣他們更好賺錢。下圖是加密后的文件的結構:

                    Alt text Figure J

                    0x06 總結


                    這篇分析里,我們細致分析了CryptoWall4。惡意程序沒有任何創新性的技術,但是還是有幾個技術亮點。缺陷是感染進程需要和C2 server進行交互。如果防火墻或者IPS能捕獲它用來交互的數據包,感染進程就進行不下去了,因為它需要得到公鑰才能加密受害者的文件。然而,一旦CryptoWall4加密了受害者的文件,不給攻擊者支付贖金,就沒有辦法恢復私鑰或者是解密文件。因為受害者的機器上得不到RSA私鑰。私鑰只存在于攻擊者手里。

                    正如我們的分析展示的,CryptoWall的開發者不斷在更新這款惡意軟件,保證它對用戶仍然是有效的。在威脅之上,企業需要認識到,攻擊者會不斷地改進這款惡意軟件。用多層次的自我保護方法,能幫助企業監測到CryptoWall,阻止其威脅。Talos也會繼續跟進CryptoWall的研究,找到更好的監測方法,然后為用戶建立更好的防護體系。沃恩強烈建議用戶和企業遵循安全規范,比如及時安裝系統補丁,收到未知的三方信息的時候要謹慎,還要保證有一個給力的備份。這些措施能減少這些惡意程序的威脅,而且被攻擊了也能有應急措施。

                    0x07 防護


                    Alt text

                    0x08 others


                    IOC DETAILS

                    這里可以下載IOCs http://blogs.cisco.com/wp-content/uploads/cryptowall-4-iocs.txt

                    樣本:

                    3a73bb154506d8a9a3f4f658bac9a8b38d7590d296496e843503323d5f9b7801
                    

                    相似樣本:

                    2d04d2a43e1d5a6920a806d8086da9c47f90e1cd25aa99b95af182ee9e1960b3
                    bf352825a70685039401abde5daf1712fd968d6eee233ea72393cbc6faffe5a2
                    299b298b433d1cc130f699e2b5c2d1cb3c7e5eb6dd8a5c494a8c5022eafa9223
                    

                    威脅報告:

                    https://panacea.threatgrid.com/samples/d25f94dc4f2ac59e0428f54d685ead38

                    C2 URL 列表

                    abelindia.com/1LaXd8.php
                    purposenowacademy.com/5_YQDI.php
                    mycampusjuice.com/z9r0qh.php
                    theGinGod.com/HS0ILJ.php
                    yahoosupportaustralia.com/8gX7hN.php
                    successafter60.com/iCqjno.php
                    alltimefacts.com/EiFSId.php
                    csscott.com/YuF59b.php
                    smfinternational.com/eRs70a.php
                    lexscheep.com/OIsSCj.php
                    successafter60.com/r_kfhH.php
                    posrednik-china.com/etdhIk.php
                    ks0407.com/VoZQ_j.php
                    stwholesaleinc.com/yL54uH.php
                    ainahanaudoula.com/GH09Dp.php
                    httthanglong.com/yzoLR7.php
                    myshop.lk/6872VF.php
                    parsimaj.com/60wEBT.php
                    kingalter.com/uVRfPv.php
                    shrisaisales.in/ZUQce4.php
                    cjforudesigns.com/E8B2gt.php
                    mabawamathare.org/WEAbCT.php
                    manisidhu.in/zJE0fD.php
                    adcconsulting.net/XEGeuI.php
                    frc-pr.com/dA91lI.php
                    localburialinsuranceinfo.com/zDJRc8.phpsmfinternational.com/AYNILr.php
                    

                    附錄A

                    Excluded files CRC32 Checksums
                    8E87F076h = help_your_files.txt
                    0A73B295Ch = help_your_files.html
                    11A8ACA3h = help_your_files.png
                    88068F93h
                    775DBED4h
                    60479578h 
                    7BD40679h = iconcache.db
                    48F43013h = thumbs.db
                    95ED794Ah
                    884F3F52h
                    7DAC63A1h
                    4208466h
                    0BA069E4Ch
                    0EC619E8Dh
                    9B0FD8B3h
                    
                    Excluded extensions CRC32 Checksums 
                    6B63B6F0h = exe
                    3DD3B336h = dll
                    0BB5EA5C1h = pif
                    592D276Fh = scr
                    9E07ED22h = sys
                    8F3272A8h = msi
                    0A45BDDC1h = no three letter ext
                    0B65F578Ah = no three letter ext
                    0EB59DA68h = msp
                    64B6C6E6h = com
                    0C863AEB6h = hta
                    0DEEBF8EEh = cpl
                    6FE79BB6h = msc
                    9F9C299Fh = bat
                    2F5C1CC0h = cmd
                    43F7F312h = scf
                    
                    Excluded directories CRC32 Checksums
                    0E3E7859Bh = windows
                    0B5385CAh = temp
                    0ED4E242h
                    9608161Ch
                    41476BE7h = cache
                    0F5832EB4h
                    0D8601609h
                    1DF021B7h
                    0B91A5F78h = sample pictures
                    0A622138Ah = default pictures
                    3FF79651h = sample Music
                    62288CBBh = program files
                    224CD3A8h = program files (x86)
                    72D480B3h
                    0FF232B31h = games
                    0A33D086Ah = sample videos
                    78B7E09h = user account pictures
                    9BB5C0A7h = packages
                    24FA8EBDh
                    

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频