网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
用户层下拦截系统api的原理与实现
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
状态,而你想拦截的也拦截到了。


四:后记
  拦截的方式多种多样,不过大体的思路却都相同。要时刻注意你要拦截的函数的堆栈状态以及在拦截函数中的对数据的引用和函数的调用(地址问题)。

  
//////////////////////////////////////////////////////////////////////
附录:一个拦截CreateFile函数的简单实现
//////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <windows.h>
#include <Psapi.h>

#pragma comment(lib, "psapi.lib")

typedef struct _RemoteParam {
  DWORD dwCreateFile;
  DWORD dwMessageBox;
  DWORD dwGetCurrentProcess;
  DWORD dwWriteProcessMemory;
  unsigned char szOldCode;
  DWORD FunAddr;
} RemoteParam, * PRemoteParam;

typedef HANDLE (__stdcall * PFN_CREATEFILE)(LPCTSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
typedef int (__stdcall * PFN_MESSAGEBOX)(HWND, LPCTSTR, LPCTSTR, DWORD);
typedef BOOL (__stdcall * PFN_WRITEPROCESSMEMORY)(HANDLE,LPVOID,LPCVOID,SIZE_T,SIZE_T*);
typedef HANDLE (__stdcall * PFN_GETCURRENTPROCESS)(void);

#define PROCESSNUM 128
#define MYMESSAGEBOX "MessageBoxW"
#define MYCREATEFILE "CreateFileW"

void HookCreateFile(LPVOID lParam)
{

  RemoteParam* pRP = (RemoteParam*)lParam;


  DWORD NextIpAddr = 0;
  DWORD dwParamaAddr = 0;

  HANDLE RetFpHdl = INVALID_HANDLE_value;
  LPCTSTR lpFileName;
  DWORD dwDesiredAccess;
  DWORD dwShareMode;
  LPSECURITY_ATTRIBUTES lpSecurityAttributes;
  DWORD dwCreationDisposition;
  DWORD dwFlagsAndAttributes;
  HANDLE hTemplateFile;
  PFN_CREATEFILE pfnCreatefile = (PFN_CREATEFILE)pRP->dwCreateFile;


  __asm
  {
    MOV EAX,[EBP+8]
    MOV [dwParamaAddr], EAX
    MOV EAX,[EBP+12]          
    MOV [NextIpAddr], EAX
    MOV EAX,[EBP+16]
    MOV [lpFileName], EAX
    MOV EAX,[EBP+20]
    MOV [dwDesiredAccess],EAX
    MOV EAX,[EBP+24]
    MOV [dwShareMode],EAX
    MOV EAX,[EBP+28]
    MOV [lpSecurityAttributes],EAX
    MOV EAX,[EBP+32]
    MOV [dwCreationDisposition],EAX
    MOV EAX,[EBP+36]
    MOV [dwFlagsAndAttributes],EAX
    MOV EAX,[EBP+40]
    MOV [hTemplateFile],EAX    
  }

  PFN_MESSAGEBOX pfnMessageBox = (PFN_MESSAGEBOX)pRP->dwMessageBox;
  int allowFlag = pfnMessageBox(NULL, lpFileName, NULL, MB_ICONINformATION | MB_YESNO);
  
  if(allowFlag == IDYES)
  {
  unsigned char szNewCode;
  int PramaAddr = (int)dwParamaAddr;
  szNewCode = PramaAddr>>24;
  szNewCode = (PramaAddr<<8)>>24;
  szNewCode = (PramaAddr<<16)>>24;
  szNewCode = (PramaAddr<<24)>>24;
  szNewCode[0]

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号