admin 发表于 2021-2-22 13:41:14

商业dwm绘制取巧分析

一、PY得到样本And测试码
得到一个绘制的例子和一个易语言模块,首先把模块拖进某软件XXYY,于是得到了模块源码。二、分析模块源码观察下图不难发现这里加载了一个dll到自身。然后把导出函数地址给全局变量。
重点:仔细观察第一个红框。他对一个资源文件进行了解密。所以我们只要在他解密后将他的dll文件取出来。那么只需要一行代码。编译运行,这样我们就取到了dll三、分析DLL用工具查看dll的导出函数将dll拖进od,跳转到InstallDWM函数。看到这个我想丢进回收站!!!!
这条路走不通,呜呜呜,我太菜了。
思考一手。突然灵机一动。众所周知dwm绘制,那么绘制流程一定是在dwm里的。但是绘制的逻辑在刚才的绘制例子.e里看到了。所以嘿嘿,他们之间一定存在某种py交易。
但是里面全是vm,我又不想去分析他们怎么py的。所以我盲猜跨进程大概可能应该用了WriteProcessMemory.四、动手干我直接一个驱动起步,把NtWriteVirtualMemory给他hook了NTSTATUS __stdcall MyWriteVirtualMemory(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, SIZE_T NumberOfBytesToWrite, PSIZE_T NumberOfBytesWritten)
{
    MyNtWriteVirtualMemory a = Ori_NtWriteVirtualMemory;
    PEPROCESS eprocess = IoGetCurrentProcess();



    KdPrint(("Name:%s   BaseAddress:%llXBuffer:%llXNumberOfBytesToWrite:%dNumberOfBytesWritten:%d\n", (const char*)PsGetProcessImageFileName(eprocess), BaseAddress, Buffer, NumberOfBytesToWrite, NumberOfBytesWritten));
    return a(ProcessHandle, BaseAddress, Buffer, NumberOfBytesToWrite, NumberOfBytesWritten);
}然后dbgview一开,驱动一加载,然后再绘制例子里填上Py来的测试码。
驱动加载前,必备shark,感谢飞总,让我这彩笔也能在win10上玩hook。
当开启绘制后,可以从上面的e语言例子看到,是在线程里不断绘制。
而我的dbgview也不断输出信息
被写的进程肯定就是dwm.exe了。从上面的信息可以观察出,主要就两个内容。一个是写好多好多东西,我猜测是绘制的内容。另一个地址是不会变的,所以我们可以用ce打开dwm.exe观察一下。通过观察他的值在0 1 2三个值不停变动。所以我判断这是一个标志位,判断这个标志位做对应的操作(我猜的)。
所以只要找出访问他的地方就能得知他的绘制位置。到了一个无模块的地址,这里就是绘制的位置了。然后我们再来看看他是怎么hook的。找到首地址,想办法返回到上一层。
通过红色箭头调用到无模块地址的。但是这个call会进入一个ntdll模块里的LdrpDispatchUserCallTarget函数里。我百度了一圈,不思其解。后来看了一眼汇编。搜嘎。他里面会jmp rax。所以他应该是改了rax。追一下,rax来源,后面的操作我就不说了从上图可以看到某个对象里的函数指针被改成了他的绘制地址,从而达到hook的目的。


页: [1]
查看完整版本: 商业dwm绘制取巧分析