奇安信勒索解密工具分析及调用
工具下载地址
奇安信解密工具下载网址:
勒索病毒搜索
分析过程
1.确认能解密哪些勒索
2.分析模块功能,确认解密操作都在QaxDecryptEng.dll中
3.分析界面调用dll方式,以LoadLibrary方式加载dll获取导出函数地址
有如上信息,直接分析导出函数参数即可调用QaxDecryptEng.dll解密文件
尝试wannacry,选定勒索:wannacry_84c82835a5d21bbcf75a61706d8ab549
无法解密
wannaren (可以解密)
22a49fd2468178e5b33cad08985adde50f0530a33260affc58bee6b2401005a9 wwlib.dll
6c3e77ace70a7fd80d0d2e224690bc1691d6587e489c3cb63e51eef91168dcb7 you
分析解密WannaRen共调用了两个导出函数
SetDecryptPath 1个参数,解密后文件的路径
ScanAndDecrypt 2个参数(好像是3个参数,有一个设置了默认值) 一个回调函数,用于返回给界面信息的,一个是加密文件的路径
第一个参数内存被调用,判断是回调函数
转到汇编调用中去看,使用了SendMessageW函数,猜测是给界面发消息,在dll中处理的状态返回给界面
实现回调函数,调用成功,解密文件成功
#include <stdio.h>
#include <windows.h>
typedef void(CALLBACK* cFun) (LPCTSTR encryptFilePath, DWORD status);
typedef void(*pFuncSetDecryptPath)(LPCTSTR decryptPath);
typedef DWORD(*pFuncScanAndDecrypt)(cFun callbackFun, LPCTSTR encryptFilePath);
void CALLBACK GetInfo(LPCTSTR encryptFilePath, DWORD status)
{
printf("%d\n", status);
}
int main()
{
HMODULE hmod = LoadLibraryW(L"E:\\work\\TEST\\QaxDecryptEng.dll");
pFuncSetDecryptPath dPath = (pFuncSetDecryptPath)GetProcAddress(hmod, "SetDecryptPath");
dPath(L"E:\\work\\TEST");
pFuncScanAndDecrypt decryptfile = (pFuncScanAndDecrypt)GetProcAddress(hmod, "ScanAndDecrypt");
decryptfile(GetInfo, L"E:\\work\\勒索解密\\去小盾牌.bat.WannaRen");
return 0;
}