**之前看了某师傅的一篇文章关于通过mstsc反向攻击客户端,奈何对Windows Api的相关操作不太了解于是打算学习一下,希望能构造Exp ** XD
剪切板中的数据类型
1 2 3 4 5 6 7
| CF_TEXT //一段ANSI文本 CF_OEMTEXT //一段DOS文本 CF_UNICODETEXT //一段Unicode文本 CF_LOCALE //区域标识 CF_BITMAP //位图 CF_DIB //设备无关位图 CF_HDROP //指向HDROP这种结构的句柄,可以通过DragQueryFile函数来获得文件信息,HDROP是一个结构体。
|
常用操作剪切板的APi
1 2 3 4 5
| BOOL OpenClipboard(HWND hWndNewOwner); //打开剪切板 BOOL EmptyClipboard(VOID); //清空剪切板 HANDLE SetClipboardData(UINT uFormat, HANDLE hMem); //设置剪切板内容 HANDLE GetClipboardData(UINT uFormat); //返回剪切板内容的内存块句柄 BOOL CloseClipboard();
|
使用Win32 Api与剪切板交互
1 2 3 4 5 6
| 1. HGLOBAL GlobalAlloc(分配选项, 分配内存大小); //分配全局内存并返回它的句柄或指针 2. HGLOBAL GlobalFree(内存块句柄); //释放全局内存 3. SIZE_T GlobalSize(内存块句柄); //返回全局内存的大小 4. LPVOID GlobalLock(内存块句柄); //获得全局内存所有权,并返回指向全局内存的指针 5. BOOL GlobalUnlock(内存块句柄); //释放全局内存所有权,GlobalAlloc分配选项如果是GHND,则分配可变内存,清零内存并返回全局内存句柄,需要GlobalLock以获取指针 6.GlocalAlloc//分配选项如果是GPTR,则分配固定内存,清零内存并直接返回指针
|
微软Hook框架Detours
关于这个框架了解了RdpThief的朋友们都知道,RdpThief就是使用这个框架去Hook相关Api实现抓取Rdp登录凭证的
关于编译Detours的过程就不说了,网上一堆教程,简单的使用一下hook
在VS中新建控制台项目根据操作系统位数将编译出来的detours.h
和detver.h
,detours.lib
复制到项目根目录下,在头文件处引用
项目代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <iostream> #include <stdio.h> #include <windows.h> #include "detours.h" #pragma comment(lib,"detours.lib")
static int(WINAPI* HookMessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW; int WINAPI _MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) { int ret = HookMessageBoxW(hWnd, L"hook", L"hook Success", uType); return ret; }
void DetourHook() { DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach((void**)&HookMessageBoxW,_MessageBoxW); DetourTransactionCommit(); }
void DetourUnHook() {
DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach((void**)&HookMessageBoxW, _MessageBoxW); DetourTransactionCommit(); }
int main() { MessageBoxW(NULL, L"Hello", L"Hello", 0); DetourHook(); MessageBoxW(NULL, L"Hello", L"Hello", 0); DetourUnHook(); return 0;
}
|
可以看到以上代码我们Hook了MessageBoxW这个api,查看效果
先是弹出了Hello 然后弹出了hook 第二个MessageBox被我们hook成功
使用Detours可以帮助我们快速的Hook指定的api
Tips:顺便插一个无关的内容,之前看Rdpthief这个项目有个小Bug(Win7抓不到Server地址),后面三好学生师傅提出了解决方法,看了一些博客修改的代码是比较冗长的,稍微用简单的方法修正了一下
直接判断lpServer的值是否为Null即可,如为Null,则使用Hook CredReadW 这个api来获取Server的值
对Windows编程的知识又复习了一遍,i了i了