C利用句柄操作窗口.docx

上传人:b****0 文档编号:17761397 上传时间:2023-08-03 格式:DOCX 页数:23 大小:20.94KB
下载 相关 举报
C利用句柄操作窗口.docx_第1页
第1页 / 共23页
C利用句柄操作窗口.docx_第2页
第2页 / 共23页
C利用句柄操作窗口.docx_第3页
第3页 / 共23页
C利用句柄操作窗口.docx_第4页
第4页 / 共23页
C利用句柄操作窗口.docx_第5页
第5页 / 共23页
C利用句柄操作窗口.docx_第6页
第6页 / 共23页
C利用句柄操作窗口.docx_第7页
第7页 / 共23页
C利用句柄操作窗口.docx_第8页
第8页 / 共23页
C利用句柄操作窗口.docx_第9页
第9页 / 共23页
C利用句柄操作窗口.docx_第10页
第10页 / 共23页
C利用句柄操作窗口.docx_第11页
第11页 / 共23页
C利用句柄操作窗口.docx_第12页
第12页 / 共23页
C利用句柄操作窗口.docx_第13页
第13页 / 共23页
C利用句柄操作窗口.docx_第14页
第14页 / 共23页
C利用句柄操作窗口.docx_第15页
第15页 / 共23页
C利用句柄操作窗口.docx_第16页
第16页 / 共23页
C利用句柄操作窗口.docx_第17页
第17页 / 共23页
C利用句柄操作窗口.docx_第18页
第18页 / 共23页
C利用句柄操作窗口.docx_第19页
第19页 / 共23页
C利用句柄操作窗口.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C利用句柄操作窗口.docx

《C利用句柄操作窗口.docx》由会员分享,可在线阅读,更多相关《C利用句柄操作窗口.docx(23页珍藏版)》请在冰点文库上搜索。

C利用句柄操作窗口.docx

C利用句柄操作窗口

C#

实现过程:

过程一:

找到当前鼠标位置的句柄

您的使用2个WinAPI(俺喜欢自己封装下来用):

ViewCode

[DllImport("",EntryPoint="GetCursorPos")]

publicstaticexternboolGetCursorPos(outPointpt);

[DllImport("",EntryPoint="WindowFromPoint")]

publicstaticexternIntPtrWindowFromPoint(Pointpt);

ndexOf;

}

publicoverridestringToString()

{

StringBuilderresult=newStringBuilder();

for(WinHWNDwinHandle=this;winHandle!

=null;winHandle=

{

("{0}:

{1};",Escape,

if==-1)break;

}

return().TrimEnd(';');

}

privatestaticstringGetBaseMark(stringsMark)

{

string[]sMarks=(';');

returnsMarks[-1].Split(':

')[0];

}

privatestaticstring[]GetChildMarks(stringsMark)

{

string[]sMarks=(';');

string[]sChildMarks=newstring[-1];

for(inti=0;i<;i++)

{

sChildMarks[i]=sMarks[i];

}

returnsChildMarks;

}

.是不是都匹配

foreach(IntPtrbaseHwndinbaseHwnds)

{

IntPtrhandle=baseHwnd;

for(inti=-1;i>=0;i--)

{

string[]sChildMark=sChildMarks[i].Split(':

');

try

{

handle=(handle,UnEscape(sChildMark[0]))[(sChildMark[1])];

}

catch

{

break;

}

if(i==0)returnnewWinHWND(handle);

}

continue;

}

returnnull;

}

#region转义

privatestaticstringEscape(stringarg)

{

return(":

","\\:

").Replace(";","\\;");

}

privatestaticstringUnEscape(stringarg)

{

return("\\:

",":

").Replace("\\;",";");

}

#endregion

publicstaticWinHWNDGetWinHWND()

{

returnnewWinHWND()));

}

}

上全部代码,里面加了窗口的部分属性,扩展其他的属性,自己发挥吧,就是搞WinAPI

ViewCode

usingSystem;

using

using;

using;

using

using;

using;

namespaceInformationCollectionDataFill

{

publicclassWinAPI

{

#regionWinodwsAPI

[DllImport("",EntryPoint="FindWindow")]

privatestaticexternIntPtrFindWindow(stringIpClassName,stringIpWindowName);

[DllImport("",EntryPoint="FindWindowEx")]

privatestaticexternIntPtrFindWindowEx(IntPtrhwndParent,IntPtrhwndChildAfter,stringlpszClass,stringlpszWindow);

[DllImport("",EntryPoint="SendMessage")]

privatestaticexternintSendMessage(IntPtrhWnd,intMsg,IntPtrwParam,stringlParam);

[DllImport("",EntryPoint="GetParent")]

publicstaticexternIntPtrGetParent(IntPtrhWnd);

[DllImport("",EntryPoint="GetCursorPos")]

publicstaticexternboolGetCursorPos(outPointpt);

[DllImport("",EntryPoint="WindowFromPoint",CharSet=,ExactSpelling=true)]

publicstaticexternIntPtrWindowFromPoint(Pointpt);

[DllImport("",CharSet=]

publicstaticexternintGetClassName(IntPtrhWnd,StringBuilderlpClassName,intnMaxCount);

[DllImport("",CharSet=]

publicstaticexternintGetWindowText(IntPtrhWnd,[Out,MarshalAs]StringBuilderlpString,intnMaxCount);

[DllImport("",CharSet=]

publicstaticexternintGetWindowRect(IntPtrhwnd,refRectanglerc);

[DllImport("",CharSet=]

publicstaticexternintGetClientRect(IntPtrhwnd,refRectanglerc);

[DllImport("",CharSet=]

publicstaticexternintMoveWindow(IntPtrhwnd,intx,inty,intnWidth,intnHeight,boolbRepaint);

[DllImport("",CharSet=,SetLastError=true,ExactSpelling=true)]

publicstaticexternintScreenToClient(IntPtrhWnd,refRectanglerect);

#endregion

#region封装API方法

ndexOf;

}

privateRectangleGetRect()

{

if==null)returndefault(Rectangle);

RectangleclientSize=;

RectangleclientPoint=);

returnnewRectangle,,,;

}

publicstaticWinHWNDGetWinHWND()

{

returnnewWinHWND()));

}

publicoverridestringToString()

{

StringBuilderresult=newStringBuilder();

for(WinHWNDwinHandle=this;winHandle!

=null;winHandle=

{

("{0}:

{1};",Escape,

if==-1)break;

}

return().TrimEnd(';');

}

privatestaticstringGetBaseMark(stringsMark)

{

string[]sMarks=(';');

returnsMarks[-1].Split(':

')[0];

}

privatestaticstring[]GetChildMarks(stringsMark)

{

string[]sMarks=(';');

string[]sChildMarks=newstring[-1];

for(inti=0;i<;i++)

{

sChildMarks[i]=sMarks[i];

}

returnsChildMarks;

}

.是不是都匹配

foreach(IntPtrbaseHwndinbaseHwnds)

{

IntPtrhandle=baseHwnd;

for(inti=-1;i>=0;i--)

{

string[]sChildMark=sChildMarks[i].Split(':

');

try

{

handle=(handle,UnEscape(sChildMark[0]))[(sChildMark[1])];

}

catch

{

break;

}

if(i==0)returnnewWinHWND(handle);

}

continue;

}

returnnull;

}

#region转义

privatestaticstringEscape(stringarg)

{

return(":

","\\:

").Replace(";","\\;");

}

privatestaticstringUnEscape(stringarg)

{

return("\\:

",":

").Replace("\\;",";");

}

#endregion

}

}

 

效果:

Postsubject:

DllInjection

Thisismyoldtutorialondllinjection...peoplehavebeenaskingaboutthistopicabitrecently,so...hereitis:

DllInjectionTutorial

byDarawk

Introduction

TheCreateRemoteThreadmethod

TheSetWindowsHookExmethod

Thecodecavemethod

AppendixA-MethodsofobtainingaprocessID

AppendixB-MethodsofobtainingathreadID

AppendixC-CompleteCreateRemoteThreadexamplesourcecode

AppendixD-CompleteSetWindowsHookExexamplesourcecode

AppendixE-Completecodecaveexamplesourcecode

Introduction

Inthistutoriali'lltrytocoveralloftheknownmethods(oratleast,thosethatIknow=p)ofinjectingdll'sintoaprocess.

DllinjectionisincrediblyusefulforTONSofstuff(gamehacking,functionhooking,codepatching,keygenning,unpacking,etc..).

Thoughtherearescatteredtutorialsonthesetechniquesavailablethroughouttheweb,Ihaveyettoseeanycompletetutorialsdetailing

allofthem(theremayevenbemoreouttherethanIhavehere,ofcourse),andcomparingtheirrespectivestrength'sandweakness's.

Thisispreciselywhati'llattempttodoforyouinthispaper.Youarefreetoreproduceorcopythispaper,solongasproper

creditisgivenandyoudon'tmodifyitwithoutspeakingtomefirst.

TheCreateRemoteThreadmethod

I'veusedthisintonsofstuff,andIonlyrecentlyrealizedthatalotofpeoplehaveneverseenit,orknowhowtodoit.

Ican'ttakecreditforthinkingitup...Igotitfromanarticleoncodeproject,butit'saneattrickthatIthinkmore

peopleshouldknowhowtouse.

Thetrickissimple,andelegant.ThewindowsAPIprovidesuswithafunctioncalledCreateRemoteThread().Thisallowsyou

tostartathreadinanotherprocess.Forourpurposes,i'llassumeyouknowhowthreadingworks,andhowtousefunctionslike

CreateThread(ifnot,youcangohere).ThemaindisadvantageofthismethodisthatitwillworkonlyonwindowsNTandabove.

Topreventitfromcrashing,youshouldusethisfunctiontochecktomakesureyou'reonanNT-basedsystem(thankstoCatIDfor

pointingthisout):

boolIsWindowsNT()

{

Now,normallywewouldwanttostartthethreadexecutingonsomeinternalfunctionoftheprocessthatweareinteractingwith.

However,toinjectadll,wehavetodosomethingalittlebitdifferent.

BOOLInjectDLL(DWORDProcessID)

{

HANDLEProc;

charbuf[50]={0};

LPVOIDRemoteString,LoadLibAddy;

if(!

ProcessID)

returnfalse;

Proc=OpenProcess(CREATE_THREAD_ACCESS,FALSE,ProcessID);

if(!

Proc)

{

sprintf(buf,"OpenProcess()failed:

%d",GetLastError());

MessageBox(NULL,buf,"Loader",NULL);

returnfalse;

}

LoadLibAddy=(LPVOID)GetProcAddress(GetModuleHandle(""),"LoadLibraryA");

RemoteString=(LPVOID)VirtualAllocEx(Proc,NULL,strlen(DLL_NAME),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);

WriteProcessMemory(Proc,(LPVOID)RemoteString,DLL_NAME,strlen(DLL_NAME),NULL);

CreateRemoteThread(Proc,NULL,NULL,(LPTHREAD_START_ROUTINE)LoadLibAddy,(LPVOID)RemoteString,NULL,NULL);?

CloseHandle(Proc);

returntrue;

}

 

HHOOKSetWindowsHookEx(?

intidHook,

HOOKPROClpfn,

HINSTANCEhMod,

DWORDdwThreadId

);

 

LRESULTCALLBACKCBTProc(intnCode,WPARAMwParam,LPARAMlParam)

{

returnCallNextHookEx(0,nCode,wParam,lParam);

};

 

HMODULEhDll;

unsignedlongcbtProcAddr;

hDll=LoadLibrary("");

cbtProcAddr=GetProcAddress(hDll,"CBTProc");

 

BOOLInjectDll(char*dllName)

{

HMODULEhDll;

unsignedlongcbtProcAddr;

hDll=LoadLibrary(dllName);

cbtProcAddr=GetProcAddress(hDll,"CBTProc");?

SetWindowsHookEx(WH_CBT,cbtProcAddr,hDll,GetTargetThreadIdFromWindow("targetApp"));

returnTRUE;

}

__declspec(naked)loadDll(void)

{

_asm{

Weneed

VirtualProtect(loadDll,stubLen,PAGE_EXECUTE_READWRITE,&oldprot);?

#defineCREATE_THREAD_ACCESS(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ)

BOOLWriteProcessBYTES(HANDLEhProcess,LPVOIDlpBaseAddress,LPCVOIDlpBuffer,SIZE_TnSize);

BOOLLoadDll(char*procName,char*dllName);

BOOLInjectDLL(DWORDProcessID,char*dllName);

unsignedlongGetTargetProcessIdFromProcname(char*procName);

boolIsWindowsNT()

{

//checkcurrentversionofWindows

DWORDversion=GetVersion();

//parsereturn

DWORDmajorVersion=(DWORD)(LOBYTE(LOWORD(version)));

DWORDminorVersion=(DWORD)(HIBYTE(LOWORD(version)));

return(version<0x);

}

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)

{

if(IsWindowsNT())

LoadDll(PROCESS_NAME,DLL_NAME);

else

MessageBox(0,"Yoursystemdoesnotsupportthismethod","Error!

",0);

return0;

}

 

BOOLLoadDll(char*procName,char*dllName)

{

DWORDProcID=0;

ProcID=GetProcID(procName);

if(!

(InjectDLL(ProcID,dllName)))

MessageBox(NULL,"Processlocated,butinjectionfailed","Loader",NULL);

returntrue;

}

BOOLInjectDLL(DWORDProcessID,char*dllName)

{

HANDLEProc;

charbuf[50]={0};

LPVOIDRemoteString,LoadLibAddy;

if(!

ProcessID)

returnfalse;

Proc=OpenProcess(CREATE_THREAD_ACCESS,FALSE,ProcessID);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2