#include "stdafx.h"

#define JMP_DLEN 5
#define CALL_LEN 5

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;

// 全局参数;
extern CALLDATA _cd_Go;
extern CALLDATA _cd_Connect;
extern CALLDATA _cd_Disconnect;
extern CALLDATA _cd_CheckFW;
extern CALLDATA _cd_SaveAsOutputData;
extern CALLDATA _cd_Go_SN;
extern CALLDATA _cd_Initial_failed;


void InitCallData();
BOOL HijackedAllCall();
BOOL HijackedCall(CALLDATA *pCallData);
BOOL HijackedCall(LPVOID MyCall, LPVOID OriginalCall, BYTE (&szOriginalCallData)[CALL_LEN]);

void Call_Connect();