背景
驱动那块(MiDeadPteTrackerSListHead)
从遥远的东方收到的一个样本,好嘛!打开之后一直不停的在创建和结束进程,又是vmp。
还是老方法,dmp下来之后看看,好嘛,main函数被vm了,代码一堆不好分析。这次提高了难度,f5不了了,右键回收站。
看看行为,一直在重复创建和结束进程,并且会生成两个文件,这两个文件不能直接打开,但是不影响(你复制到其他目录就能正常打开了)。
你这一直创建和结束的岂不是想卡死我的虚拟机?想办法先干他娘的一炮,这类有守护进程的程序往往需要注意以下它的命令行参数,看看它有什么参数?
working、 working restart、daemon restart、daemon、inject
不难看出主要的工作就是四个,守护,工作,重启,注入。
在我的环境下注入了explorer和processhacker。
重启exploer和processhacker之后就不会有持续的关闭和重启(干掉了注入),只剩下daemon和working。接着直接结束这两个进程这个程序就over了,在字符串中发现了D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GA;;;IU)这个是给程序设置sddl权限,因为processhacker用的是r0的zwopenprocess打开的句柄的权限是拉满的,所以直接结束是成功的。但是如果是你使用r3的api去结束进程时需要注意这个问题。
其他
可以看到这95%+的cpu占用是什么意思?
经过观察有两个高占用的线程,且线程tid作为这两个文件的结尾,结束这两个线程之后,cpu占用就降下来了。
作用
想着栈回溯的方式看看这两个线程都在干什么,但是遗憾的是代码被vm了,由于程序会生成两个文件,所以这里对writefile下断点,发现只会断下来两次,意味着其实程序一开始就写入了数据,之后一直在做其他的事情导致文件一直被占用。
对createfilea下断点,结果如下,两个线程一直在打开对应tid的文件。
其中r9一直是0,代表其他进程不能打开这个文件
dwFlagsAndAttributes为0x4000080所以程序退出之后文件就没得了。
最后每一次working进程写入的数据除了后几位的tid其他都是一样的。