小弟跨专业读软件的工硕,初学编程,导师让写一个应用程序以便以后测试用,下面是小弟仿写的一个程序,错误有点多,还希望各位前辈能多多指点
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;
}
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;
}
解决方案 »
- 又见雷人的院士发言——中国企业联手开发自主操作系统
- CreateMutex WaitForSingleObject(hMutex,INFINITE);没有ReleaseMutex怎么也返回了?
- 如何使在工作区动态创建的ToolBar区域变成非工作区
- 为什么把 Connect 放在 WSAEventSelect 语句的后面就会出现 10035 错误!!
- 高手们帮我看看DELPHI调用VC写的DLL问题出在哪里?
- listview占用的内存如何释放?
- 工具条停靠问题,怎样能把一个工具条做成即能停靠在主框架内,又在拖动的时候可以停靠在其他如TAB页上或者是某一个CWnd中?
- release为何不行?
- 请问是怎么回事?
- 如何删掉CString的一个字符
- MFC对话框问题
- bmp图像平移
另外i啊正如楼上所说实现HOOK和UNHOOK的函数放到DLL里然后注入到目标进程中才能生效
本程序中木有用到InternetOpenUrlW的吧
#include <windows.h>
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
#include <stdlib.h>
#include <malloc.h>