恶意代码分析实战—实验12-2

实验环境

实验环境:windows xp
实验工具:IDAPro WinHex Resource Hacker

实验过程

首先采用IDA加载实验文件Lab12-02.exe文件,查看导入函数窗口(imports):
导入函数窗口
可以看到导入函数中包含有创建进程等函数还会利用setThreadContext修改进程的上下文;还存在对内存读写操作的API函数;对资源也会有操作。
点击createProcess函数进入被调用的界面:
在这里插入图片描述
圈出来的参数为4,代表此进程被创建但是不被执行,除非主进程调用这个函数的时候才会被启动。
向下分析可以发现其调用了GetThreadContext函数,说明其会调用这个进程的上下文。
为了更好的分析程序访问了进程上下文的那些数据,需要增加一个结构体,在IDApro的structure窗口中按下insert按钮(笔记本上的是Fn+insert键):

在这里插入图片描述
点击ADD按钮之后找到context:
在这里插入图片描述
点击确定之后成功添加,返回反汇编代码窗口:
在这里插入图片描述
我们发现0A4h其实就是上下文结构体中的一个参数,函数就是通过引用这个参数获得ebx寄存器的,ebx寄存器总是包含有指向进程指针的peb进程块。点击替换。
下面的程序就是将这个ebx的值放入到ecx中,将ecx+8后将基址地址压入到栈中,代表将此地址作为程序的入口地址。
向下分析使用了GetProcAddress
在这里插入图片描述
此函数获取的是NtUnmapViewOfSection函数的地址,之后将Buffer中的数据作为参数传入了此函数中。这个函数被调用以后就会将新创建进程的内存空间释放掉,随后就可以进行恶意代码填充。
向上查找我们会发现存在字符串的对比:
在这里插入图片描述
将其转化为字符串形式为:
在这里插入图片描述
可以观察到其会判断MZ以及PE两个字符串(一般来说通过判断是否包含PE以及MZ两个字符就可以得知是否是PE文件),判断结束以后var_8会存储指向PE文件头的指针:
在这里插入图片描述
我们可以观察到其将var_8的值存储在了ecx中,之后将ecx加上了34h,通过查找PE文件结构图发现从基地址加上34h以后就是映像基址的位置,之后将映像基址存入到了edx中,将其作为lpaddress参数传入VirtualAllocEx中:
在这里插入图片描述
其他传入此函数的参数有一个是加上了50h,查看PE结构图发现基地址偏移50h以后就是内存中影像总尺寸
如果程序调用成功就会向内存中写入数据,将数据写入到被挂起的内存中间去,这个程序的作用就是移动一个PE文件到另一个内存地址空间去。
在这里插入图片描述
我们可以看到其在ecx的基础上加上了6偏移,放入了dx寄存器中,现在此寄存器中存储的就是区段数,所以这段循环的意义在于复制PE文件的可执行段到挂起进程里面。
在这里插入图片描述
var_4指向的是PE文件MZ的位置,偏移3C后指向PE标志位的偏移,此位置保存的就是PE文件的偏移位标识,可以根据这个获得PE文件头的位置,此时ecx中保存的就是PE文件头的位置:

在这里插入图片描述
由于edx中存储的是0值,也就是说eax中存储的是PE文件头偏移F8的地址也就是区段头的名称,长度为40,将上一部分的edx乘法指令的十六进制转换为十进制为40,也就是说edx会随着循环次数的增加意40的倍数增加,所以此模块的作用就是不断访问imageSectionHeader的数据结构。
现在再次向structure窗口中添加结构:image_dos_header,image_nt_headers,image_section_header。
添加结束以后现在就可以在反汇编窗口中进行转化,例如:
在这里插入图片描述
在这里插入图片描述
以上操作就可以转换成功了。同理可替换其他偏移位置,替换如下:
在这里插入图片描述
现在就可以很清晰的发现其是将PE文件结构中的数据复制到其他内存空间上去。
向下继续分析:
在这里插入图片描述
此函数可以修改eax寄存器中的数据,并可以eax中的值设置为可执行文件的加载入口点。将上方的十六进制偏移进行转化如下:
在这里插入图片描述
可以清晰的观察到其是将程序执行的入口点放置在了eax中。
下面调用了ResumeThread函数,此函数调用成功以后就证明成功的将之前createThread函数创建的进程替换为了另一个进程A。
现在我们需要确定进程A是什么。
在这里插入图片描述
此时需要通过圈出的参数获知进程,现在我们回到这个函数最开始的地方,鼠标放置在内存地址上后ctrl+X查看其交叉引用,点击第二个main函数的位置:
在这里插入图片描述
可以看到圈出来的部分就是决定进程名称的偏移,向上查找所有带有此名称的指令:
在这里插入图片描述
可以看到此处是将svchost.exe文件作为参数传递给了sub_40149D函数,点击进入此函数,发现其调用了获取系统路径函数并且调用了strcat字符串连接函数,所以此函数的目的就是构造svchost.exe路径。也就是说有进程替换了svchost.exe
向下分析查看是哪个进程替换了此程序。
在这里插入图片描述
可以看到进程名称一路向上关联,其中最上面的ecx存储的是svchost.exe的进程句柄,下面我们进入sub_40132C这个函数内部,发现其调用了很多有关于资源的API函数,那么就可以说明PE文件的资源节里面一定包含了重要的数据,这个函数的目的就是将这些重要的数据拷贝到svchost.exe程序里面。
下面可以采用Resource Hacker查看一下资源中的内容。将文件拖入到软件中以后,Action->Save Resource to a BIN File,将其保存为exe文件。
但是我们在Resource Hacker中发现资源数据是一堆看不懂的字母,那么就说明可能是经过了加密处理,所以才会导致看不懂,我们继续IDA的分析发现:
在这里插入图片描述
可以发现其调用了sub_401000函数,点击进入:
在这里插入图片描述
发现其有异或操作,异或的对象是arg_8,此参数是此函数的此三个参数,回到上一层查看第三个参数是41h。
下面我们进行解密,使用WinHex软件将从资源节中提取出的exe文件拖入,Edit->Modify Data->XOR 41,点击确定就可以解析出原有文本了:
在这里插入图片描述
总体来说就是将解码以后的文件装入svchost.exe文件中,先清除其内容,后添加。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值