前几天,我有一个朋友请我帮助他检查一下“HookDll.dll”这个DLL中的函数是如何调用的。他给我看了DLL的导出表截图。
之后我了解到,原来这个hookdll.dll是某个游戏浏览器中的一个文件,它的主要作用是用来加速Flash播放。看起来非常不错,如果我们能够编写一个小程序来使用这个DLL,那么我们也能够让Flash播放更快。下面我们就来看看如何调用这些DLL以及需要传递哪些参数。
首先我们使用IDA进行分析。在IDA中,Imagebase设置为0x400000。StartHook、EndHook、SetSpeed和SoundHook这四个函数的RVA加0x400000就得到了它们各自对应的代码位置。
从IDA中看到的StartHook的代码显示其函数定义应为void StartHook(void);同样地,EndHook和StartHook相似,定义为void EndHook(void),而SoundHook定义为void SoundHook(void);SetSpeed的代码显示它需要接收两个dword类型的参数,函数定义为void SetSpeed(dword dw1, dword dw2);
为了了解SetSpeed应该传入的参数值,我们在OllyDbg中附加到游戏浏览器,并查看HookDll.dll加载的基址。通过这种方法,我们找到了代码的地址,并在拖动加速条时在SetSpeed处设置了断点。当加速达到2000%时,传入的数值为0xCCCCCCCD和0x4033CCCC。
有了这些基础信息,我们可以开始编写简单的SDK来调用HookDll.dll中的函数。这里提供了一段C++代码示例:
typedef void (CALLBACK *lpFnSetSpeed)(DWORD,DWORD);
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hMd=::LoadLibraryA("hookdll.dll");
if(hMd==NULL)
{
printf("未找到 hookdll.dll");
getchar();
return 0;
}
lpFnSetSpeed fnSetSpeed=(lpFnSetSpeed)GetProcAddress(hMd,"SetSpeed");
(*fnSetSpeed)(100,100);
printf("调用成功!");
getchar();
return 0;
}
对于.NET环境,您可以使用以下代码:
public class FlashSpeed
{
[DllImport("hookdll.dll", EntryPoint = "StartHook", CharSet = CharSet.Ansi)]
public static extern void StartHook();
[DllImport("hookdll.dll", EntryPoint = "EndHook", CharSet = CharSet.Ansi)]
public static extern void EndHook();
[DllImport("hookdll.dll", EntryPoint = "SoundHook", CharSet = CharSet.Ansi)]
public static extern void SoundHook();
[DllImport("hookdll.dll", EntryPoint = "SetSpeed", CharSet = CharSet.Ansi)]
public static extern void SetSpeed(int arg1, int arg2);
}
这是一个非常有趣的项目,您可以在个人兴趣的基础上自行尝试。不过需要注意的是,HookDll.dll是别人的财产,请勿用于商业目的。否则可能会导致不可预测的后果。
标签:
加入本站QQ群获取更多实时游戏软件,线报,资源,福利点我加群
免责声明:
多特下载站仅为用户提供信息存储空间服务,所有资源均来源于网络或用户上传。我们无法对所有内容进行逐一审核,因此不保证资源的绝对准确性和完整性。用户在使用过程中应自行判断并承担相关风险。如涉及版权问题,请及时联系我们处理。对于因使用本站资源引发的一切争议、损失或法律责任,除法律明确规定外,多特下载站概不负责。请用户务必遵守法律法规,合理合法使用下载内容。侵删请致信E-mail: caozl@nbrjwl.com