日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Avaddon勒索解密工具原理解析

發(fā)布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Avaddon勒索解密工具原理解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • Avaddon勒索
    • 解密工具
    • 解密工具原理
    • 解密工具優(yōu)化
    • 關于文件大小的疑惑
    • Avaddon勒索加密流程補充
    • 解密工具實現(xiàn)
    • 相關資料

Avaddon勒索

該勒索病毒使用C++語言進行編寫,采用RSA-2048和AES-256加密算法對文件進行加密,加密庫使用的是Windows自帶的CryptAPI

被該勒索加密后的文件后綴為avdn

解密工具

國外安全研究人員發(fā)布了一款Avaddon勒索病毒解密工具,解密工具源代碼地址:

https://github.com/JavierYuste/AvaddonDecryptor

經(jīng)過測試,這個工具確實是可以解密被Avaddon勒索加密的文件,下面是 我輸出的解密時的日志

想要解密被加密的文件 需要具備下面幾個條件

  • 當前存活的勒索進程
  • 勒索進程的dump文件
  • 一份被加密的文件
  • 一份被加密文件的原始文件
  • 然后調(diào)用下面這個命令

    python3 main.py -f <encrypted_file> -o <original_file> -d <memory_dump> --folder <folder_to_decrypt>

    就可以解密機器上所有的被加密文件了(需要修改源碼中寫死的三個路徑 才能把解密腳本跑起來)

    解密工具原理

    目前我的需求是把這個解密能力集成的到公司的工具里,再來分析一下代碼

    首先在dump文件中搜索所有可能的密鑰,然后返回一個偏移列表,再根據(jù)這個偏移列表,去拿到所有的key

    輸出的日志顯示offset有90個,也就是說有90個AES的密鑰

    然后利用搜索到的key去解密文件,每解密一次,都去和源文件進行比對,比對成功則說明密鑰正確

    比對成功之后,開始解密整個系統(tǒng)的文件。

    解密文件時,傳入被加密的文件路徑和解密后的文件路徑以及密鑰文件路徑,然后調(diào)用DecryptFile.exe對文件進行解密

    需要特殊處理的是,如果文件大小大于0x100000個字節(jié),那么解密完成之后需要將0x10000字節(jié)后的數(shù)據(jù)全部復制到解密后的文件。

    也就是說這個勒索實際上只會加密前0x10000個字節(jié),這個細節(jié)在目前已有的分析報告中并沒有提及。

    解密完成之后,將文件截斷為原始文件大小

    那么這里其實有一個問題,為什么可以根據(jù)內(nèi)置的特征碼搜索到AES密鑰?那個密鑰的特征碼是哪來的?

    作者在代碼中給出了這樣一句注釋

    # Dump the process with procdump.exe -ma <PID> # Pattern to search for (part of the key_data_s structure, in particular alg_id, flags and key_size): # 106600000100000020000000

    根據(jù)這個提示,找到了這個結(jié)構(gòu)體,原文出處:https://forums.codeguru.com/showthread.php?79163-Structure-of-HCRYPTKEY-Data

    struct key_data_s {void *unknown; // XOR-eduint32_t alg;uint32_t flags;uint32_t key_size;void* key_bytes; };

    勒索采用的是AES256 ,那 alg = 0x00006610,keysize=0x00000020, flags= 0x1

    則特征值對應:106600000100000020000000

    這個結(jié)構(gòu)體來自于CryptApi,作者是逆向了cryptsp.dll和rsaenh.dll這兩個dll得到的這個數(shù)據(jù)結(jié)構(gòu)。

    也就是說,這種在內(nèi)存中暴力搜索密鑰去解密被加密文件的方式,只適用于調(diào)用了CryptApi,并且隨機生成密鑰的情況。

    那么有沒有可能將作者的源碼進行優(yōu)化呢?答案是有

    解密工具優(yōu)化

    在這之后,bd也針對該勒索發(fā)布了一款解密工具,根據(jù)提示,也是基于上面的代碼做了一個圖形化的工具而已。

    工具只需要一個被加密文件和被加密前的源文件,不需要選擇進程,不需要dump文件,就能對整個文件夾進行解密,但是我這里測試是解密失敗的。分析一下這個工具有沒有什么可借鑒的地方

    bd的做法是遍歷整個系統(tǒng)的進程

    直接在內(nèi)存里匹配密鑰,

    如果匹配完成,就直接讀取,然后調(diào)用解密程序。

    關于文件大小的疑惑

    根據(jù)網(wǎng)上的分析報告提示

    最后附加的24個字節(jié)中前4個字節(jié)是原始文件大小,但這個大小似乎不太對。如果原始文件大小是0x01EB0B,那么

    0x01EB0B-512-24=0x1E8F3

    但上圖被加密文件數(shù)據(jù)的大小是0x20000,這個文件大小這么來看的話是對不上的。直到我即將完成我的解密工具的時候,解密出來的文件在末尾總是會出現(xiàn)一堆0。

    末尾的這一堆0,直接導致了解密后的文件和解密前的文件md5對比失敗,一開始我以為是程序邏輯上的bug,但是后來發(fā)現(xiàn)并不是。實際上

    文件大小的計算方式如下:

    加密后的文件大小(小于0x100000)=原始文件大小+填充0的字節(jié)數(shù)+512+24

    以下面某個文件為例:

    • 原始文件大小為:0x2EE82
    • 加密后的文件大小為:0x30218

    • 填充0的字節(jié)數(shù)為4478
    0x30218=0x2EE82+4478+512+24

    最后填充的0實際上是為了對齊到0x2000個字節(jié),因為該樣本每次會加密0x2000個字節(jié),如果不足2000那么在加密的過程可能會導致異常退出。

    Avaddon勒索加密流程補充

    解決了文件大小的問題,這里對Avaddon勒索的AES加密流程做一個補充。

    對于文件大小小于0x10000的文件,首先會在文件末尾填充0,將大小補齊到0x2000,然后將樣本進行加密處理,每次加密0x2000個字節(jié)

    對于文件大小大于0x10000的文件,直接加密前0x10000個字節(jié),0x10000以后的部分不做加密處理。所以在末尾不需要填充0

    解密工具實現(xiàn)

    那么到這里,已經(jīng)填完了所有的坑,可以做一個相對來說最優(yōu)化的解決方案。整個解密流程如下:

    BOOL Check(LPCTSTR lpszFile);

    首先判斷是否是該家族的加密文件,判斷條件有三個,兩個末尾24字節(jié)寫死的特征碼和文件大小的計算是否滿足條件

    void GetValidPid();

    然后獲取有效進程的PID,遍歷整個進程,并且獲取進程映像文件的md5,將md5和注冊表啟動項中的映像文件做對比,如果對比成功,說明可能是潛在的勒索進程。
    這個勒索是會將路徑寫到啟動項,可以通過這個方法來過濾掉絕大部分的進程,提高后面特征匹配的效率

    ScanAddress(hProcess, (char*)"106600000100000020000000", 0);

    接著遍歷所有的有效進程,搜索特征碼,獲取到所有可能的Key

    BOOL GetUniqueKey(LPCTSTR szSourceFile, LPCTSTR szEncryptedFile);

    用所有可能的Key文件去解密被加密文件,如果解密出來的文件和源文件md5一致,那么視為密鑰獲取成功。
    成功獲取密鑰的條件也可以用文件格式的魔數(shù)頭來做判斷,但是并不符合我的應用場景。

    void DecryptAllFiles(LPCTSTR FileDirectory);

    開始解密整個需要解密的目錄

    記錄一下整個過程和一些踩過的坑,這個解密工具寫了快1100行代碼,花了6天左右的時間。工程這里就不發(fā)了。

    相關資料

    勒索分析:https://www.freebuf.com/articles/others-articles/249109.html

    解密工具: https://github.com/JavierYuste/AvaddonDecryptor

    勒索解密工具分析:https://mp.weixin.qq.com/s?__biz=MzA4ODEyODA3MQ==&mid=2247486514&idx=1&sn=6464b9066980a6c045a33ef58dd5b6b0&chksm=902fa31aa7582a0c88242eb816fb466cbb7f94fe33b3e8b14f1f769d6d493961eaf9721cc87d#rd

    密工具分析:https://mp.weixin.qq.com/s?__biz=MzA4ODEyODA3MQ==&mid=2247486514&idx=1&sn=6464b9066980a6c045a33ef58dd5b6b0&chksm=902fa31aa7582a0c88242eb816fb466cbb7f94fe33b3e8b14f1f769d6d493961eaf9721cc87d#rd

    總結(jié)

    以上是生活随笔為你收集整理的Avaddon勒索解密工具原理解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。