#include "stdafx.h"

// jmp指令长度;
#define JMP_DLEN 5
// call指令长度;
#define CALL_LEN 5

namespace Assist
{
	// 按钮Connect状态(True=连接中, False=未连接)
	extern BOOL bConnectStatus;
	// 劫持状态;
	extern BOOL bHijacked;
	typedef struct __CALL_DATA__
	{
		LPVOID  myCall;                             // 自定义的地址;
		DWORD   dwOriginalAddr;                     // 被劫持的原始地址;
		DWORD   dwOriginalCallAddr;                 // 被劫持的原始函数地址;
		DWORD   dwBack2Addr;                        // 劫持Call完成后要返回的原始地址的下一地址;
		INT     nMyCallDataLen;
		BYTE    szMyCallData[CALL_LEN];             // 劫持Call的硬编码数据;
		INT     nOriginalAddrDataLen;
		BYTE    szOriginalAddrData[CALL_LEN];       // 被劫持的原始Call数据备份;

		__CALL_DATA__() {
			myCall = NULL;
			dwBack2Addr = 0;
			dwOriginalAddr = 0;
			memset(szMyCallData, 0, CALL_LEN);
			memset(szOriginalAddrData, 0, CALL_LEN);
		}
	}CALLDATA, *LPCALLDATA;

	// 初始化Call Data
	void InitCallData();
	// 劫持所有Call Data;
	BOOL HijackedAllCall();
	// 恢复所有Call Data;
	BOOL RestoreAllCall();
};