[病毒分析]远程木马创建傀儡进程分析(上)

简介: [病毒分析]远程木马创建傀儡进程分析

远程木马创建傀儡进程分析

点击链接,下载本实验项目以及相关工具,提取码:8189


一、实验目的

该样本具有一定的免杀性,分析该样本都用了什么技术,能达到免杀效果,所以本次实验目的如下:

(1)分析该样本运行流程

(2)提取该样本的关键技术,研究免杀原理。

二、实验描述

分析样本,MD5是997CF4517EE348EA771FD05F489C07FE,分析该样本的运行流程,我们需要调试傀儡进程,修复dump出来的傀儡进程,手工脱UPX壳,修复导入表。

三、实验目标


  1. 先将样本放到火绒剑里运行一下,了解样本A大概执行流程


  1. dump出的傀儡进程为B程序,修复后的傀儡进程为C程序


  1. 傀儡进程带有UPX壳,手工脱UPX壳,并修复导入表为D程序


  1. 分析修复后的傀儡有个加载资源的操作,该部分数据是PE格式,dump出来另存为E程序,发现是.net带有混淆的代码,需要反混淆操作


  1. 调试反混淆后的程序,分析发现其为远控木马,下载相应服务器端,研究该木马的功能。


四、实验环境


主机终端:win7 32位


资源:


Visual Studio 2013


010editor.exe


火绒剑.exe


OllyDbg.exe


样本


dnSpy.exe


de4dot.exe


pchunter.exe


NanoCore RAT Cracked.zip


五、实验原理

1、本样本逃过层层安全产品最终能落地到客户终端,由于其具有一定的免杀性,研究后发现关键技术是通过创建傀儡进程的形式实现启动恶意代码,也就是说恶意代码部分蜷缩在原程序中,通过创建傀儡进程的形式将恶意代码加载到内存中并运行。我们看下创建傀儡进程的方法:


(1) 通过CreateProcess以CREATE_SUSPENDED方式创建一个进程。


(2) GetThreadContext获取挂起进程CONTEXT。


(3) ZwUnmapViewOfSection卸载挂起进程内存空间数据;


(4) VirtualAlloc分配内存空间;


(5) WriteProcessMemory将恶意代码写入分配的内存;


(6) SetThreadContext设置挂起进程状态;


(7) ResumeThread唤醒进程运行


2、傀儡进程dump出来后需要进行修复,我们dump出来是程序拉伸后的状态,需要把文件偏移改为内存偏移


3、本程序涉及到UPX脱壳,手工脱壳后需要修改导入表,因为导入表在壳子里,我们把壳子脱掉了,导表表就没有了,需要将壳子程序的导入表赋值到脱壳后的程序中。


六、实验步骤

1. 火绒剑里运行一下,了解样本行为,发现该样本创建傀儡进程B

将样本托拽到火绒剑运行,排除掉一些不关心的动作,比如打开注册表,获取键值等操作。

image.png

发现两个问题,原程序创建了傀儡进程B,傀儡进程B将自己复制了一份命名为tcpmgr.exe并通过修改注册表启动项实现持久化。

image.png

2. Dump出傀儡进程B

关闭火绒剑,打开pchunter,点击“进程”,将所有grp-ps.exe进程停掉

image.png

用OD打开程序,Ctrl+G 输入ResumeThread,双击该API函数,F2下断,运行程序在唤醒进程前将程序断下来

image.png

在样本运行的时候会多次被断下,但只有一次断下来的情况是我们需要的。我们打开火绒剑,清空所有项,在OD中点击红色右箭头让程序运行起来。火绒剑和OD同时调试,找到ResumeThread唤醒傀儡进程的那次操作。

image.png

对照看火绒剑的日志,发现第六次断下就可以用pchunter工具dump傀儡进程了

image.png

打开Pchunter工具,dump出傀儡进程,如果pchunter工具没有目标进程,可以进行刷新

image.png

找到傀儡进程
image.png

点击傀儡进程,右键,依次选择“查看-查看进程内存”

image.png

选择具有可读可写可执行的模块,点击Dump,将傀儡进程B存放于桌面

image.png

相关文章
|
4月前
|
Linux
Linux源码阅读笔记10-进程NICE案例分析2
Linux源码阅读笔记10-进程NICE案例分析2
|
4月前
|
Linux
Linux源码阅读笔记09-进程NICE案例分析1
Linux源码阅读笔记09-进程NICE案例分析1
|
20天前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
38 4
|
1月前
|
运维 JavaScript jenkins
鸿蒙5.0版开发:分析CppCrash(进程崩溃)
在HarmonyOS 5.0中,CppCrash指C/C++运行时崩溃,常见原因包括空指针、数组越界等。系统提供基于posix信号机制的异常检测能力,生成详细日志辅助定位。本文详解CppCrash分析方法,涵盖异常检测、问题定位思路及案例分析。
50 4
|
1月前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
50 4
|
2月前
|
NoSQL Linux 程序员
进程管理与运行分析
进程管理与运行分析
26 0
|
3月前
|
并行计算 API 调度
探索Python中的并发编程:线程与进程的对比分析
【9月更文挑战第21天】本文深入探讨了Python中并发编程的核心概念,通过直观的代码示例和清晰的逻辑推理,引导读者理解线程与进程在解决并发问题时的不同应用场景。我们将从基础理论出发,逐步过渡到实际案例分析,旨在揭示Python并发模型的内在机制,并比较它们在执行效率、资源占用和适用场景方面的差异。文章不仅适合初学者构建并发编程的基础认识,同时也为有经验的开发者提供深度思考的视角。
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
5月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
192 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
4月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。
下一篇
DataWorks