病毒样本分析学习一

前言

本人网络安全菜鸡一枚,心血来潮跟着大佬学习病毒分析。

利用工具

Exeinfo PE ver0.0.6.6
IDA Pro 8.3
Win10 虚拟机

分析过程

在这里插入图片描述
这次是跟着B站的一个UP主分析,病毒样本取自https://app.any.run/,这个网站会列出病毒的各种详细信息以及行为,如建立的连接、DNS请求等。
在这里插入图片描述
anyrun上下载样本需要企业邮箱注册,试了outlook和gmail都不行,只能利用其他样本网站进行下载
https://bazaar.abuse.ch/
https://malshare.com/
https://tria.ge/
在MalShare搜索该病毒MD5找到了病毒原文件
在这里插入图片描述
下载下来后第一时间丢到虚拟机中并修改后缀,也是防止远控地址还在,不小心双击点开就麻烦。
通过exeinfope打开文件查看
在这里插入图片描述
在这里也能看到是用C++开发,如果这里没有显示,就代表是用了少见的壳或是自己开发的壳。
再使用IDA打开文件
在这里插入图片描述
从Imports窗口能够看到里面调用了哪些windows api
在这里插入图片描述
可以根据调用的函数大致猜测出,该样本会做哪些操作,相关的api说明可以通过微软官方的说明文档查询:https://learn.microsoft.com/zh-cn/windows/win32/api/winreg/nf-winreg-regsetvalueexa
例如:RegSetValueExA
在这里插入图片描述
正式开始分析,使用IDA的重要功能,F5将程序转变为类C代码
在这里插入图片描述
他会直接将程序定位到入口函数WinMain()
在这里插入图片描述
1.首先是调用CreateMutexA(),找出当前系统是否已经存在指定进程的实例,如果没有则创建一个互斥体。这里的进程实体就是指GoogleUpdate_01,而后通过GetLastError()获取调用线程的最后错误代码值,1379代码对应是“指定的本地组已存在”。整体作用是判断是否有重复已生成的进程,没有才会走else的部分。(Windows错误码说明:https://blog.csdn.net/m32692529/article/details/124244868)
在这里插入图片描述
2.else部分又做了一个判断,双击进入该函数,前面有很多变量,目前先略过,重点看逻辑部分。
在这里插入图片描述
遇到dword、qword这种变量,可以尝试点进去在HEX窗口查看,说不定能看到关键的信息。
然后又遇到两函数sub_401040()、sub_401000(),同样点进去,里面做了数个if嵌套还有循环,这种一般都是加密或者解密的操作,跳过无需分析。
在这里插入图片描述
下一个函数也只能看出OutputDebugStringA()做了个调试信息的输出,同样对分析没有太大帮助。
在这里插入图片描述
返回到上一页,有个LoadLibraryA()函数,代表着这里调用了api或者是DLL库,向下看,除了加密部分,出现了许多次GetProcAddress(),这是在检索DLL中的函数,这里也说明该模块就是在做一个DLL函数的导入,成功了就能走接下来的步骤。
在这里插入图片描述
3.回到入口函数,导入DLL函数成功后,会顺序执行四个函数。进入第一个函数,SHGetFolderPathA()获得文件夹路径,GetModuleFileNameA()获取模块文件名,CopyFileA()将一个文件复制到新的文件中去,这里又遇到sub_401040(),大致猜测这个函数是将里面的字符串解密的一个过程
在这里插入图片描述
紧接着下面有一个判断,RegOpenKeyExA打开注册表句柄,子项是SubKey变量,目前SubKey变量不可知,然后又将这个eset_update的值用RegSetValueExA写入打开的注册表项。这里显然就是在注册表中做权限维持,例如在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中写入指向文件,就能在用户登录后自动执行该文件,这里的逻辑也很符合。MessageBoxIndirectA做一个弹窗。总结该模块做了复制文件,然后往注册表中写开机启动项做权限维持。
在这里插入图片描述
4.接着回到入口函数,进入第二个函数,前面可以注意到有两个变量名,AdapterInfo和IpAddress,很可能是做网卡和IP有关的操作
在这里插入图片描述
往下看有两处地方需要注意,一是GetAdaptersInfo检索本地计算机的适配器信息也就是获取网卡信息,GatewayList.IpAddress可能是获取网关的ip地址;二是GetVolumeInformationA检索与指定根目录关联的文件系统和卷的相关信息,这里获取了C盘的信息。这里有一处地方GetTickCount获取时间戳并乘与一个随机数,这里一般是生成一个唯一标识字符串,标识这台机器或者是其他东西。总结就是收集机器信息。
在这里插入图片描述
5.进入第三个函数,又遇到几个函数,GetVersion获取客户端版本,GetNativeSystemInfo获取本地系统信息,深入看也没有更多操作,总结也只是获取系统信息的一个模块。
在这里插入图片描述
6.进入第四个函数,这里看到了许多和第一个函数类似的操作同样通过sub_401040做一个解密,只不过这次的SubKey和第一个函数的不一样,第一段if打开注册表,RegQueryValueExA查询注册表中的值,并将查询结果给到v0,而后通过判断v0确定是否已经写有值,否则就将这个"general-second.org-help.com"写到注册表里,这个回连的域名就溯源出来了。总结这里将回连的域名写入到注册表中,可能是将它写入到可信站点中。
在这里插入图片描述
7.最后按顺序走完四个前置函数后,就到了最后关键函数,首先判断了前面的szServerName也就是回连域名是否存在,CreateThread创建线程,执行核心函数StartAddress,WaitForSingleObject是等待该线程结束,0xFFFFFFFF的参数代表他是无限等待线程。
在这里插入图片描述
进入StartAddress,是一个while无限循环执行的程序。
在这里插入图片描述
进入sub_402F30,发现有很多HTTP请求相关的内容,比如ua头,猜测是做请求包的一些操作
在这里插入图片描述
随后同样对这个HTTP请求做了一些处理
lstrlenA确定字符串长度
MultiByteToWideChar将字符串映射到 UTF-16(宽字符)字符串
SysAllocStringLen分配一个新字符串,从传递的字符串中复制指定数量的字符,并追加一个null终止字符。
WideCharToMultiByte将 UTF-16 (宽字符) 字符串映射到新的字符串。
SysFreeString解除分配字符串
在这里插入图片描述
一直到最底下,sub_401AA0这个函数,进入之后,能看到很多远控操作,通过strcmp识别命令,从而触发什么操作,例如如果传过来是"lion",则DeleteFileA删除某个文件,如果是"monkey",会CreateProcessA创建进程去执行命令。总结就是构造http请求包,用来与回连域名进行通信。
在这里插入图片描述

总结

1.分析当中会遇到很多看不懂的地方,可以直接跳过,避免被绕晕,或者拉,浪费时间在意义不大的逻辑上。
2.遇到dword、qword、char的变量,都要进入看看汇编或者HEX,可能存在关键信息
3.带多个if或者是while的地方,没有其他有用东西的一般都是加密逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值