简单的病毒分析

逆向病毒分析 1年前 (2022) admin
381 0 0


前言

背景:本篇样本来自 https://github.com/0range-x/Virus-sample/blob/master/Chapter_9L/Lab09-02.exe

通过解密还原木马的本质

分析

老样子,先看下导入表,还是这两个库,Kernel32WS2_32

简单的病毒分析

看到字符串中出现了陌生的东西,看样子是初始化堆空间分配内存

简单的病毒分析

main函数

找到 main 函数的地址,401128

简单的病毒分析

emm,main 函数刚开始是 将一堆字符串 push 入栈,1qaz2wsx3edcocl.exe,中间有两个 0 中断

简单的病毒分析

ps:

软中断:就是把下面的代码用 int 3 填充,但是显示的还是原来的代码,即在 cpu 内部遇到中断指令 int 3,产生中断
硬中断:是由 CPU 以外的 I/O 设备(即硬件设备)产生的中断

在 od 中来到主函数

简单的病毒分析

接下来传入了另一个地址处,405034,来到这里看,

简单的病毒分析

存有大小为 4 的字符数组,同时调用 cmd 命令,

简单的病毒分析

接下来,在 401208 处调用 GetModuleFileNameA 函数,获取当前的绝对路径,紧接着调用了 4015504014c0 这两个函数

简单的病毒分析

strrchr

来 ida 中看,其实就是 _strrchr_strcmp 这两个函数

_strrchr:C库函数,返回参数 str (ecx) 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置

strcmp:字符串比较函数,不多说

简单的病毒分析

strrchr函数处设置断点,看到当前参数,是该程序的路径名,如果strrchr函数被调用执行的话,就会返回 Lab09-02.exe"

简单的病毒分析

strcmp 则是验证 Lab09-02.exe(当前文件名) 是否为 ocl.exe,如果相等,eax 为 0,test 指令 设置 0 标志位,跳转到 40124c 处执行,不相等的话,跳转到 4013d6,看来是直接退出程序

简单的病毒分析
简单的病毒分析

WSAStartup

来到 40124c 处,调用 WSAStartup 函数

ps:为了在应用程序当中调用任何一个 Winsock API 函数,首先第一件事情就是必须通过 WSAStartup 函数完成对 Winsock 服务的初始化,因此需要调用 WSAStartup 函数。

WSASocketA:Windows 中建立 socket 连接

简单的病毒分析

看到4012BD处调用了401089函数

简单的病毒分析

ida跳转到看看,

简单的病毒分析

来到 od 中,设置断点跟踪

ocl.exe

记得上一步 strcmp 函数后,需要修改返回值 即 eax 改为 1,才能进入 40124c 函数,不然直接退出程序了

简单的病毒分析

来到4012BD处,可以看到传入字符串1qaz2wsx3edc

简单的病毒分析

然后调用了 401440 函数,

简单的病毒分析

异或解密

在ida中看了个寂寞,

简单的病毒分析

之后呢,来到 4010e3

idiv:有符号除法,其操作数与 div 相同。执行 8 位除法之前,被除数(AX)必须完成符号扩展。余数的符号总是与被除数相同。
movsx:(进行符号扩展并传送)将源操作数内容复制到目的操作数,并把目的操作数符号扩展到 16 位或 32 位。这条指令只用于有符号整数
简单的病毒分析

当没有头绪的时候看下伪代码,似乎是对字符串进行一系列的异或操作,还是一个循环,按理来猜测,应该与加解密有关,我们在做木马的时候,也经常使用异或来混淆

简单的病毒分析

那就来 od 中循环这么多次看看会发生什么

ok fine 看来猜测正确,对字符串解密,加密的字符串 1qax2wsx3edc 是服务端 www.practicalmalwareanalysis.com

简单的病毒分析

接着顺理成章建立 socket 通信

简单的病毒分析

如果成功连接,跳转倒 40137A 处,如果失败,会 sleep 30s

简单的病毒分析

在对 40137A 的调用中看到,调用了 401000 函数,

简单的病毒分析

跳转过来看,很明显,会创建进程

WaitForSingleObject:在多线程的情况下,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用 Windows API 函数 WaitForSingleObject,或者 WaitForMultipleObjects。这两个函数都会等待 Object 被标为有信号(signaled)时才返回的。
简单的病毒分析

很明显,为了建立 socket 通信,会单独创建一个进程来建立反向 shell,同时隐藏了 cmd.exe 命令行

注意到 STARTUPINFO这个结构被修改

简单的病毒分析
STARTUPINFO 用于指定新进程的主窗口特性的一个结构

可以看到 wShowWindows 被设置为 0,即隐藏 cmd 窗口。StartUpInfo 中的标准流 StdInput/StdError/StdOutput 被设置为套接字,与 cmd.exe 绑定,所以 cmd.exe 被启动后,所有经过套接字的数据都将发送到 cmd.exe,并且所有输出都将通过套接字发出。

总结

这个木马相比以前的木马,特色主要是首先要重命名为 ocl.exe 才能成功运行,服务端的字符串通过异或进行加密,然后再进行反向 shell 连接。其实逆向加密算法应该是很复杂的步骤,我这里投机取巧,既然它循环解密,我就在 od 里一直循环运行,直到解密成功,否则只能分析内存块,去内存里找加密的字符串。

Peace.

原文始发于微信公众号(海狮安全团队):简单的病毒分析

版权声明:admin 发表于 2022年10月20日 上午10:01。
转载请注明:简单的病毒分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...