Lab11-02分析
前言
该实验进行对底层hook来窃取用户信息的恶意代码分析。
详细分析
首先在系统文件夹下打开Lab11-02.ini文件,如果打开失败则不继续运行。如图所示:
读取Lab11-02.ini文件后,进入一个简单解密函数。如图所示:
解密前数据,为乱码。
解密后数据,为一个电子邮件。
进入最后的sub_1000A4B6函数,整体函数流程注释如图所示:
首先获取当前进程名,如果不是THEBAT.EXE 或者OUTLOOK.EXE 或者MSIMN.EXE 则退出。这些程序都是邮件通信程序。可以看出该DLL想要对这些程序进行hook,进行邮件操作。如图所示:
然后获取当前线程ID,并挂起当前进程里除当前线程外的所有线程,如图所示。
获取winsock.dll里的send函数API
使用VirtualProtect函数修改send函数前五个字节的运行/读/写权限。便于进行之后的hook。如图所示:
将send函数的前五个字节拷贝进申请的一个动态内存,为之后正常执行send函数做铺垫。但是对该申请的内存必须要是可执行的内存块,记下该地址为0x324c5。如图所示:
hook后的send函数开头,进行了一个跳转,跳到当前DLL中的0x1000113D中去。如图所示:
收尾时,恢复被send地址的权限,同时在最后的函数里恢复刚刚被挂起的所有线程。
跟进hook之后要执行的函数0x1000113D。
该函数会将send的内容修改,当要send的字符串以RCPT TO: <开头,以>\r\n结尾时候,中间即为收件人。而该函数会将一开始解码出的邮箱地址添加到其中。即所有发出的邮件都会被该邮箱收到。如图所示:
在结尾会跳回刚刚申请的动态内存执行正常的send函数开头。如图所示:
再看看这个dll的导出函数,installer
首先会修改该注册表,如图所示:
添加该键值,该键值可以hook几乎所有文件。如图所示:
然后将该文件拷贝到系统路径,如图所示:
总结
-
对底层hook技术有了进一步的认知和学习。包括将开头的五字节代码保存并稍后跳转回去再调用。之前没有过细节上的学习。
-
认识到APPInit_DLLS,几乎会被所有的只要用到USER32.dll的文件加载。所以非常好进行hook,但是在WIN8之后就因为安全限制不再那么好用了。但是在WIN7以及之前都非常好用。