findwindow
- 分析API函数原理
FindWindowA最外层流程:
进入CALL USER32.77D28242:
进入CALL USER32.77D2C7AC (NtUserFindWindow):
进入CALL ntdll.KiFastSystemCall:
- 自写FindWindow函数(硬编码)
#pragma pack(1)
typedef struct _unicode_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING,*PUNICODE_STRING;
#pragma pack()
__declspec(naked) void sysFastCall()
{
__asm
{
// 7C92E510 > 8BD4 MOV EDX,ESP
//7C92E512 0F34 SYSENTER
mov edx,esp
__emit 0x0f
__emit 0x34
}
}
/*
77D28285 . FF75 18 PUSH Dword PTR SS:[EBP+18] ; 0
77D28288 . FF75 E8 PUSH dword PTR SS:[EBP-18] ; PU_LCatipn
77D2828B . FF75 F8 PUSH DWORD PTR SS:[EBP-8] ; NULL
77D2828E . FF75 0C PUSH DWORD PTR SS:[EBP+C] ; 0
77D28291 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; 0
77D28294 . E8 13450000 CALL USER32.77D2C7AC ; NtUserFindWindow
*/
__declspec(naked) HWND __stdcall My_FindWindow(int p1,int p2,PUNICODE_STRING pu_classname,PUNICODE_STRING pu_catption,int p5)
{
__asm
{
MOV EAX,0x117A
call sysFastCall
RETN 0x14
}
}
void CTest_APIDlg::OnButtonMyFindwindow()
{
UNICODE_STRING pu_className,pu_Caption;
typedef (__stdcall *PRtlInitUnicodeString)( PUNICODE_STRING , PCWSTR );
PRtlInitUnicodeString RtlInitUnicodeString;
RtlInitUnicodeString=(PRtlInitUnicodeString)GetProcAddress(GetModulehandle("ntdll.dll"),"RtlInitUnicodeString");
RtlInitUnicodeString(&pu_className,L"SciCalc");
RtlInitUnicodeString(&pu_Caption,L"计算器");
HWND h=My_FindWindow(0,0,&pu_className,&pu_Caption,0);
::Sendmessage(h,WM_CLOSE,0,0);
}
文章最后发布于: 2018-08-10 13:38:17
相关阅读
功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请
//复习数组的时候,第一次见到了memset,学之。 memset:char型初始化函数 头文件:<string.h> 或 <memory.h> 函数原型:void *memset(vo
函数原型:BOOL EnableWindow(HWND hWnd, // handle to window (i)BOOL bEnable // flag for enabling or disab
Excle的Sumif函数如何使用?下面是小编为大家精心整理的关于Excle的Sumif函数如何使用?希望能够帮助到你们。条件求和函数Sumif1比
oracle最全面的分析函数over(Partition by...)及开窗
大型项目中通常会涉及到统计分析相关的功能,今天笔者把oracle常用的分析函数用法和区别通过详细的案例整理出来,希望对各位同学有帮