能力值:
( LV2,RANK:10 )
2 楼
HOOK这些函数的内核地址然后再写一个这样的函数原型,将提交出来的参数做比较 如果是这个域名就返回失败,不然就正确提交到真正的函数。 我也是看了郁金香的教程说的 不对的话 不要见怪
能力值:
( LV4,RANK:45 )
3 楼
感谢回复。。。
能力值:
( LV2,RANK:10 )
4 楼
单进程的话最简单的就是 注入进程然后获取这些函数所在的dll基地址,然后把函数入口VirtualProtect 改为可写可读可执行,然后改成一个跳转 调到自己写的过滤代码 完了跳回去。
能力值:
( LV2,RANK:10 )
5 楼
用detour吧,很强大的,任何API都可以HOOK
能力值:
( LV2,RANK:10 )
6 楼
全局的话很简单....我有代码给你贴一小段段..
原理都是一样的,希望能帮到你
RecoveryTPHookedNtOpenProcess proc
invoke MmGetSystemRoutineAddress,addr g_ObOpenObjectByPointer
mov pObOpenObjectByPointerAddr,eax ;获取原始ObOpenObjectByPoint地址
invoke MmGetSystemRoutineAddress,addr g_NtOpenProcess
mov pNtOpenProcessAddr,eax ;获取原始NtOpenProcess地址
pushad
mov esi,eax ;用esi线性寻址,搜索特征码,找到Hook地址
xor bl,bl
@@:
inc esi
mov bl,[esi-1]
cmp bl,050h
jnz @B
mov bl,[esi]
cmp bl,0ffh
jnz @B
mov bl,[esi+1]
cmp bl,075h
jnz @B
mov bl,[esi+2]
cmp bl,0c8h
jnz @B
mov bl,[esi+3]
cmp bl,0ffh
jnz @B
mov bl,[esi+4]
cmp bl,075h
jnz @B
mov bl,[esi+5]
cmp bl,0dch
jnz @B
mov pNtOpenProcessJmpAddr,esi ;Hook地址,也就是要写入跳转的地址
invoke RtlMoveMemory,myNtOpenProcessObOpenObjectByPointer,esi,6 ;复制6字节代码到中继函数
mov eax,esi
mov byte ptr[eax],0e9h ;写入跳转
sub eax,myNtOpenProcessObOpenObjectByPointer ;/
add eax,4 ;/算出要写入Call地址的机器码
not eax ;/
inc esi
mov [esi],eax ;写入地址机器码
add esi,4
mov byte ptr[esi],90h
inc esi
mov pNtOpenProcessTpAddr,esi ;保存保护代码地址
add esi,5
mov pNtOpenProcessRetAddr,esi ;保存返回地址
popad
ret
RecoveryTPHookedNtOpenProcess endp
;------------------------------------------------------------------------------------------------------------------------------------ ;---------------------------------------------------------------------------------------------------------------------------------------------------------
;//函数名: myNtOpenThreadObOpenObjectByPointer
;//参数: 无
;//功能: NtOpenThread中ObOpenObjectByPoint中缝函数
;//是游戏访问执行保护代码,不是游戏则执行原始ObOpenObjectByPoint
myNtOpenThreadObOpenObjectByPointer proc
nop
nop
nop
nop
nop
nop
nop
pushad
pushfd
invoke PsGetCurrentProcess
push eax ;当前EPROCESS
mov ebx,80514333h ;PsGetProcessImageFileName
call ebx ;当前进程名
invoke _stricmp,eax,addr szGame
mov IsGame,eax
popfd
popad
cmp IsGame,0 ;是否是游戏
jnz NotGame
; //如果是游戏
mov eax,pNtOpenThreadTpAddr ;执行保护代码
jmp eax
; //如果不是游戏
NotGame:
mov eax,pObOpenObjectByPointerAddr ;执行原始ObOpenObjectByPoint
call eax
push pNtOpenThreadRetAddr ;返回
ret
myNtOpenThreadObOpenObjectByPointer endp
能力值:
( LV2,RANK:10 )
7 楼
之前自己写代码遇到很多问题,直接用Detours吧,很方便
具体用法参考:
http://blog.csdn.net/cbh84663973/article/details/7043370