小弟跨专业读软件的工硕,初学编程,导师让写一个应用程序以便以后测试用,下面是小弟仿写的一个程序,错误有点多,还希望各位前辈能多多指点
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(6) : error C2059: 语法错误 : “__stdcall”
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(14) : error C2143: 语法错误 : 缺少“;”(在“__stdcall”的前面)
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(14) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(15) : error C2146: 语法错误 : 缺少“)”(在标识符“hInternet”的前面)
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(15) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(15) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(20) : error C2059: 语法错误 : “)”
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(21) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(21) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(90) : error C2065: “Real_InternetOpenUrlW”: 未声明的标识符
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(90) : error C2664: “DetourAttach”: 不能将参数 2 从“int”转换为“PVOID”
1>        从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(100) : error C2065: “Real_InternetOpenUrlW”: 未声明的标识符
1>c:\users\star\documents\visual studio 2008\projects\text\text\text.cpp(100) : error C2664: “DetourDetach”: 不能将参数 2 从“int”转换为“PVOID”源码
#include "stdafx.h"
#include <detours.h>#pragma comment(lib, "detours.lib")HINTERNET (WINAPI * Real_InternetOpenUrlW)(
HINTERNET hInternet,
LPCWSTR lpszUrl,
LPCWSTR lpszHeaders,
DWORD dwHeadersLength,
DWORD dwFlags,
DWORD_PTR dwContext) = InternetOpenUrlW;HINTERNET WINAPI My_InternetOpenUrlW(
HINTERNET hInternet,
LPCWSTR lpszUrl,
LPCWSTR lpszHeaders,
DWORD dwHeadersLength,
DWORD dwFlags,
DWORD_PTR dwContext)
{
char *buffer = (char *)malloc(BUFSIZE * sizeof(char));
char *timestamp = (char *)malloc(20 *sizeof(char));
char *flags = (char *)malloc(255 * sizeof(char));
HINTERNET hResult; memset(buffer, 0, sizeof(buffer));
memset(timestamp, 0, sizeof(timestamp));
memset(flags, 0, sizeof(flags));#ifdef DEBUG
OutputDebugString("[cuckoo] Hook InternetOpenUrlW IN");
#endif hResult = Real_InternetOpenUrlW(
hInternet,
lpszUrl,
lpszHeaders,
dwHeadersLength,
dwFlags,
dwContext); GetSystemTimestamp(timestamp, 20);
GetInternetFlags(dwFlags, flags, 255); if(hResult == NULL)
sprintf_s(
buffer,
BUFSIZE,
"\"%s\",\"%d\",\"%s\",\"InternetOpenUrlW\",\"FAILURE\",\"\",\"lpszUrl->%ws\",\"lpszHeaders->%ws\",\"dwFlags->%s\"\r\n",
timestamp,
cuckooedProcess.th32ProcessID,
cuckooedProcess.szExeFile,
lpszUrl,
lpszHeaders,
flags);
else
sprintf_s(
buffer,
BUFSIZE,
"\"%s\",\"%d\",\"%s\",\"InternetOpenUrlW\",\"SUCCESS\",\"0x%08x\",\"lpszUrl->%ws\",\"lpszHeaders->%ws\",\"dwFlags->%s\"\r\n",
timestamp,
cuckooedProcess.th32ProcessID,
cuckooedProcess.szExeFile,
hResult,
lpszUrl,
lpszHeaders,
flags); Append(buffer);#ifdef DEBUG
OutputDebugString(buffer);
OutputDebugString("[cuckoo] Hook InternetOpenUrlW OUT");
#endif free(flags);
free(timestamp);
free(buffer); return hResult;
}
VOID Hook()
{        
DetourRestoreAfterWith();   
DetourTransactionBegin();      
DetourUpdateThread(GetCurrentThread());     
//这里可以连续多次调用DetourAttach,表明HOOK多个函数   DetourAttach(&(PVOID &)Real_InternetOpenUrlW, My_InternetOpenUrlW);   

DetourTransactionCommit();

VOID UnHook()
{       
DetourTransactionBegin();   
DetourUpdateThread(GetCurrentThread());         
//这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK      

DetourDetach(&(PVOID &)Real_InternetOpenUrlW, My_InternetOpenUrlW);  

DetourTransactionCommit();

int APIENTRY _tWinMain(HINSTANCE hInstance,        
   HINSTANCE hPrevInstance,      
   LPTSTR    lpCmdLine,            
   int       nCmdShow) 
{       
Hook();     
   return 0;   
}