微信清理的时候,发现了一个疑似木马的东西,正好学完了基础的静态分析,顺便巩固下
静态分析
首先查壳
他说不是有效的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获取CP
GetProcessAffinityMask 获取任务可用的处理表列 DELPHI下API简述
GetProcAddress 获取线程地址
GetEnvironmentStringsW 函数没有参数,返回值是一个字符串指针(PTSTR),指向环境变量的内存块
GetConsoleMode 制台输入缓冲区或控制台屏幕缓冲区的句柄
FreeEnvironmentStringsW 释放指定的环境字串块 ,返回Long
ExitProcess 退出线程
DuplicateHandle 创建新句柄的函数
CreateWaitableTimerExW 定时器
CreateThread 创建线程
CreateIoCompletionPort 已打开的文件实例和新建的或已存在的I/0完成端口
CreateFileA 创建文件
CreateEventA 创建事件
CloseHandle 关闭文件、文件映射、进程、线程、安全和同步对象等
AddVectoredExceptionHandler 捕获未处理的异常
可以看到比较重要的api,如创建,写入,获取信息,线程注入等。
查有用字符串
首行发现了这个木马是go语言编写的,在一万多行标记为zhetian的项目
搜索dll 发现存在四个dll 应该是木马释放的
l32.dll
i32.dll
_32.dll
rof.dll
静态分析等局限就这么多了,下面尝试动态分析。
动态分析
运行木马之前,先对注册表进行快照1
运行木马后,运行快照2,然后会进行对比
貌似也没有太明显的键值(可能我太菜了,看不出来)
打开进程工具,进行监控
除了查询注册表键值,还创建部分文件
通过wireshark监控流量,并无异常,说明木马的服务端已经关掉了。
IDA 双击导入函数 GetProcAddress
有两个参数,输入x 获取交叉引用次数,有两处
点击第一处,然后查看伪代码 ctrl + f5
查看第二处
分析不出来了,淦
使用dbg 单步调试下
单步跳转了三次,就直接空白了,
微步查查吧 2/22
他就检测到了获取系统信息,其他也没了。那我分析不出来应该也正常吧[捂脸]