1学到现在都学了一半了,后面都不会分析的很细致,不会关注细节,只会大致把握恶意代码的主要流程,主要做了什么,把握这些就已经是成功分析恶意代码了,不需要每个一个函数都分析到点上,没必要,我们会加快速度

看一下字符串,我觉得最主要的线索就是explorer.exe,想来是要对他进行dll注入,毕竟还有一个lab12-01.dll文件存在

恶意代码分析实战 Lab12

看一下.exe程序

alloca_probe是堆栈保护检查的函数不要管他

动态加载psapi.dll然后得到他的三个函数,跟遍历进程相关函数,想来等下是要查找explorer.exe程序

恶意代码分析实战 Lab12

得到Lab12-01.dll的绝对路径备用

恶意代码分析实战 Lab12

等下就是遍历比较dwProcessId数组,来查找explorer.exe enumprocesses检索每个进程标识符

恶意代码分析实战 Lab12

将取出来的进程标识符穿给sub_401000函数

恶意代码分析实战 Lab12

这一段是得到进程标识符的所以模块句柄,然后检索模块的基本名称,判断是否和explorer.exe相同,是返回1

恶意代码分析实战 Lab12

sub_401000返回1时候会调用openprocess,打开explorer进程,然后结束循环,跳转到loc_40128c,申请内存,然后把lab12-01.dll的绝对路径写进去,接着就是典型的用createremotethread实现dll注入代码,不再赘述

恶意代码分析实战 Lab12

说.exe作用就是恶意代码加载器,把dll加载到explorer进程

现在看看dll文件做了什么

额,dll代码很是简单,一句话,dllmain里面创建一个线程,然后这个线程输出一句话后又创建一个线程,然后这个新线程弹出一个对话框结束,然后原来的线程就睡觉了,睡醒了又重复上面的动作


lab12-02

1看一下字符串,想来是对svchost做手脚了,两个黄色是资源相关字符串,程序存在一个资源节,不过,看起来像乱码,关键两个地方一个svchost一个资源

恶意代码分析实战 Lab12

看代码,注意到程序需要一个我们输入的参数

想得到当前模块的句柄

然后调用sub_40149d函数很简单就是得到svchost的绝对路径C:\Windows\System32\svchost.exe

接着调用sub_40132c函数,函数也很简单就是把资源节数据加载进一个系统分配的内存空间,然后判断头两个字节是不是4dh 5Ah

不是就用sub_401000函数进行解码,然后返回内存地址,看下sub_401000代码不难理解是将数据和参数41h进行异或

接着调用sub_4010EA,参数是上面的内存地址和svchost绝对地址

恶意代码分析实战 Lab12

前面两个memset是对StartupInfo ProcessInformation的初始化,不用管,接着是以挂起状态打开svchost(这是用到进程替换技术了,看到这里应该想到,如果认真看书的话,替换代码肯定是之前解码的资源数据了)

恶意代码分析实战 Lab12

接着是申请内存空间,然后得到线程上下文

恶意代码分析实战 Lab12

得到NtUnmapViewOfSection函数地址

恶意代码分析实战 Lab12

这里读取的是34进程的imagebaseaddress,因为ebx指向进程环境块PEB(新创建就被挂起的情况下),偏移8的地方是imagebaseaddress

恶意代码分析实战 Lab12恶意代码分析实战 Lab12

注意NtUnmapViewOfSection参数 01000000就是上面read得到的可执行文件起始地址,现在被卸载

恶意代码分析实战 Lab12

申请内存空间,在进程34里面申请,400000开始的地址空间,原来的已经被卸载了 这里的ipaddress由pe的imagebase(E0H+34H偏移处)决定,这个pe就是3b0000开始的原来资源节解密出来的pe文件,大小是(E0h+50h处的imagesize决定)

恶意代码分析实战 Lab12

然后第一个写pe头,从3B0000开始地址数据写到34进程的400000地址,注意这里的400000我们是看不到的,因为,当前ollydbg看的是lab12-02.exe的400000,大小由pe头大小决定sizeofHeaders决定他在偏移E0h+54h处

恶意代码分析实战 Lab12

第二次写.text节区

恶意代码分析实战 Lab12

第三次写.rdata节区

恶意代码分析实战 Lab12

第四次写.data

恶意代码分析实战 Lab12

最后把peb偏移8处的imagebaseaddress的值改为现在的pe文件的imagebase的值也就是偏移E0h+34h处的数据

恶意代码分析实战 Lab12

然后修改context的eax处数据,这里是程序的入口地址,被修改为现在pe的入口地址偏移也就是E0H+28H地方

唤醒程序,这个时候进程已经被替换了

现在看一下这个被写入的代码到底是什么

我们将资源数据保存位二进制文件,然后用winhex打开在用edit modify data xor功能,让数据和41h异或得到正确pe文件,接着用PEView打开查看,程序中读取的就是下面四个数据,还有 就是每个节区头里面的节区大小

恶意代码分析实战 Lab12

至于这个程序做什么,也不难分析,我们之前也分析过类似的了,先设置一个底层钩子,然后钩子函数记录击键数据到practicalmalwareanalysis.log文件,我们看一下实验结果

恶意代码分析实战 Lab12

lab12-03

1本来上句话就结束分析了,没想到lab12-03.exe就是上面的那个提取出来的恶意代码,只能再详细点分析一下呢

看一下字符串,一个.log文件名,好几个[]键盘名称,猜测是击键记录器了(其实早就知道了),都懒得看下导入函数

恶意代码分析实战 Lab12

看一下代码,前面的操作就是隐藏控制台的

恶意代码分析实战 Lab12

然后设置底层钩子,钩子函数是fn,前面还初始化了405350处的数据为 1(memset)

恶意代码分析实战 Lab12

然后就一直循环获取所以窗口的消息,得到WM_QUIT时候结束,取消挂钩

消息类型满足下面两个其中之一就要调用sub_4010c7,否则传递消息给下一个

恶意代码分析实战 Lab12

看一下sub_4017c

首先创建一个文件.log

恶意代码分析实战 Lab12

然后得到文件指针得到指向文件末尾指针

恶意代码分析实战 Lab12

得到当前窗口句柄

然后得到窗口标题,上面两个push也是getwindowtext的参数,得到标题放到buffer

恶意代码分析实战 Lab12

接着写入     [window:buffer(标题)]\n形式字符串

恶意代码分析实战 Lab12loc_4011AB,写入buffer值,如果buffer在27-40h之前

否则loc_4011D2写入buffer,如果在40-5bh之前

否则依据switch选择相应的跳转写相应的字符到.log文件

程序就是这么简单


lab12-04

1这几个字符串都值得注意

恶意代码分析实战 Lab12

程序的开头一段和lab12-01很类似,不过他是再找winlogon程序而不是lab12-01的explorer,sub_401000功能就是查找winlogon

看关键的字符串比较就知道到底再找什么呢,str1是前面 GetModuleBaseNameA得到的模块基本名称,而str2是dword_403010处字符串,他正是winlogon.exe

恶意代码分析实战 Lab12恶意代码分析实战 Lab12恶意代码分析实战 Lab12

接着是调用sub_401174,这个函数做了不少事

第一个是sub_4010fc的提权操作

恶意代码分析实战 Lab12

然后加载sfc_os.dll得到他的2号函数地址,作为后面创建远程线程的线程函数地址.

恶意代码分析实战 Lab12

也就是说强制让winlogon.exe执行SfcTerminateWatcherThread效果就是关闭window文件保护

恶意代码分析实战 Lab12

接着就是为了得到wupdmgr.exe的绝对路径

恶意代码分析实战 Lab12

得到临时文件路径

恶意代码分析实战 Lab12

这是移动wupdmgr.exe到临时目录下的winup.exe

恶意代码分析实战 Lab12

接着调用sub_4011fc就结束呢

sub_4011fc一溜看下来就知道在干什么

先是重新得到wupdmgr.exe的绝对路径(系统目录下),

然后读取资源到内存空间

然后创建新的wupdmgr.exe(原来的文件已经被移走了)

再把资源数据写到这个新的wupdmgr.exe文件

然后winexec,隐藏运行他

现在看看这个新的wupdmgr.exe是做什么

程序不大,他先启动原来的wupdmgr.exe文件,然后下载文件到wupdmgrd.exe这个多了一个d.然后隐藏方式运行他

恶意代码分析实战 Lab12

分析结束


相关文章:

  • 2021-08-21
  • 2021-05-01
  • 2021-05-06
  • 2021-08-25
  • 2021-10-14
  • 2021-06-26
  • 2021-07-07
  • 2021-04-22
猜你喜欢
  • 2021-05-09
  • 2021-07-03
  • 2021-10-17
  • 2022-01-07
  • 2021-09-24
相关资源
相似解决方案