main -> 1851 -> 1070,181F,1000
碰到了好多不认识的WINAPI函数
GetSystemMetrics:该函数只有一个参数,称之为「索引」,这个索引有75个ID,通过设置不同的标识符就可以获取系统分辨率、显示区域的宽度和高度、滚动条的宽度和高度等。
来自MSDN~~~获取屏幕的宽度和高度
GetDesktopWindow:该函数返回桌面窗口的句柄。桌面窗口覆盖整个屏幕。桌面窗口是一个要在其上绘制所有的图标和其他窗口的区域。
GetDC:该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。
CreateCompatibleDC的解释:
https://blog.csdn.net/shellching/article/details/18405185
Windows不允许程序员直接访问硬件,它对屏幕的操作是通过环境设备,也就是DC来完成的。屏幕上的每一个窗口都对应一个DC,可以把DC想象成一个视频缓冲区,对这这个缓冲区的操作,会表现在这个缓冲区对应的屏幕窗口上。
在窗口的DC之外,可以建立自己的DC,就是说它不对应窗口,这个方法就是CreateCompatibleDC,这个DC就是一个内存缓冲区,通过这个DC你可以把和它兼容的窗口DC保存到这个DC中,就是说你可以通过它在不同的DC之间拷贝数据。例如:你先在这个DC中建立好数据,然后在拷贝到窗口的DC就是完成了这个窗口的刷新。用双缓冲的话还要再定义一个位图对象,然后用CreateCompatibleBitmap建立一个与屏幕显示兼容的位图,再用SelectObject将位图选入到内存显示设备中。
总结:1070函数很可能是利用这些API对桌面屏幕窗口进行操作
181F -> 1739:
函数加密段,看起来有对称性,也还是比较麻烦,暂时跳过
这个有个FileName的字符串拼接过程,然后调用1000(其中是CreateFile和WriteFile),动态执行的时候看一眼就好
运行起来,可以发现当前文件夹下文件越来越多:
奇怪的是这些文件内容都是一模一样的
再来看到main中的过程:
1070负责获得数据,181F负责加密数据,1000负责写入数据,所以尝试:
A:直接把40181F函数块nop掉
B:用OD调试程序,在401070之后下断点,直接去看程序中的数据
nop掉这个,然后找回加密前的数据
还是看不懂。。。但是:这个已经是解密了的哦!查查文件头:
https://blog.csdn.net/zhembrace/article/details/52717559
发现:424D是windows的bmp文件,重命名一发,就可以打开了!
当然,还有这种姿势!
所以:恶意代码功能为:定时对屏幕进行截图,且进行加密存储