从无解到破解:Mallox家族linux的解密器制作
1.背景
本篇文章主要讲解mallox家族lmallox勒索病毒的破解方法,背景详情可参考
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函数部分可以看到该程序加密的开始

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

从该函数可以了解到,整体的文件数据的加密采用了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
}
解密结果:

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