必威体育Betway必威体育官网
当前位置:首页 > IT技术

自写FindWindow函数

时间:2019-11-04 21:45:51来源:IT技术作者:seo实验室小编阅读:51次「手机版」
 

findwindow

模拟FindWindow函数,绕过所有用户层HOOK

  1. 分析API函数原理

FindWindowA最外层流程:

进入CALL USER32.77D28242:

进入CALL USER32.77D2C7AC (NtUserFindWindow)

进入CALL ntdll.KiFastSystemCall:

  1. 自写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

相关阅读

C语言中memset函数详解(很清晰易懂)

功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请

C++中memset函数的用法

//复习数组的时候,第一次见到了memset,学之。 memset:char型初始化函数 头文件:<string.h> 或 <memory.h> 函数原型:void *memset(vo

EnableWindow()函数的应用

函数原型:BOOL EnableWindow(HWND hWnd,      // handle to window  (i)BOOL bEnable      // flag for enabling or disab

Excle的Sumif函数如何使用?

Excle的Sumif函数如何使用?下面是小编为大家精心整理的关于Excle的Sumif函数如何使用?希望能够帮助到你们。条件求和函数Sumif1比

oracle最全面的分析函数over(Partition by...)及开窗

大型项目中通常会涉及到统计分析相关的功能,今天笔者把oracle常用的分析函数用法和区别通过详细的案例整理出来,希望对各位同学有帮

分享到:

栏目导航

推荐阅读

热门阅读