首先查看一下字符串:
在这里看到了GinaDLL和Winlogon,这就有理由猜这是一个拦截GINA的恶意代码,这个在书中也提到了,GINA拦截就是在Windows XP系统中,恶意程序可以使用微软图形识
别和验证界面(GINA)拦截技术
来窃取用户的登陆凭证。
下面使用peid查看一下导入表:
在kernel32.dll中发现了许多关于资源的API函数。
在advapi32.dll中发现了关于注册表的函数。
由于知道了这个程序对资源做了一些操作,所以用Resource Hacker来查看一下:
在这里看到了PE和MZ,说明这里隐藏这一个PE文件。可以将这个文件提取出来,使用peid可以知道这是一个.dll文件。
运行程序前使用ProcessMonitor来进行监控,并且关注一下注册表有什么变化。双击运行Lab11-01.exe,可以发现桌面多了一个名为msgina32.dll的文件,同时呢,在注册表的位置多了一个GINADLL,双击GINADLL出现的路径也就是桌面上的msgina32.dll。前面我们提取过一个文件,查看一下这两个的MD5值:
可以看到两个的MD5值是相同的。这也就确定了这两个是同一个文件。所以呢,恶意程序从名为TGAD的资源节中提取出名为msgina32.dll的文件,将其释放到硬盘上。
问题2:
在前面已经分析过了,为了让msgina32.dll作为GINADLL
安装,恶意程序将自己添加进了注册表里,系统重启后,
msgina32.dll将会被加载。也就是驻留。
问题3、4:
首先使用strings程序查看msgina32.dll:
这里看到了许多以Wlx为开头的函数。因为msgina32.dll这个恶意程序截获了Winlogon与msgina.dll之间的通信
,为了让系统能够正常工作,它必须将登录凭证信息
传递给msgina.dll。为了完成这项工作,恶意程序必须包含GINA要求的所有导出函数
。并且大部分的前缀是“Wlx”。那么对于这个DLL程序来说,这里面有很多的“Wlx”开头的函数,那么我们就有充分的理由认为,这个样本是一个GINA
拦截
。还看到了msuti123.sys,这个重点关注一下。
用ida加载这个文件:
首先我们看到了fdwReason
这个参数,这个参数表示DLL函数被调用的原因,然后这个参数会与1进行比较,也就是在判断当前这个DLL文件是不是在加载时被调用的。如果是的话就会进入下面的程序:
程序会调用GetSystemDirectoryW这个函数,用于获取系统目录
。然后调用lstrcatW把上面获取的目录与"\\MSGina"组合在一起,再使用LoadLibraryW
函数获取msgina.dll的句柄。这里将LoadLibraryW的返回值保存到了eax,然后又将eax的值保存到了hModule里面。这样就可以让这个恶意的DLL程序的导入函数
使用真实的msgina.dll
中
的函数,从而使系统操作得以正常执行。
下面来分析一下导出函数,找到WlxLoggedOnSAS
。
双击点进去:
可以看到,这里现将字符串“WlxLoggedOnSAS”作为参数压栈,然后调用了sub_10001000
这个函数。双击进去分析一下:
可以看到,这里使用到了我们刚刚所获取的msgina.dll
的句柄hModule以及WlxLoggedOnSAS(lpProcName)这个字符串。下面调用了GetProcAddress,目的就是获取WlxLoggedOnSAS的地址。继续分析其它的导出函数,基本上和WlxLoggedOnSAS这个函数差不多。但是发现这个函数WlxLoggedOutSAS
有点不一样
,这个函数是在系统注销
的时候被调用的,进去分析一下:
这里进行了一系列的push操作,还有一个格式化字符串"UN %s DM %s PW %s OLD %s",可以看到这些参数都是函数sub_10001570的函数,双击进去查看一下:
这里是将时间,日期和登录凭证写入到msutil32.sys这个文件里。
分析到这里我们就可以知道,恶意程序使用GINA
拦截
并窃取用户登陆凭证
。msgina32.dll能够拦截所有提交到系统的用户登陆凭证。而恶意程序会把存储登录情况的日志文件msutil32.sys保存到系统目录里面。
问题5:
在前面分析的时候已经运行过这个恶意程序了,重新启动电脑,找到msutil32.sys这个文件,这里面就记录了用户的登录凭证。