您的位置:首页 > 其它

病毒常用方法之移花接木---小小hook

2018-03-13 13:07 351 查看
之前在一些地方看过不少帖子,介绍或总结hook得各种使用,从中收获不少。其中有一个总结,我觉得是很准确的:hook就是改变原程序的执行流程。只不过在使用的场合不同,每个人实现的效果可能存在差异,但实现的思路大同小异。

下面介绍一个dll模块,它通过hook通信的api来实现盗号,看下主要操作的反汇编代码:

int _stdcall GetFuncAddr(HMODULE hModule,LPCSTR lpModuleName,LPCSTR lpProcName)
hModule        =dword ptr 8
lpModuleName   =dword ptr 0ch ;(传入的实参)wininet(.dll)
lpProcName     =dword ptr 10h ; HttpSendRequestA/W

push ebp
mov  ebp,esp
cmp  [ebp+lpModuleName],0 ;模块名是否为空
jz   short loc_10001018
push [ebp+lpModuleName] ;lpModuleName
call ds:GetModuleHandleA
push [ebp+lpProcName]  ;函数名
push eax
jmp  short loc_1000101e
loc_10001018:
push [ebp+lpProcName]
push [ebp+hModule]
loc_1000101e:
call ds:GetProcAddress ;得到要hook函数的地址
pop  ebp
retn 0ch
GetFuncAddr endp

;得到目标函数的地址之后,接下来就是用精心准备的工作函数取替换。这里是通过改变内存的读写属性来实现的。

4000
lea  eax,[ebp+flOldProtect]
push eax
push 4    ;flNewProtect  4---PAGE_READWRITE
push 10h  ;dwSize
push dword ptr [esi+0ch]; lpAddress 上面获得的函数地址
call ds:VirtualProtect
;由于是dll不能自己主动执行里面的代码,所以它就导出了关键函数供其他进程调用
;盗号吗?替换的NewHttpSendRequest()会先对发送请求的数据进行检查,如果是感兴趣的网站就将登录信息保存下来,传到指定的邮箱,接下来的任务就还给HttpSendRequest()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  病毒 汇编