网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
VC++怎样获取未知DLL的接口参数
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
程序(testdlg.exe),q不弹出信息
//MyApiHook.dll = By This File Create
//testdlg.exe = 需要替换的程序

#include <stdio.h>

#define  WIN32_LEAN_AND_MEAN  
#include <windows.h>
#include "ApiHooks.h"

int  (WINAPI *pFunction)(long  p1,long  p2,long  p3, long   p4);
typedef int  (WINAPI Function)(long   p1,long p2,long p3, long p4);


int WINAPI MyMessageBoxA(long  p1,long  p2,long  p3, long p4)
{
 const nCountParam = 4;
 long pp[nCountParam];
 pp[0] = p1,pp = p2,pp = p3,pp = p4;

 FILE *fp = fopen("c:\1.txt","w");
        char szBuf[1024];

 sprintf(szBuf, "参数内容的列表,很容易判断是否是字符串,或者为NULL");
 fputs(szBuf, fp);


 for(long i = 0; i < nCountParam; i++)
 {
  sprintf(szBuf,"[p%d] = 0x00000000(0)",i);
  _try {
   if(pp[i])
    sprintf(szBuf,"[p%d] = 0x%08x(%d)  "%s"",i,pp[i],pp[i],pp[i]);
  }_except(1,1)
  {
   sprintf(szBuf,"[p%d] = 0x%08x(%d)",i,pp[i],pp[i]);
  }
  fputs(szBuf,fp);
 }
 fclose(fp);

    return(pFunction(p1, p2, p3,p4));
}

extern "C"__declspec(dllexport) API_HOOK ApiHookChain = {
 {"USER32.DLL","MessageBoxA",HOOK_EXACT, NULL, NULL, MyMessageBoxA},
 {HOOKS_END}
};

BOOL APIENTRY DllMain( HANDLE hModule,DWORD  ul_reason_for_call, LPVOID lpReserved)
{
 HMODULE  hDLL = LoadLibrary("USER32.DLL");
 if(hDLL)
 {
  pFunction = (Function *)GetProcAddress(hDLL,"MessageBoxA");
  FreeLibrary(hDLL);
 }
    return TRUE;
}
//--------------------------------MyApiHook.cpp文件结束-----------------------------------------
上面的这个例子分析了大家都熟悉的MessageBox,假设你不知道该函数的参数,通过上面讲的方法,可以很容易的知道该
函数共有4个参数,有返回数。
于是我们可以把该函数定义为:
int WINAPI MessageBox(long   p1,long p2,long p3, long p4);
然后自己定义一个MyMessageBoxA的函数(此函数可以很方便的判断该参数是否为字符串)
     int WINAPI MyMessageBoxA(long  p1,long  p2,long  p3, long p4)
通过该函数可以生成的该函数的调用的实际内容,

//------------以下为笔者机器上所得到的信息-----------
参数内容的列表,很容易判断是否是字符串,或者为NULL
[p0] = 0x00000000(0)
[p1] = 0x00416698(4286104)   "测试对话框"
[p2] = 0x004166a0(4286112)   "信息"
[p3] = 0x00000040(64)
//-------------------------------
根据以上信息,可以很容易的知道第2,3个参数为字符串。然后根据里面的内容可以很容易的知道该参数的实际用途。

网学推荐

免费论文

原创论文

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