该样本为帖子[讨论]抠下来的,过火绒-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com看到的,当时闲的没事下载来看了看。样本运行后会对电脑文件加密,并且删除了卷影文件,防止通过磁盘工具恢复。
弹出网页
隐藏了所有的文件夹,并创建了新的文件夹,实则为快捷方式,右键属性可看到重定向。
加密了文件,无法打开
对文件进行了截断操作,加密。
手动检查启动项后发现,在启动中添加了一个html,该html为样本弹出的html。
MD5 8f2050c9937f5f21b118c18dce3054fb
SHA1 0df872ae7916dd70e69b3a319ef57612e0ace739
SHA256 32e504c5664ee16d00149c1d8fe8184b872b07f9fad93ed3bce2bf11c1cc7c3a
突破口:通过VirusTotal和微云沙盒分析的得知可能的操作有分配内存,写内存。在给WriteProcessMemory下断调试观察参数时发现当前区域为动态分配的内存,
故其首先调用了VirtualAlloc,ida进行交叉引用可到
该函数内部进行了shellcode初始化及解密后进行调用
在dbg里对VirtualAlloc下断后跟踪后可得到解密的内容
这里直接对shellcode进行dump。
因为是从EF0000开始dump,所以拖进ida分析的时候需要修复一下头部,从28开始。
函数进来后会进行初始化字符串。
然后调用InitProcAddr获取LoadLibrary和GetProcAddress地址。InitProcAddr的实现也是从Ldr中去遍历
紧接着分别获取以下这些函数地址
GetModuleFileNameW
CreateFileW
VirtualAlloc
GetFileSize
ReadFile
CloseHandle
SHGetSpecialFolderPathW
CopyFileW
SetFileAttributesW
随后获取了AppData和StartUp的路径,其中AppData进行了以下拼接
%AppData%\CSIDL_
%AppData%\CSIDL_X
然后检查当前运行的实例是否存在于其中一个目录中,如果不存在则自我复制后,将文件设置为隐藏状态(单独分析shellcode时路径不存在,猜测为主程序创建目录)
中间存在一些对文件读写操作,经过分析后发现是为了给新的shellcode申请空间。
老规矩,直接弄出他的shellcode。
以0,1和0,0不同参数执行了两次call
函数进来会进行字符串初始化,用于后面调用api
strcpy(str_kernel32, "kernel32.dll");
strcpy(str_ntdll, "ntdll.dll");
strcpy(str_shell32, "shell32.dll");
strcpy(str_advapi32, "advapi32.dll");
strcpy(str_psapi, "psapi.dll");
strcpy(str_GetProcAddress, "GetProcAddress");
strcpy(str_GetModuleHandleA, "GetModuleHandleA");
strcpy(str_GetModuleFileNameA, "GetModuleFileNameA");
strcpy(str_GetModuleFileNameW, "GetModuleFileNameW");
strcpy(str_CreateProcessA, "CreateProcessA");
strcpy(str_CreateProcessW, "CreateProcessW");
strcpy(str_CreateToolhelp32Snapshot, "CreateToolhelp32Snapshot");
strcpy(str_Process32First, "Process32First");
strcpy(str_Process32Next, "Process32Next");
strcpy(str_Module32First, "Module32First");
strcpy(str_Module32Next, "Module32Next");
strcpy(str_CloseHandle, "CloseHandle");
strcpy(str_GetCurrentProcess, "GetCurrentProcess");
strcpy(str_GlobalAlloc, "GlobalAlloc");
strcpy(str_OpenProcessToken, "OpenProcessToken");
strcpy(str_GetTokenInformation, "GetTokenInformation");
strcpy(str_AllocateAndInitializeSid, "AllocateAndInitializeSid");
strcpy(str_EqualSid, "EqualSid");
strcpy(str_LookupAccountSidA, "LookupAccountSidA");
strcpy(str_OpenMutexA, "OpenMutexA");
strcpy(str_CreateMutexA, "CreateMutexA");
strcpy(str_CreateFileA, "CreateFileA");
strcpy(str_CreateFileW, "CreateFileW");
strcpy(str_GetFileSize, "GetFileSize");
strcpy(str_ReadFile, "ReadFile");
strcpy(str_GetSystemDirectoryA, "GetSystemDirectoryA");
strcpy(str_GetSystemDirectoryW, "GetSystemDirectoryW");
strcpy(str_SetFileAttributesW, "SetFileAttributesW");
strcpy(str_MoveFileExW, "MoveFileExW");
strcpy(str_SHGetSpecialFolderPathA, "SHGetSpecialFolderPathA");
strcpy(str_SHGetSpecialFolderPathW, "SHGetSpecialFolderPathW");
strcpy(str_RegOpenKeyExA, "RegOpenKeyExA");
strcpy(str_RegOpenKeyExW, "RegOpenKeyExW");
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-12-22 14:27
被PlaneJun编辑
,原因: