微信清理的时候,发现了一个疑似木马的东西,正好学完了基础的静态分析,顺便巩固下
静态分析
首先查壳
他说不是有效的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
他就检测到了获取系统信息,其他也没了。那我分析不出来应该也正常吧[捂脸]