首页
社区
课程
招聘
[旧帖] 怎么实现这几个函数的HOOK,希望有原代码 0.00雪花
发表于: 2013-3-6 20:24 5279

[旧帖] 怎么实现这几个函数的HOOK,希望有原代码 0.00雪花

2013-3-6 20:24
5279
DnsQuery_A
DnsQuery_UTF8
DnsQuery_W
Query_Main
sendto                                                      
gethostbyname
这些函数怎么HOOK?
如果单进程的话 firefox
如果全局的话最好。
hook之后过滤 baidu.com,变成127.0.0.1
希望有原代码
悬赏分数绝对足够。
这个问题琢磨了两个多星期。
顺便感谢回复者。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
HOOK这些函数的内核地址然后再写一个这样的函数原型,将提交出来的参数做比较 如果是这个域名就返回失败,不然就正确提交到真正的函数。 我也是看了郁金香的教程说的 不对的话 不要见怪
2013-3-6 22:02
0
雪    币: 6092
活跃值: (654)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
3
感谢回复。。。
2013-3-6 22:25
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
单进程的话最简单的就是 注入进程然后获取这些函数所在的dll基地址,然后把函数入口VirtualProtect 改为可写可读可执行,然后改成一个跳转 调到自己写的过滤代码 完了跳回去。
2013-3-7 04:49
0
雪    币: 1313
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
用detour吧,很强大的,任何API都可以HOOK
2013-3-9 19:03
0
雪    币: 32
活跃值: (10)
能力值: ( 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
2013-3-11 08:16
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
之前自己写代码遇到很多问题,直接用Detours吧,很方便
具体用法参考:
http://blog.csdn.net/cbh84663973/article/details/7043370
2013-3-12 10:56
0
游客
登录 | 注册 方可回帖
返回
//