病毒背景:
这个勒索病毒关键在于加密文件
运行环境:win10
一个勒索病毒 去微步下个样本回来
1.DIE查壳 无壳
大部分都是 创建文件 注册表相关的操作
2.简单运行:
发现后缀名.Snake4444
HOW_TO_BACK_FILES.txt
E9...........文件:
根据提示消息 发现 E9.。。。。。文件的 后部分内容就是personal id
start函数---> 跟进函数 sub_409C6B----->
跟进sub_408B19 函数 以下是加密解密相关的
学了AES RSA 继续分析后
结论:用AES内置的密钥解密出内置的RSA公钥
分析:
结论:计算解密出来的RSA公钥的SHA256
分析:
可以看到GetModuleFileNameW 函数:获取当前程序运行的路径
接着调用两次sub_408B19函数(AES解密函数):传入RSA公钥的SAH256值作为AES的密钥
第一次调用:
动调发现解密出.Snake4444 ,经过简单运行观察到,这是被加密文件的后缀名
第二次调用:
动调发现解密出HOW_TO_BACK_FILES.txt
结论:解密函数 内部有408B19 函数 还是一个 AES解密函数
分析:
第一次调用:
还看到下面有关于逗号的操作,不重要,不重点分析
动调: 跟到解密出的数据 是一些文件名
图:
第二次调用:同理 是利用AES解密
动调观看解密出的内容:
图:是一些目录名
发现调用GetEnvironmentVariableW函数:
从调用该函数的进程的环境变量中,返回指定的变量名的值 参数:lpName:要获取值的变量名字符串指针.lpBuffer:接收变量值的字符串指针nSize:接收变量值的内存大小. 函数成功执行返回字符数量
PathAddBackslashW函数:对应路径加上反斜杠 构成正确语法
这部分内容就是,判断运行文件的路径是否为LOACLAPPDATA环境变量路径,如果不是的话,路径后加\ 构成合理语法,根据运行程序的路径 ,获取文件名,接着拼接到路径上,之后 比较环境变量的路径值和当前程序运行的目录,判断运行文件的路径是否是LOACLAPPDATA环境变量路径 ,如果不是则把文件复制过去。如图
结论:设置注册表的自启动
分析:路径相同 goto_lable_8
跟进函数:
发现都是注册表相关的函数,
RegOpenKeyExW
RegQueryValueExW
RegCreateKeyExW :创建指定的注册表项。如果键已经存在,函数将打开它。
RegSetValueExW:RegSetValueEx函数在注册表项下设置指定值的数据和类型。
总结就是 必须先通过RegOpenKey来找到Key,然后再通过RegQueryValueEx来找到这个Key中包含的Valuename。
如果传进来的参数(路径)不等于 根据RegQueryValueExW这个函数找到的数据 (也就是自启动没有这个路径)就创建
总结: 这个就是实现程序开机自启动的
运行文件的路径是否为Public环境变量路径 ,如果是
{
sub_402828:用rsa-sha256 做参数 做些改变 然后存进一段堆空间中 也是把rsa公钥的sha256 转为字符串
sub_409408:转换
现在lpstring2 就是根据rsa公钥的SAH256值 做改变后的字符串
sub_4017E8 在前面分析过 是HOW_TO BACK_FILE.txt
HOW_TO BACK_FILE.txt 复制给lpstring1
路径加反斜杠 与lpstring2进行拼接
拼接后内容 C:\用户\public\E93F1BcB76F796........ E93F1BcB76F796........ 是 解密出的rsa的sha256的值
}
v7 v8 控制循环次数
结论:生成user-rsa密钥对 ,并把生成的公钥和计算生成的personalid写入E93F1BcB76F796........ 文件中
分析:
把拼接后的路径作为参数传入sub_409B4B函数
创建个文件名是拼接的内容的文件 ,直接看else的内容,(因为getlasterror() 返回值只有是0的时候 操作功能完成)
跟进sub_40A116函数
观察参数 有解密后的RSA公钥,有拼接后的路径名,有加密后缀Snake4444,有HOW_TO_BACK_FILES.txt
看到有rsa_genkey 这是个有关于RSA函数
跟进sub_409FC8--->sub_409FC8---> 然后调用Wirtefile 向c:..E9... 文件中写入lpstring
lpstring 是 生成的user rsa pub
根据最初简单运行时发现的HOW_TO_BACK_FILES.txt 中的提示信息可以知道 第二部分是personalid
personal id 的生成(
用生成的 user-rsa-public 和 私钥 与 一个字符串进行拼接
拼接后的 字符串 被内置的黑客的 rsa公钥加密
加密后当做personal id 存进E9.....文件中
)
总结:sub_409B4B函数作用 利用RSA加密生成用户的公钥和私钥
然后把生成的personalid写入拼接后的文件
####
跟进函数,
遍历盘符,为每一个盘符创建一个线程,跟进startaddress---》
遍历文件 ,比较是不是.snake4444 是不是HOW..文件,是不是保存用户id的文件,获取当前运行的文件的路径,看是否是当前的文件本身,如果都不是,
跟进函数sub_408D8B
有个用rsa加密的函数 猜测这个函数与加密有关
所以是遍历文件进行加密 ,加密成功之后,会对文件拼接一个.snake4444 后缀
确定sub_408D8B 函数 就是对文件及进行加密的函数
跟进函数sub_40935E
结论:释放how_to_back_file.txt在相应目录
结论:创建.bat文件 (内容是解密后写进去的)执行这个文件
调用8B19函数 对数据进行解密,写进bat文件中,
sub_409305函数:跟进有个creatprocess函数 ,应该是执行这个bat文件
作用:Bat会删除远程桌面连接信息文件 default.rdp,并通过wevtutil.execl命令删除日志信息
结论:执行当前运行的程序的自我删除
1.解密一些东西 为之后加密文件做准备
2.把自己复制到localappdata路径
3.设置自启动
4.生成名为RSA公钥的sha256的文件 文件内容是生成的user_rsa_public 和 personal id
5.遍历磁盘 遍历文件加密
6.把HOW_TO_BACK_FILE.txt文件释放到每个对应的文件下
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!