[原创]新人第一次病毒分析(附专杀工具源码)

您所在的位置:网站首页 scr病毒专杀 [原创]新人第一次病毒分析(附专杀工具源码)

[原创]新人第一次病毒分析(附专杀工具源码)

2024-01-07 20:31| 来源: 网络整理| 查看: 265

1. 样本概况1.1 样本信息样本名称:熊猫烧香

 

MD5: 19DBEC50735B5F2A72D4199C4E184960

 

SHA1: CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870

 

实验平台:Windows 7 Ultimate With Service Pack 1

 

分析工具:PEiD v0.95、StudyPE x64 v1.11、IDA x32 v7.4、Bochs v2.6.9、VMWare WorkStation v15.56、x32dbg

 

初步行为观察:文件行为:

 

自复制到系统目录并运行,复制到其他盘符根目录隐藏,并且加入autorun.ini文件。感染exe文件,修改图标,感染后的文件体积增大。

 

注册表行为:创建启动项,删除系统程序,关闭安全中心

 

 

网络行为:访问IP地址192.168.232.1 字符串提取后,发现可能存在安全软件对抗,有可能会破坏安全软件的注册表项

 

 

存在一些特殊目录 疑似弱口令字典,可能存在弱口令猜解行为

 

导入表分析:

 

文件操作WriteFileUnhandledExceptionFilterSetFilePointerSetEndOfFileReadFileGetFileSizeGetFileTypeCreateFileGetWindowsDirectoryASetFileAttributesACopyFileA

 

文件、窗口遍历FindNextFileAFindFirstFileAFindCloseFindWindowA

 

注册表操作RegQueryValueExARegOpenKeyExARegCloseKeyRegSetValueExARegOpenKeyExARegDeleteValueARegCreateKeyExA

 

提升权限类OpenProcessTokenLookupPrivilegeValueAAdjustTokenPrivileges

 

网络连接WSACleanupWSAStartupgethostnamegethostbynamesocketinet_ntoainet_addrhtonsconnectclosesocketInternetGetConnectedStateInternetReadFileInternetOpenUrlAInternetOpenAInternetCloseHandle

 

服务类OpenServiceAOpenSCManagerADeleteServiceControlServiceCloseServiceHandle

 

添加计划任务,远程下载NetScheduleJobAddURLDownloadToFileA

 

2.具体行为分析2.1 主要行为

 

程序开头有两次条件判断:

 

用两个字符串进行运算,得到的结果与固定字符串“武汉男生感染下载者”进行比对,一致则继续,否则将退出程序。之后再次用两个字符串运算后判断,与” uup2..uxetm/vhjnx.fdu/”一致则继续,否则将退出程序。

 

该程序首次执行流程为:

 

判断恶意程序运行目录下是否存在”Desktop_.ini”文件,如果存在则删除。读取自身到内存,判断是否为已经感染的文件,如果是则附带运行原文件。判断当前运行目录是否为system32,不是则自复制到system\drivers目录下,文件名为spo0lsv.exe,并且执行该文件,然后结束自身。

 

 

第二次执行流程:当程序在drivers目录下执行且文件名为spo0lsv.exe时,则会执行感染传播部分(sub_40D18C)

 

 

感染传播部分流程:分为三个功能函数:感染传播部分第一个功能函数是建立一个线程,这个线程会遍历所有盘符下的文件夹

 

值得注意的是,程序会避开一些目录(如WINDOWS,WINNT),如果出现这些目录将会进入下一轮搜索。否则会在该目录下创建Desktop_.ini文件,内容为当前的系统时间。

 

而当检测到GHO文件时(GHOST备份文件),则会删除该文件。推测这样做是为了避免用户恢复系统

 

当搜索到EXE,SCR,PIF等可执行文件后缀时,会进入感染流程

 

感染流程为:读取搜索到的文件,读取检查是否出现WhBoy字符串,如果有则说明该文件已经被感染,将不会继续感染流程。如果不存在,则会把恶意程序自身复制后覆盖该文件。接着把读取的原文件写入到该文件的末尾。

 

而当搜索到的文件为setup.exe或者NTDETECT.COM时,不会执行感染流程,因为这两个文件可能为恶意程序自己释放的文件。

 

感染传播部分第二个功能函数为建立一个定时器,每6秒触发一次,定时器功能如下

 

遍历盘符(跳过ab盘),寻找盘符根目录是否有autorun.inf文件,如果存在,则搜索是否有setup.exe文件,对比是否为恶意程序本身,如果不是就删除该文件。最终会在每个盘符根目录留下一个隐藏属性的setup.exe(恶意程序本身),还有一个隐藏属性的autorun.inf(自动播放)文件。文件内容为“[AutoRun]\r\nOPEN=setup.exe\r\nshellexe”值得注意的是,该功能为计时器定时触发,当用户插入U盘时,也会受到感染。 感染传播部分第三个功能函数为网络传播,将会创建10个线程,对139,445端口进行漏洞利用,功能如下:

 

得到本机网段地址,对网段内主机139端口和445端口依次尝试连接

 

一旦连接成功,则会尝试使用默认账号和内置的弱口令字典进行漏洞利用,如果成功连接,将会拷贝恶意代码到远程主机,名为“GameSteup.exe”,并且使用添加计划任务的方式远程执行。

 

第三部分:第三部分共有六个计时器事件

 

第一个计时器:查找窗口信息,找到疑似杀毒软件或者安全辅助工具,将会使用postmessage发送WM_QUIT消息来使进程退出。

 

 

而后对杀毒软件进程进行遍历并且结束。 接着会注册为开机启动项(名为svcshare),并且修改注册表使得用户无法通过修改文件夹设置来查看隐藏文件CheckedValue(1→0)

 

第二个计时器:从http://www.ac86.cn/66/up.txt 读取内容,如果读取到的内容为“QQ”,则会进行文件下载并且执行

 

第三个计时器:

 

会创建一个线程用于和上个功能一样的下载,还会创建一个线程删除用户共享

 

第四个定时器:主要操作是关闭杀毒软件的服务项、计划任务项等

 

第五个计时器:功能为读取内置的一些网页

 

 

第六个计时器:功能同样为读取网页,根据结果决定是否要下载并执行文件

 

2. 解决方案(或总结)

结束并删除C:\Windows\System32\drivers\spo0lsv.exe文件 删除所有根目录下的autorun.inf文件以及setup.exe文件 删除所有Desktop_.ini文件 检查可移动设备根目录文件 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue修改为1 删除自启动项HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\svcshare 使用专杀工具恢复所有被感染的文件

最后附上我写的专杀工具(暂时只对EXE做了修复):

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165#include#include//#include #include #pragma comment(lib,"shlwapi.lib")#include#include using namespace std;const char Features[5] = { 'W','h','B','o','y' }; //检查是否为whboy病毒文件bool checkVirus(LPCWCHAR Filename) {    FILE* F1 = NULL;    if (0 == _wfopen_s(&F1, Filename, L"rb"))    {        //病毒本体大小        BYTE File[0x7531] = { 0 };        fread_s(File, 0x7531, 0x7531, 1, F1);        //比较特征        if (memcmp(File + 0x4920, Features, 5))        {            fclose(F1);            return false;        }        else        {            fclose(F1);            return true;        }    }    return false;} void RepairFile(LPCWCHAR Filename) {     FILE* F1 = NULL;    if (0 == _wfopen_s(&F1, Filename, L"rb"))    {         //获取大小        fseek(F1, 0, SEEK_END);        DWORD FileSize = ftell(F1);        //筛选        if (FileSize>0x7531)        {            rewind(F1);            BYTE* File = new BYTE[FileSize];            fread_s(File, FileSize, FileSize, 1, F1);            rewind(F1);            //如果特征符合            if (!memcmp(File + 0x4920, Features, 5))            {                fclose(F1);                FILE* F2 = NULL;                if (0 == _wfopen_s(&F2, Filename, L"wb"))                {                    fwrite(File + 0x7531, FileSize - 0x7531-0x1F, 1, F2);                    fclose(F2);                    wprintf(L"已修复%s\n", Filename);                }             }            else            {                fclose(F1);            }             delete[]File;        }        else        {            fclose(F1);        }      }  }void SearchInfected(LPCWSTR Path) {    WIN32_FIND_DATA FileInfo = { 0 };    wstring FindPath = wstring(Path) + L"\\*";     HANDLE FindHnandle = FindFirstFile(FindPath.c_str(), &FileInfo);     if (INVALID_HANDLE_VALUE!= FindHnandle)    {        do        {            if (FileInfo.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)            {                if (_wcsicmp(FileInfo.cFileName, L".") && _wcsicmp(FileInfo.cFileName, L"..")&& _wcsicmp(FileInfo.cFileName, L"WINDOWS")&&                    _wcsicmp(FileInfo.cFileName, L"system32"))                {                     wstring NextPath = wstring(Path) + L"\\" + FileInfo.cFileName;                    SearchInfected(NextPath.c_str());                }                else                {                    continue;                }            }             else            {                if (!_wcsicmp(PathFindExtension(FileInfo.cFileName), L".exe"))                {                    wstring FilePath = wstring(Path) + L"\\" + FileInfo.cFileName;                    RepairFile(FilePath.c_str());                 }            }        } while (FindNextFile(FindHnandle, &FileInfo));        }} int main() {    setlocale(LC_ALL, "");    wprintf(L"熊猫烧香专杀工具 v0.1\n");    wprintf(L"即将开始,在结束前请不要做其他操作\n");    system("pause");    //开始专杀部分    system("taskkill /F /IM spo0lsv.exe");    WCHAR Buf[50] = { 0 };    GetLogicalDriveStrings(50, Buf);    WCHAR* Drive = Buf;     printf("正在全盘扫描并修复文件\n");    //遍历盘符    while (*Drive!=NULL)    {        WCHAR FilePath[MAX_PATH] = { 0 };        wcscpy_s(FilePath, MAX_PATH, (WCHAR*)Drive);        wcscat_s(FilePath, MAX_PATH, L"autorun.inf");         wprintf(L"%s\n", FilePath);        //删除autorun.inf        SetFileAttributes(FilePath, FILE_ATTRIBUTE_NORMAL);        DeleteFile(FilePath);        //删除setup.exe        wcscpy_s(FilePath, MAX_PATH, (WCHAR*)Drive);        wcscat_s(FilePath, MAX_PATH, L"setup.exe");        if (checkVirus(FilePath))        {            SetFileAttributes(FilePath, FILE_ATTRIBUTE_NORMAL);            DeleteFile(FilePath);        }          //扫描并修复文件        SearchInfected(Drive);           Drive+=4;    }    system("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\Folder\\Hidden\\SHOWALL\" /v CheckedValue /t reg_dword /d 1 /f");    system("reg delete \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run \" /v svcshare /f");system("pause");}

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2021-3-25 14:42 被Endali编辑 ,原因: #病毒木马


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3