这是一篇针对初学小白的文章, 楼主也刚刚进入安全行业实习,本篇文章主要记录分析过程,思想方法,如有不对不足,欢迎指出。
在拿到一个样本之后,第一件事拖入PEID查壳
没壳,区段正常
分析一下字符串
选出一些有用的字符串
LoadLibraryA
GetProcAddress
ReadFile
CreateFileW
剩下的都是大片的乱码
没什么有用的信息
拖入ida看一下导入表
找出一些能下手的地方
0040301C LoadLibraryA KERNEL32
00403020 GetProcAddress KERNEL32
00403034 ReadFile KERNEL32
能作为突破点的API很少,先试着从LoadLibraryA入手
通过ida的交叉引用查看调用
发现样本使用了CreateFileW,推测有释放文件的操作。
虚拟机打开OD,定位到调用CreateFileW处,在00401FF8 下段,看看样本创建了什么文件
观察堆栈 发现样本创建了自身,放行,样本直接结束
转为在CreateFileW函数头部下断,重新运行样本,观察堆栈
发现断下多次,我们将每一次的堆栈信息都截图下来,并且将文件备份一份
根据以上可以推测出样本创建了第二个自身,结束第一个自身,然后释放文件
为了验证,打开火绒剑捕捉行为
过滤没有用的动作,分析剩下的动作
和我们预测的差不多,启动自身,释放文件,结束
因为他释放完紧接着删除了,很不正常,我们是用火绒的拦截功能,拦截样本的删除动作,捕获被释放的文件
再次执行样本
可以看到样本在试图删除tmp,我们点击阻止,然后分析这个tmp
可以发现tmp是0字节,是哪里出了问题,这是样本的障眼法?或者是他的写入代码没有被执行
到这里好像所有步骤都白费了,抓到的释放行为,结果是释放了一个空文件
那么他的真正功能在哪里呢,既然没被释放到磁盘,那就有可能直接在内存开辟了缓冲区去执行
接下来试着验证这条猜想,打开OD,在VirtualAlloc处下断
放行
果然断下来了,跟出函数,看看他申请这块内存要干什么
这就是申请好的内存地址,右键数据窗口中跟随,下内存写入断点,放行
卧槽,竟然直接终止了,肯定是哪里不对
还是回到那个申请的内存,下硬件写入断点
再次放行
这次断下了,观察数据,发现是很熟悉的PE结构
右键->备份->保存数据到文件
将导出的数据拖入PEID
果然 这段数据很有问题
打开beyond进行代码比较
和本体一模一样的数据,这可能就是火绒剑行为中的创建自身进程用到的数据
回到OD,删除硬件断点,放行
竟然又在alloc处断下,本来以为程序差不多结束了,没想到有意外收获
同样的方法查看这块内存的数据
同样的方法比对代码,依然一样
再次放行,又在alloc断下,同样方法,再次来一遍
这次你会发现,硬断触发的代码,有个循环用来向开辟的内存中赋值
跳出这段循环,被填充的代码是没见过的,但是当你F8下去的时候,会发现下面还有个循环,跳出这个循环,再次F8下去,会有一个大循环
当这个大循环全部执行完毕时,内存中的数据变得清晰了起来 如下图
同样是PE结构,但是这次还做了加密解密,必然有问题
同样的方法保存下来,进行对比
正如我们猜测的,这个PE文件开始发生了变化,先将其存好
回到OD,删除硬断,放行
程序结束
由此看来,整个程序的真正作用就是释放第三次alloc处的代码,也就是上面那幅图
接下来的步骤我们将针对这第三个文件,我们取名为new
将new拖入PEID
UPX壳,这更证明了这个文件有大问题
拖入火绒剑,过滤动作,看一下干了什么
又是释放TMP。。,打开火绒,拦截删除动作,发现TMP还是空的
那就不管它,new和原版一个明显的区别就是,new没有退出,而原版直接退出了,所以原版看起来啥也没干
继续火绒剑
捕捉到了connect,自身文件属性也变为了隐藏
符合一个后门的特征了
为了验证猜想,拖入IDA,分析导入表,字符串
数据很少,既然有了connect动作,不应该只有这么点东西
既然这样,就把壳脱掉,使用ESP定律脱掉壳子,定律可以自行百度,资料很多
脱壳后拖入IDA,分析导入表和字符串
截取敏感信息
根据以下行为:
内存运行代码
隐藏自身
无窗口
静默发送connect链接
遍历IP地址
敏感字符串
可以推测为一个后门病毒,并可能带有扫描IP爆破的功能
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2020-9-12 12:46
被SSH山水画编辑
,原因: