从无解到破解:Mallox家族linux的解密器制作

新闻
5天前

1.背景

本篇文章主要讲解mallox家族lmallox勒索病毒的破解方法,背景详情可参考【病毒分析】Mallox家族再进化:首次瞄准Linux,勒索新版本全面揭秘!

2.恶意文件基础信息

2.1 加密器基本信息

文件名:

encrypto

编译器:


大小:

26936(26.30 KiB)

操作系统:

Ubuntu Linux(20.04.2,ABI: 3.2.0)

架构:

AMD64

模式:

64 位

类型:

DYN

字节序:

LE

MD5:

8d0fd41d35df82d3e7e2ff5c1747b87c

SHA1:

93ef3578f9c3db304a979b0d9d36234396ec6ac9

SHA256:

f4b64976d7dcb04466f0a89d81cd2eb158158c752c042ec248549415799965bf

3.逆向分析

加密算法分析:

这里直接从文件的加密部分开始分析,sub_364A函数部分可以看到该程序加密的开始

69dab304-c930-43ef-948b-536d00d91b11.png

进入到sub_2cd7函数可以看到具体所采用的加密算法等信息

2fa0407a-69c1-465a-b808-3920bab73353.png

从该函数可以了解到,整体的文件数据的加密采用了AES的加密算法,CBC的加密模式。

解密思路:

  解密需要获取到他的加密KEY和IV,其中IV的部分我们上面已经了解到,IV是随机生成的,并且写入到了文件的开头部分,而加密所需的KEY就是解密配置所使用的KEY。

  解密核心代码:
func decode_file(wg *sync.WaitGroup, path string) bool {
    defer wg.Done()
    hexKey := "310e72d723af744be6377c08949965626b1df9c3db6db2a418331fb1344c9a90"
    key, err := hex.DecodeString(hexKey)
    key = xor0x9b(key)
    cipherText, err := ioutil.ReadFile(path)
    if err != nil {
       log.Fatalf("Error reading file: %v", err)
       return false
    }
    iv := cipherText[:16]            // First 16 bytes for IV
    encryptedData := cipherText[16:] // Remaining part is encrypted data
    block, err := aes.NewCipher([]byte(key))
    if err != nil {
       log.Fatalf("Error creating cipher: %v", err)
       return false
    }
    mode := cipher.NewCBCDecrypter(block, iv)
    decrypted := make([]byte, len(encryptedData))
    mode.CryptBlocks(decrypted, encryptedData)
    decrypted = pkcs7Unpad(decrypted)
    if decrypted == nil {
       return false
    }
    outputpath := strings.Replace(path, ".lmallox", "", 1)
    err = ioutil.WriteFile(outputpath, decrypted, 0644)
    if err != nil {
       log.Fatalf("Error writing decrypted data to file: %v", err)
    }
    fmt.Printf("[+]文件: %s 解密成功!!\n", path)
    os.Remove(path)
    return true
}

解密结果:

ea27c707-d63b-4732-bc3c-5e6657b495a8.png

solar应急响应团队公众号后台回复lmallox