首页
社区
课程
招聘
[原创]分析实战读书笔记7_Lab9-2分析
发表于: 2021-1-12 15:47 4536

[原创]分析实战读书笔记7_Lab9-2分析

2021-1-12 15:47
4536

本篇文章记录下9-2样本的分析步骤, 依然以IDA为主,OD为辅. 样本中涉及到了一个简单的字符串内存解密的操作.

image-20210108114749801

查壳 一个简单的无壳程序

提串看一下

image-20210108114858237

排除掉垃圾信息, 只有一些API名字和一个cmd, 在之前的练习中提串总是能获取到很多有用的信息, 甚至仅提串就能知道样本行为, 看来这个样本不适用这个方法了.

image-20210108115150009

简单看下导入表, 有一个创建进程的操作,后面需要留意下

无导出表, 到这里基本就知道有个创建进程的操作和一个cmd字符串, 可能是cmd动态执行命令?

image-20210108115412311

将样本拖入火绒剑, 好家伙直接结束了, 看来只能靠IDA了

进入main函数401128, 函数开始就是一大段赋值代码

image-20210108115626468

可以看出来是一个字符数组, 注意最后赋值的0,ASCII码为0的字符为\0,通常作为字符串的结尾,所以可以推断这里是为两个字符串进行赋值, 分别是: 1qaz2wsx3edc ocl.exe ,将局部变量Str和Str1改为数组形式, 方便后面的分析

双击Str进入栈窗口

image-20210108120017911

右键Str,选择Array

image-20210108120049686

在Array size处填入数组长度后按回车, Str1重复刚才的操作 ,然后将str与str1重命名方便区分

回到main函数,应该变成这个样子:

image-20210112151255798

继续向下分析,程序通过GetModuleFileName获取自身程序全路径, 然后通过_strrchr寻找路径中最后一个\进行切割, 实际上等同于取自身文件名操作

image-20210112150119565

然后将取到的文件名oclExeStr进行比较, 如果不相同则直接结束进程, 也就是一个简单的文件名自校验操作

image-20210112150342535

通过WSASartupWSASocketA进行初始化网络链接, 在初始化全部成功后调用call_401089, 紧接着调用gethostbyname, 这个函数用于将域名解析为IP地址, 而参数是一个域名字符串

通过追溯参数eax来源可以发现是401089处的函数返回值, 进入401089发现很多内存操作,没有API调用没有call调用

到这里如果我们去逐行分析汇编代码是很痛苦且耗时的, 为了搞清楚到底返回什么, 我们需要用到OD去动态调试提取字符串

根据上文的分析,我们知道程序会检验自身文件名, 我们将文件更名为ocl.exe后拖入OD, 然后在401089处下F2断点, 按F9运行程序

image-20210112151405358

可以看到1qaz2wsx3edc被作为参数传入栈内,执行到函数结尾retn处暂停, 观察OD窗口

image-20210112151700038

可以发现eax 也就是返回值被赋值为www.practicalmalwareanalysis.com, 现在我们知道401089处的函数用于内存解密域名字符串

image-20210112152632167

回到main函数, 继续向下分析, 程序通过htonsconnect用于打开一个网络套接字

通过查阅百度百科或微软官方API, 可以知道connect的三个参数为套接字描述符 sockaddr结构指针 sockaddr长度, 然后将局部变量重新命名为sockaddr

接下来程序调用了401000函数, 并将局部变量s作为参数传入, 也就是套接字描述符, 之后休眠30秒再次执行循环

image-20210112152948054

进入401000, 将参数重命名以作标记

观察call的调用, 可以明显的发现调用了CreateProcessA ,并将hStdInput hStdOutput hStdError全部设置为外层创建的网络套接字


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-1-14 17:58 被SSH山水画编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//