一次失败的远控木马分析
2022-9-8 18:37:41 Author: 轩公子谈技术(查看原文) 阅读量:22 收藏

微信清理的时候,发现了一个疑似木马的东西,正好学完了基础的静态分析,顺便巩固下

静态分析

首先查壳

他说不是有效的PE文件

他说 64位的PE文件

查看导入函数,函数比较多,这里就一一列举下

WriteFile                                 将数据写入一个文件                   WriteConsoleW                             它用来从当前光标位置写入一个字符串到屏幕缓冲区WaitForMultipleObjects                    等侯单个对象或一系列对象发出信号。如返回条件已经满足,则立即返回WaitForSingleObject                       当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的VirtualQuery                              获取内存中块的信息VirtualFree                               取消或者释放调用进程的虚地址空间页的一个区域VirtualAlloc                              在调用进程的虚地址空间,预定或者提交一部分页。简单点的意思就是申请内存空间SwitchToThread                            释放cpu时间,只要有可调度线程,即便优先级较低,也会让其调度SuspendThread                             挂起指定的线程SetWaitableTimer                          可以设置为一个特定的时刻SetUnhandledExceptionFilter               设置异常捕获函数SetProcessPriorityBoost                   允许或者禁止进程或者线程动态提升自己的优先级SetEvent                                  设置事件SetErrorMode                              处理 指定类型的严重错误或使调用应用程序来处理它们SetConsoleCtrlHandler                     添加或删除应用程序定义HandlerRoutine从调用进程的处理函数列表功能ResumeThread                              使线程的挂起时间计数减一PostQueuedCompletionStatus                向每个工作者线程都发送—个特殊的完成数据包。该函数会指示每个线程都“立即结束并退出LoadLibraryA                              动态调用无需配置链接库lib和相关的头文件配置LoadLibraryW                              载入指定的动态链接库,并将它映射到当前进程使用的地址空间SetThreadContext                          挂起目标线程注入GetThreadContext                          获取线程的上下文GetSystemInfo                             获取系统信息GetSystemDirectoryA                       获取系统目录GetStdHandle                              从一个特定的标准设备中取得一个句柄GetQueuedCompletionStatusEx               实现从指定的IOCP获取CPGetProcessAffinityMask                    获取任务可用的处理表列 DELPHI下API简述GetProcAddress                            获取线程地址GetEnvironmentStringsW                    函数没有参数,返回值是一个字符串指针(PTSTR),指向环境变量的内存块GetConsoleMode                            制台输入缓冲区或控制台屏幕缓冲区的句柄FreeEnvironmentStringsW                   释放指定的环境字串块 ,返回LongExitProcess                               退出线程DuplicateHandle                           创建新句柄的函数CreateWaitableTimerExW                    定时器CreateThread                              创建线程CreateIoCompletionPort                    已打开的文件实例和新建的或已存在的I/0完成端口CreateFileA                               创建文件              CreateEventA                              创建事件CloseHandle                               关闭文件、文件映射、进程、线程、安全和同步对象等AddVectoredExceptionHandler               捕获未处理的异常

可以看到比较重要的api,如创建,写入,获取信息,线程注入等。

查有用字符串

首行发现了这个木马是go语言编写的,在一万多行标记为zhetian的项目

搜索dll 发现存在四个dll 应该是木马释放的

l32.dlli32.dll_32.dllrof.dll

静态分析等局限就这么多了,下面尝试动态分析。

动态分析

运行木马之前,先对注册表进行快照1

运行木马后,运行快照2,然后会进行对比

貌似也没有太明显的键值(可能我太菜了,看不出来)

打开进程工具,进行监控

除了查询注册表键值,还创建部分文件

通过wireshark监控流量,并无异常,说明木马的服务端已经关掉了。

IDA 双击导入函数 GetProcAddress

有两个参数,输入x 获取交叉引用次数,有两处

点击第一处,然后查看伪代码 ctrl + f5

查看第二处

分析不出来了,淦

使用dbg 单步调试下

单步跳转了三次,就直接空白了,

微步查查吧 2/22

他就检测到了获取系统信息,其他也没了。那我分析不出来应该也正常吧[捂脸]


文章来源: http://mp.weixin.qq.com/s?__biz=MzU3MDg2NDI4OA==&mid=2247486953&idx=1&sn=360d5e58b7b409943107230c10877600&chksm=fce9aa26cb9e23300c5ed22b3da7aff22d45a56698cf09031bed60691f6d9a4f06e7fe8c1ab6#rd
如有侵权请联系:admin#unsafe.sh