本文为看雪论坛优秀文章
看雪论坛作者ID:pyikaaaa
根据提示消息,发现 E9文件的后部分内容就是personal id。start函数---> 跟进函数 sub_409C6B:跟进sub_408B19函数,以下是加密解密相关的。sub_408B19 函数
sub_4088F4函数
下一步分析:
可以看到GetModuleFileNameW 函数:获取当前程序运行的路径。接着调用两次sub_408B19函数(AES解密函数):传入RSA公钥的SAH256值作为AES的密钥。动调发现解密出.Snake4444 ,经过简单运行观察到,这是被加密文件的后缀名。动调发现解密出HOW_TO_BACK_FILES.txt。
sub_409ABF函数
结论:解密函数 内部有408B19 函数 还是一个 AES解密函数。接着分析:
发现调用GetEnvironmentVariableW函数:
从调用该函数的进程的环境变量中,返回指定的变量名的值。参数:lpName:要获取值的变量名字符串指针。lpBuffer:接收变量值的字符串指针。nSize:接收变量值的内存大小。函数成功执行返回字符数量。PathAddBackslashW函数:对应路径加上反斜杠,构成正确语法。这部分内容就是,判断运行文件的路径是否为LOACLAPPDATA环境变量路径,如果不是的话,路径后加\ 构成合理语法,根据运行程序的路径,获取文件名,接着拼接到路径上。之后比较环境变量的路径值和当前程序运行的目录,判断运行文件的路径是否是LOACLAPPDATA环境变量路径,如果不是则把文件复制过去。如图:
sub_409624函数
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的值
}
sub_409B4B函数
结论:生成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。用生成的user-rsa-public和私钥与一个字符串进行拼接,
拼接后的字符串被内置的黑客的rsa公钥加密,
加密后当做personal id存进E9.....文件中。
总结:sub_409B4B函数作用,利用RSA加密生成用户的公钥和私钥。然后把生成的personalid写入拼接后的文件。sub_4099A3函数
遍历盘符,为每一个盘符创建一个线程,跟进startaddress。遍历文件 ,比较是不是.snake4444是不是HOW..文件,是不是保存用户id的文件,获取当前运行的文件的路径,看是否是当前的文件本身,如果都不是,跟进函数sub_408D8B。所以是遍历文件进行加密,加密成功之后,会对文件拼接一个.snake4444后缀。确定sub_408D8B函数就是对文件及进行加密的函数。
sub_40935E函数
结论:释放how_to_back_file.txt在相应目录。sub_409449函数
结论:创建.bat文件 (内容是解密后写进去的)执行这个文件。调用8B19函数 对数据进行解密,写进bat文件中。sub_409305函数:跟进有个creatprocess函数 ,应该是执行这个bat文件。作用:Bat会删除远程桌面连接信息文件 default.rdp,并通过wevtutil.execl命令删除日志信息。
sub_409509函数:
1. 解密一些东西,为之后加密文件做准备
2. 把自己复制到localappdata路径
3. 设置自启动
4. 生成名为RSA公钥的sha256的文件,文件内容是生成的user_rsa_public和personal id
5. 遍历磁盘,遍历文件加密
6. 把HOW_TO_BACK_FILE.txt文件释放到每个对应的文件下
7. 创建个批处理文件,解密内容,执行操作
8. 自我删除
00409c84:调用MYAESDecode() 解密出不被加密的RSA值
00409cfe:调用MYAESDecode() 解密出被加密文件的后缀名.Snake4444
00409d13:调用MYAESDecode() 解密出HOW_TO_BACK_FILES.txt
00409ad5:调用 MYAESDecode() 解密出不被加密的文件名
00409ad5:调用 MYAESDecode() 解密出不被加密的目录名
004094b8:调用 MYAESDecode() 解密出.bat文件的内容
00409fa0:把生成的user_rsa_piublic写进e9文件中
0040A2AF:把生成的user密钥与字符串进行拼接
0040A2DD:使用内置的rsa公钥加密拼接好的密钥字符串
看雪ID:pyikaaaa
https://bbs.pediy.com/user-home-921642.htm
*本文由看雪论坛 pyikaaaa 原创,转载请注明来自看雪社区