注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

Win32汇编实现HOOK  

2011-03-31 22:12:12|  分类: Win32汇编学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
.586p
.model
flat, stdcall
option casemap: none

include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
;************************************************************
m_m2m MACRO d1, d2
    push d2
    pop  d1
ENDM
HOOKAPI struct
Hjmp  BYTE ?      ;jmp
Haddr DWORD ?   ;0x000000
HOOKAPI ends
;************************************************************
MEMORY_BASIC_INFORMATION_SIZE  equ 28    ;内存大小

.data
  Api HOOKAPI <>
  DllName      db "user32.dll", 0
  ApiName      db "MessageBoxA", 0
  szMsgBox    db "Api Hook Test!",0
  szHookedOK     db " has been hooked OK!", 0
;************************************************************
.data?
  lpOldprotect      dd     ?
  lpMessageBox         dd     ?
  lpBuffer         db 10 dup(?)
  dwReaded         dd     ?
  hProcess          dd     ?
  lpMemory        dd    ?
;************************************************************
.code
;************************************************************
start:
  invoke GetModuleHandle, offset DllName
  invoke GetProcAddress, eax, offset ApiName
  mov  edi, eax                                ;finally got MessageBoxA address
  mov  lpMessageBox, eax
  invoke MessageBox,NULL,offset szMsgBox,offset szMsgBox,MB_OK    ;确认得到MessageBoxA的地址PUSH DWORD PTR DS:[403034] ; user32.MessageBoxA
;************************************************************
  invoke GetCurrentProcess
  mov    hProcess, eax
  invoke ReadProcessMemory, hProcess, lpMessageBox, offset lpBuffer, 10, offset dwReaded
  invoke VirtualAlloc,0,MEMORY_BASIC_INFORMATION_SIZE, MEM_COMMIT, PAGE_READWRITE ;提交一份可供读写内存空间
  mov lpMemory,eax
  invoke VirtualQuery,lpMessageBox,lpMemory,MEMORY_BASIC_INFORMATION_SIZE    ;返回页面虚拟信息
  invoke FlushInstructionCache, hProcess, lpMessageBox, 5      ;just to be sure   
  invoke VirtualProtect,hProcess,lpMessageBox,PAGE_EXECUTE_READWRITE,lpOldprotect                            ;修改为可读写模式
;************************************************************
;we will change protection for a moment, so we will be able to write there
  mov  Api.Hjmp, 0E9h   ;写入jmp跳转指令
  ;mov  dword ptr Api.Haddr,offset @newMsgBox ;计算跳转地址Hook Api addr
  mov  Api.Haddr,offset @newMsgBox
  sub  Api.Haddr,edi
  sub  Api.Haddr,5
  invoke WriteProcessMemory,hProcess,lpMessageBox,offset Api,sizeof Api,NULL
; invoke VirtualProtect,hProcess,lpMessageBox,PAGE_EXECUTE_READ,lpOldprotect    ;return back the protection of page             ;改为原来模式
  invoke VirtualFree,lpMemory,0,MEM_RELEASE  ;free memory                          ;释放内存
;************************************************************
  invoke MessageBoxA, 0, offset szMsgBox, offset szMsgBox, 0            ;Jmp Hook Api addr
  invoke ExitProcess, 0
;************************************************************
@newMsgBox: ;004010CD                                ;Hook Api addr
  ;mov  [esp+16], MB_ICONINFORMATION    ;修改信息ICON
  m_m2m [esp+16], MB_ICONINFORMATION
  ;mov   [esp+12], OFFSET szMsgBox      ;修改标题
  mov eax, [esp+8]              ;修改信息内容
  invoke lstrcat, eax, offset szHookedOK
  ;invoke MessageBoxEx,NULL,offset szMsgBox,offset szHookedOK,MB_OK,NULL
  invoke WriteProcessMemory, hProcess, lpMessageBox, offset lpBuffer, 10, offset dwReaded
  jmp lpMessageBox       ;push   lpMessageBox
                        ;ret; 10H
;************************************************************
end start
  评论这张
 
阅读(77)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017