作者:swlilike
最近寫驅動,發現ObRegisterCallbacks這個總是函數調用不成功,在網上查了一下,發現使用這個函數對驅動有特殊的要求,必須使用特殊的簽名才行!否則這個函數會返回0xC0000022(拒絕訪問),逆向此函數可以看到以下是有關是否加簽名的判斷,PAGE:00000001404AA75D call MmVerifyCallbackFunction
PAGE:00000001404AA762 cmp eax, ebx
PAGE:00000001404AA764 jz short loc_1404AA7E1
PAGE:00000001404AA766
PAGE:00000001404AA766 loc_1404AA766: ; CODE XREF: ObRegisterCallbacks+11B?j
PAGE:00000001404AA766 mov rcx, [rsi+rbp+18h]
PAGE:00000001404AA76B cmp rcx, rbx
PAGE:00000001404AA76E jz short loc_1404AA779
PAGE:00000001404AA770 call MmVerifyCallbackFunction
PAGE:00000001404AA775 cmp eax, ebx
PAGE:00000001404AA777 jz short loc_1404AA7E1
開發調試時可以將
PAGE:00000001404AA764 jz short loc_1404AA7E1
PAGE:00000001404AA76E jz short loc_1404AA779
這兩行改為nop暫時使ObRegisterCallbacks調用成功,方便開發調試和暫時沒簽名的朋友
ObRegisterCallbacks這個函數是在Vista sp1之後的版本中添加的,可用來監控系統中對進線程句柄的操作,如打開進程、複製線程句柄等。
没有评论:
发表评论