恶意代码分析实战第11章实验

本文详细分析了一段恶意代码的行为,包括释放msgina32.dll文件并利用注册表驻留,以及通过msgina32.dll拦截登录凭证。此外,还介绍了另一段恶意代码Lab11-03.dll,它复制自身到系统目录并修改cisvc.exe,实现长期驻留,同时记录键盘输入信息。
摘要由CSDN通过智能技术生成

Lab 11-1

 

1. 这个恶意代码向磁盘释放了什么?

       首先peid查壳后发现无壳,IDA打开Lab11-01.exe分析。发现调用了GetModuleHandleA函数并且参数为0,所以函数的返回值就是Lab11-01.exe文件的句柄。并且在0040120F处将得到的句柄作为参数,调用了sub_401080函数。

         跟进sub_401080函数分析,发现首先有对句柄参数的判空。

       继续向下分析,发现利用了多个资源相关的API函数,并且确定Lab11-01.exe文件的位置以及大小。StudyPE打开Lab11-01.exe文件,查看资源窗口。发现在TGAD节中包含一个PE文件。

     在确定大小后使用VirtualAlloc分配内存空间,并且分配的保护为PAGE_READWRITE。

        然后使用_fopen在Lab11-01.exe同目录下创建一个名为msgina32.dll的文件,根据参数Mode可知该文件允许写数据。又调用了_fwrite对msgina32.dll进行写操作。

 

         静态分析至此大概可知程序释放了什么文件,OD中在0040116B调用_fopen函数处下断点,单步步过后检查Lab11-01.exe所在目录。

 2. 这个代码如何进行驻留?

        在释放DLL文件之后,使用GetModuleFileNameA获取其所在路径。在00401288处将DLL路径作为参数,调用sub_401000函数。

         跟进sub_401000函数分析,可见使用RegCreateKeyExA、RegSetValueExA函数在注册表SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下创建了一个名为GinaDLL的项,并且GinaDLL的值即为释放的DLL文件。

      静态分析至此。OD中在00401047调用RegSetValueExA函数处设置断点,单步步过后查看SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon注册表下的值。

     SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL作为Windows用来存储Winlogon加载的第三方DLL,恶意代码利用这一点实现GINA拦截。所以可知程序通过增加注册表项来实现驻留:将释放的msgina32.dll作为GINADLL安装,系统重启后msgina32.dll会被加载。

3. 这个恶意代码如何窃取用户登陆凭证?

        现在可以判断出,msgina32.dll作为GINA拦截器。恶意文件msgina32.dll在Winlogon和msgina.dll之间工作(类似于中间人攻击),此时恶意代码能够拦截提交给系统的所有登陆凭证。

       同时如书中所言,msgina32.dll拦截了两者之间的通信,为了能够让系统正常运行,它必须将登陆凭证传递给msgina.dll。从而拦截器msgina32.dll必须包括msgina.dll的所有导出函数,也就是必须超过15个导出函数并且大部分前缀时Wlx。

Lab 11-3

1. 使用基础的静态分析过程,你发现了什么有趣的线索?

        首先对Lab11-03.exe查壳,发现无壳后使用Strings查看字符串。

        发现“C:\WINDOWS\System32\inet_epar32.dll”,“net start cisvc”,“cisvc.exe”字符串,使用StudyPE查看可执行文件的导入表,发现复制文件函数。

     对Lab11-03.dll文件进行查壳,无壳后同样查看其字符串。又出现一个文件路径“C:\WINDOWS\System32\kernel64x.dll”。

     查看Lab11-03.dll导入表,发现击键记录函数GetForegroundWindow、GetAsyncKeyState函数。

 2. 当运行这个恶意代码时,发生了什么?

        利用进程监视器Process Monitor,设置过滤条件后运行Lab11-03.exe。发现有创建inet_epar32.dll和cisvc.exe的操作(实验环境为Win10x64_15063)。

         IDA打开Lab11-03.exe分析,主函数利用CopyFIleA函数将同目录下Lab11-03.dll复制到C:\\WINDOWS\\System32\\inet_epar32.dll。利用_sprintf函数获得cisvc.exe所在路径,既:C:\WINDOWS\System32\cisvc.exe。并将该路径作为参数,调用了sub_401070函数。

         跟进sub_401070函数分析,该函数为cisvc.exe创建文件映射对象并将其加载到进程地址空间。

 

         其中00401100处lpBaseAddress就是MapViewOfFile函数所返回的cisvc.exe文件映射对象在进程地址空间中的起始地址。

         在0040127C处对cisvc.exe文件进行操作:首先调整内存地址偏移,然后通过mov esi, offset loc_409030、rep movsd将loc_409030处内容写入到cisvc.exe中;也等同于memcpy函数,这也是为什么只能看到对cisvc.exe的CreateFileA操作却看不到WriteFileA操作。

        跟进loc_409030处按C转换为代码查看。

         可以看出这是一段shellcode,跟进loc_409134查看。

        在这里看到了恶意代码copy的DLL文件,以及该函数的导出函数。

        再回到主函数。

         在对sub_401070调用完成后,使用_system发出DOS命令:“net start cisvc”。

    Lab11-03.exe首先将Lab11-03.dll复制到C:\\WINDOWS\\System32\\inet_epar32.dll,然后将C:\WINDOWS\System32\cisvc.exe文件修改后,映射到Lab11-03.exe进程中。IDA接下来分析被修改的cisvc.exe。

        01001B2C处调用了sub_1001AD5函数,跟进分析。

         前3个call都没有获取到有效的信息,但是第4个call时并没有显示函数名,可能被恶意代码修改。OD中加载cisvc.exe,在01001B0A处下断点单步步过后分析。

        发现该处调用的函数是LoadLibraryA,注意01001B0A处上方的push eax,这是LoadLibraryA的参数。根据寄存器窗口中eax的值,在内存窗口中发现:

         所以可知被修改的cisvc.exe所做的就是加载inet_epar32.dll的导出函数zzz69806582。接下来继续再下两处call下断点,分析如下:

         再函数尾部01001B27处,jmp到了程序入口点。恶意代码通过程序入口点重定向来实现(inet_epar32.dll)Lab11-03.dll的长期驻留。

5. Lab11-03.dll做了什么?

        IDA打开Lab11-03.dll,定位到导出函数分析。

    跟进1000154A处offset StartAddress分析, 创建名为“MZ”的互斥量和名为"C:\\WINDOWS\\System32\\kernel64x.dll"的文件。

       跟进sub_10001380函数分析,可知发现这是一个循环。并且在循环内部调用了sub_10001030函数、_sprintf字符换拼接函数、WriteFile函数、Sleep函数。

         跟进sub_10001030函数分析,首先调用的sub_10001000既是对函数的调用。接下来又发现了循环和大量的GetAsyncKeyState函数。

 

  所以可以推断,恶意代码实现击键记录,并将记录写入C:\\WINDOWS\\System32\\kernel64x.dll

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值