首页
社区
课程
招聘
[求助]inline hook keyboardclassservicecallback的代码有些地方理解不了,求赐教。
发表于: 2013-10-29 22:12 3274

[求助]inline hook keyboardclassservicecallback的代码有些地方理解不了,求赐教。

2013-10-29 22:12
3274
文章地址:5bcK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3M7$3c8A6L8X3N6Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0b7#2z5o6x3&6z5e0R3`.
部分代码如下:
__declspec (naked) 
VOID
fake_OldFunction (
PDEVICE_OBJECT  DeviceObject,
PKEYBOARD_INPUT_DATA  InputDataStart,
PKEYBOARD_INPUT_DATA  InputDataEnd,
PULONG  InputDataConsumed
    )
{
    __asm int 3    
     
    __asm
    {        
         push    eax
        push    ebx
        push    ecx
        push    esi
        xor     esi,esi
        mov     eax, [0xAAAAAAAA];
        mov     ebx, [esp+0x18]
       
        mov     cl , byte ptr [ebx+2];//按键码
        mov     ch , byte ptr [eax];//得到当前位置->ch
        cmp     ch , MAXBUF
        jnz     NotLastPlace
        mov     ch,  0x0;
 
NotLastPlace:
        inc     ch
        movzx   si,ch
        mov     byte ptr [eax],    ch 
        mov     byte ptr [eax+esi],cl 
         
        pop esi
         pop ecx
         pop ebx
         pop eax
        jmp Proxy_OldFunction   //★在这一系列JMP中,没有一处使用CALL,简化了代码,增强了稳定性
    }
}

这段代码不理解,尤其是这几句:
mov     eax, [0xAAAAAAAA];
        mov     ebx, [esp+0x18]
       
        mov     cl , byte ptr [ebx+2];//按键码
        mov     ch , byte ptr [eax];//得到当前位置->ch

其中最不理解的两个问题,1.作者何以知道byte ptr [ebx+2]这个地方是按钮码,2.0xAAAAAAAA是干什么的,如果说“是占位符,ChangeFake_Function()根据这个标志,对这段代码进行扫描,当扫描到0xAAAAAAAA的时候,将这个指针更改为最终要访问的指针。”那么程序中明明是先执行ChangeFake_Function(),再HOOK的啊。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回