首先查壳, 发现没有加壳。这个程序是用VC++6.0编写。
把样本拖入VT内查看, 发现47个杀毒引擎认为其有问题。
仔细查看一下报告, 附带有资源节
看一下它内部有的函数, 资源节肯定有问题。
继续查看VT报告, 发现其是一个名为msgina32.dll。初步考虑是利用了Winlogon服务,对GINA进行劫持。
注册表设了GinaDLL键验证了我的猜想。至少非常大的可能。
不管如何先用Resource Hacker把这个DLL拿出来再说。
首先把恶意软件拖入IDA内分析:
其中ReleaseResource是典型的释放资源节的代码就不分析了:
完成这些步骤后就把拼搭好的msgina32.dll的路径作为参数调用了sub_401000:
查看sub_401000的内容发现其在注册表的Winlogon下写入了GinaDll值,以传入的msgina.dll的绝对路径为数据。 这样每次用户登录后Winlogon就会调用恶意的msgina.dll
到此为止,主恶意软件的代码就分析完毕了。接下去分析msgina.dll。该DLL的代码内容也非常简单就是获取系统路径后拼搭成真实的msgina.dll的绝对路径后加载该库。
可以看到有非常多以Wlx开头的API,该DLL对绝大部分gina的API都进行了原封不动的转发,但有一个API需要特别注意,恶意软件正是通过该API来获取用户的登录凭证。那就是WlxLoggedOutSAS。
来看一下该函数的MSDN文档,可以看到在XP后,这个函数就被废弃了。
在Winlogon调用GINA DLL时,这个函数会被调用,其中最需要关注的是PWLX_MPR_NOTIFY_INFO结构体。当该API返回值为WLS_SAS_ACTION_LOGON的时候,代表有用户登录了。PWLX_MPR_NOTIFY_INFO结构体会记录用户的登录凭证。
可以看到这个预定义常量的值是1
来看看PWLX_MPR_NOTIFY_INFO结构体, 包含的就是用户登录凭据
WlxLoggedOutSAS被劫持后做了一些额外的操作。
确定有用户登录后,获取_WLX_MPR_NOTIFY_INFO结构体。并将用户凭据传入sub_10001570这个函数内:
查看一下该函数内部,发现保存用户凭据的痕迹。
为了查看到用户凭据被窃取的效果。我为Administrator用户设了密码并重启。登录后就发现被记录了。
(完)