|
@@ -186,18 +186,20 @@ namespace Assist
|
|
_cd_CheckFW.szMyCallData[0] = 0xE9; // 汇编硬编码:jmp [4字节地址];
|
|
_cd_CheckFW.szMyCallData[0] = 0xE9; // 汇编硬编码:jmp [4字节地址];
|
|
*(LPDWORD)(&_cd_CheckFW.szMyCallData[1]) = (DWORD)_cd_CheckFW.myCall - _cd_CheckFW.dwOriginalAddr - JMP_DLEN;
|
|
*(LPDWORD)(&_cd_CheckFW.szMyCallData[1]) = (DWORD)_cd_CheckFW.myCall - _cd_CheckFW.dwOriginalAddr - JMP_DLEN;
|
|
|
|
|
|
|
|
+#if 0 // 与_cd_Go_CommunicationError一样;
|
|
/* 针对弹框Communication Error的消除处理 */
|
|
/* 针对弹框Communication Error的消除处理 */
|
|
// 00404408 | E8 2BA60C00 | call demo.4CEA38 | # Dailogs::ShowMessage(string) 弹出提示框:Communication Error
|
|
// 00404408 | E8 2BA60C00 | call demo.4CEA38 | # Dailogs::ShowMessage(string) 弹出提示框:Communication Error
|
|
_cd_CheckFW_CommunicationError.myCall = Call_MyCheckFWCommunicationError; // 成功获取版本后跳转处理;
|
|
_cd_CheckFW_CommunicationError.myCall = Call_MyCheckFWCommunicationError; // 成功获取版本后跳转处理;
|
|
// 0040440D | FF4D BC | dec dword ptr ss:[ebp-44] | [ebp-44]:&"脥I"
|
|
// 0040440D | FF4D BC | dec dword ptr ss:[ebp-44] | [ebp-44]:&"脥I"
|
|
_cd_CheckFW_CommunicationError.dwBack2Addr = 0x0040440D;
|
|
_cd_CheckFW_CommunicationError.dwBack2Addr = 0x0040440D;
|
|
_cd_CheckFW_CommunicationError.dwOriginalAddr = 0x00404408;
|
|
_cd_CheckFW_CommunicationError.dwOriginalAddr = 0x00404408;
|
|
- _cd_CheckFW_CommunicationError.dwOriginalCallAddr = 0x4CEA38;
|
|
|
|
|
|
+ _cd_CheckFW_CommunicationError.dwOriginalCallAddr = 0x004CEA38;
|
|
|
|
|
|
_cd_CheckFW_CommunicationError.nMyCallDataLen = JMP_DLEN;
|
|
_cd_CheckFW_CommunicationError.nMyCallDataLen = JMP_DLEN;
|
|
memset(_cd_CheckFW_CommunicationError.szMyCallData, 0x90, CALL_LEN);
|
|
memset(_cd_CheckFW_CommunicationError.szMyCallData, 0x90, CALL_LEN);
|
|
_cd_CheckFW_CommunicationError.szMyCallData[0] = 0xE9; // 汇编硬编码:jmp [4字节地址];
|
|
_cd_CheckFW_CommunicationError.szMyCallData[0] = 0xE9; // 汇编硬编码:jmp [4字节地址];
|
|
*(LPDWORD)(&_cd_CheckFW_CommunicationError.szMyCallData[1]) = (DWORD)_cd_CheckFW_CommunicationError.myCall - _cd_CheckFW_CommunicationError.dwOriginalAddr - JMP_DLEN;
|
|
*(LPDWORD)(&_cd_CheckFW_CommunicationError.szMyCallData[1]) = (DWORD)_cd_CheckFW_CommunicationError.myCall - _cd_CheckFW_CommunicationError.dwOriginalAddr - JMP_DLEN;
|
|
|
|
+#endif
|
|
#pragma endregion
|
|
#pragma endregion
|
|
}
|
|
}
|
|
|
|
|
|
@@ -213,8 +215,8 @@ namespace Assist
|
|
if ( !(bHijack = HijackedCall(&_cd_Go)) )
|
|
if ( !(bHijack = HijackedCall(&_cd_Go)) )
|
|
goto end;
|
|
goto end;
|
|
|
|
|
|
- if ( !(bHijack = HijackedCall(&_cd_Go_SN)) )
|
|
|
|
- goto end;
|
|
|
|
|
|
+ //if ( !(bHijack = HijackedCall(&_cd_Go_SN)) )
|
|
|
|
+ // goto end;
|
|
|
|
|
|
if ( !(bHijack = HijackedCall(&_cd_Go_CommunicationError)) )
|
|
if ( !(bHijack = HijackedCall(&_cd_Go_CommunicationError)) )
|
|
goto end;
|
|
goto end;
|
|
@@ -228,8 +230,9 @@ namespace Assist
|
|
if ( !(bHijack = HijackedCall(&_cd_CheckFW)) )
|
|
if ( !(bHijack = HijackedCall(&_cd_CheckFW)) )
|
|
goto end;
|
|
goto end;
|
|
|
|
|
|
- if ( !(bHijack = HijackedCall(&_cd_CheckFW_CommunicationError)) )
|
|
|
|
- goto end;
|
|
|
|
|
|
+ // _cd_CheckFW_CommunicationError与_cd_Go_CommunicationError一样,无须重复处理;
|
|
|
|
+ //if ( !(bHijack = HijackedCall(&_cd_CheckFW_CommunicationError)) )
|
|
|
|
+ // goto end;
|
|
|
|
|
|
end:
|
|
end:
|
|
Utility::dprintf(_T("HijackedCall<%s>. GLE=%d\n"), bHijack ? _T("True") : _T("False"), GetLastError() );
|
|
Utility::dprintf(_T("HijackedCall<%s>. GLE=%d\n"), bHijack ? _T("True") : _T("False"), GetLastError() );
|
|
@@ -248,8 +251,8 @@ end:
|
|
if ( !(bRestor = RecoveryCall(&_cd_Go)) )
|
|
if ( !(bRestor = RecoveryCall(&_cd_Go)) )
|
|
goto end;
|
|
goto end;
|
|
|
|
|
|
- if ( !(bRestor = RecoveryCall(&_cd_Go_SN)) )
|
|
|
|
- goto end;
|
|
|
|
|
|
+ //if ( !(bRestor = RecoveryCall(&_cd_Go_SN)) )
|
|
|
|
+ // goto end;
|
|
|
|
|
|
if ( !(bRestor = RecoveryCall(&_cd_Go_CommunicationError)) )
|
|
if ( !(bRestor = RecoveryCall(&_cd_Go_CommunicationError)) )
|
|
goto end;
|
|
goto end;
|
|
@@ -263,8 +266,8 @@ end:
|
|
if ( !(bRestor = RecoveryCall(&_cd_CheckFW)) )
|
|
if ( !(bRestor = RecoveryCall(&_cd_CheckFW)) )
|
|
goto end;
|
|
goto end;
|
|
|
|
|
|
- if ( !(bRestor = RecoveryCall(&_cd_CheckFW_CommunicationError)) )
|
|
|
|
- goto end;
|
|
|
|
|
|
+ //if ( !(bRestor = RecoveryCall(&_cd_CheckFW_CommunicationError)) )
|
|
|
|
+ // goto end;
|
|
|
|
|
|
end:
|
|
end:
|
|
return ( bHijacked = !bRestor );
|
|
return ( bHijacked = !bRestor );
|
|
@@ -455,7 +458,17 @@ namespace Assist
|
|
#ifdef _DEBUG
|
|
#ifdef _DEBUG
|
|
MessageBox(NULL, _T("MyGoSetCommunicationError"), _T("劫持"), MB_OK);
|
|
MessageBox(NULL, _T("MyGoSetCommunicationError"), _T("劫持"), MB_OK);
|
|
#endif
|
|
#endif
|
|
- // 向服务器发送消息;
|
|
|
|
|
|
+#pragma region 向服务器发送消息;
|
|
|
|
+ MSG_INFO msg;
|
|
|
|
+ msg.byResult = TRUE;
|
|
|
|
+ _stprintf((TCHAR*)msg.byData, _T("%s"), _T("OGCAssist Communication Error"));
|
|
|
|
+
|
|
|
|
+ DATAHEADER head;
|
|
|
|
+ head.byMsgType = C2S_COMMUNICATION_ERROR;
|
|
|
|
+ head.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
|
+
|
|
|
|
+ Utility::g_pPipeClient->SendPackage(head, msg);
|
|
|
|
+#pragma endregion
|
|
}
|
|
}
|
|
|
|
|
|
void __declspec(naked) Call_MyGoSetCommunicationError()
|
|
void __declspec(naked) Call_MyGoSetCommunicationError()
|
|
@@ -497,7 +510,17 @@ namespace Assist
|
|
#ifdef _DEBUG
|
|
#ifdef _DEBUG
|
|
MessageBox(NULL, _T("MyGoCommunicationError"), _T("劫持"), MB_OK);
|
|
MessageBox(NULL, _T("MyGoCommunicationError"), _T("劫持"), MB_OK);
|
|
#endif
|
|
#endif
|
|
- // 向服务器发送消息;
|
|
|
|
|
|
+#pragma region 向服务器发送消息;
|
|
|
|
+ MSG_INFO msg;
|
|
|
|
+ msg.byResult = TRUE;
|
|
|
|
+ _stprintf((TCHAR*)msg.byData, _T("%s"), _T("OGCAssist Communication Error"));
|
|
|
|
+
|
|
|
|
+ DATAHEADER head;
|
|
|
|
+ head.byMsgType = C2S_COMMUNICATION_ERROR;
|
|
|
|
+ head.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
|
+
|
|
|
|
+ Utility::g_pPipeClient->SendPackage(head, msg);
|
|
|
|
+#pragma endregion
|
|
}
|
|
}
|
|
|
|
|
|
void __declspec(naked) Call_MyGoCommunicationError()
|
|
void __declspec(naked) Call_MyGoCommunicationError()
|
|
@@ -554,7 +577,17 @@ namespace Assist
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
- // 向服务器发送消息;
|
|
|
|
|
|
+#pragma region 向服务器发送消息;
|
|
|
|
+ MSG_INFO msg;
|
|
|
|
+ msg.byResult = bConnectStatus;
|
|
|
|
+ _stprintf((TCHAR*)msg.byData, _T("%s"), _T("OGCAssist Connect"));
|
|
|
|
+
|
|
|
|
+ DATAHEADER head;
|
|
|
|
+ head.byMsgType = C2S_CONNECT;
|
|
|
|
+ head.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
|
+
|
|
|
|
+ Utility::g_pPipeClient->SendPackage(head, msg);
|
|
|
|
+#pragma endregion
|
|
|
|
|
|
return TRUE;
|
|
return TRUE;
|
|
}
|
|
}
|
|
@@ -594,6 +627,17 @@ namespace Assist
|
|
MessageBox(NULL, _T("MyExternalExceptionE06D7363,重启异常待重启"), _T("提示"), MB_OK);
|
|
MessageBox(NULL, _T("MyExternalExceptionE06D7363,重启异常待重启"), _T("提示"), MB_OK);
|
|
#endif
|
|
#endif
|
|
// 向服务器发送消息;
|
|
// 向服务器发送消息;
|
|
|
|
+#pragma region 向服务器发送消息;
|
|
|
|
+ MSG_INFO msg;
|
|
|
|
+ msg.byResult = TRUE;
|
|
|
|
+ _stprintf((TCHAR*)msg.byData, _T("%s"), _T("OGCAssist Exception"));
|
|
|
|
+
|
|
|
|
+ DATAHEADER head;
|
|
|
|
+ head.byMsgType = C2S_EXCEPTION; // 服务端要重置Connect及其他状态
|
|
|
|
+ head.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
|
+
|
|
|
|
+ Utility::g_pPipeClient->SendPackage(head, msg);
|
|
|
|
+#pragma endregion
|
|
::exit(0);
|
|
::exit(0);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -622,7 +666,17 @@ namespace Assist
|
|
#ifdef _DEBUG
|
|
#ifdef _DEBUG
|
|
MessageBox(NULL, _T("MyDisconnect Function"), _T("MyDisconnect"), MB_OK);
|
|
MessageBox(NULL, _T("MyDisconnect Function"), _T("MyDisconnect"), MB_OK);
|
|
#endif
|
|
#endif
|
|
- // 向服务器发送消息;
|
|
|
|
|
|
+#pragma region 向服务器发送消息;
|
|
|
|
+ MSG_INFO msg;
|
|
|
|
+ msg.byResult = TRUE;
|
|
|
|
+ _stprintf((TCHAR*)msg.byData, _T("%s"), _T("OGCAssist Disconnect"));
|
|
|
|
+
|
|
|
|
+ DATAHEADER head;
|
|
|
|
+ head.byMsgType = C2S_DISCONNECT;
|
|
|
|
+ head.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
|
+
|
|
|
|
+ Utility::g_pPipeClient->SendPackage(head, msg);
|
|
|
|
+#pragma endregion
|
|
}
|
|
}
|
|
|
|
|
|
void __declspec(naked) Call_MyDisconnect()
|
|
void __declspec(naked) Call_MyDisconnect()
|
|
@@ -637,13 +691,29 @@ namespace Assist
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- void __declspec(naked) Call_MyCheckFW()
|
|
|
|
|
|
+ void MyCheckFW()
|
|
{
|
|
{
|
|
- // 备份寄存器;
|
|
|
|
- __asm pushad;
|
|
|
|
#ifdef _DEBUG
|
|
#ifdef _DEBUG
|
|
MessageBox(NULL, _T("Call_MyCheckFW"), _T("MyCheckFW"), MB_OK);
|
|
MessageBox(NULL, _T("Call_MyCheckFW"), _T("MyCheckFW"), MB_OK);
|
|
#endif
|
|
#endif
|
|
|
|
+#pragma region 向服务器发送消息;
|
|
|
|
+ MSG_INFO msg;
|
|
|
|
+ msg.byResult = TRUE;
|
|
|
|
+ _stprintf((TCHAR*)msg.byData, _T("%s"), _T("OGCAssist CheckFW"));
|
|
|
|
+
|
|
|
|
+ DATAHEADER head;
|
|
|
|
+ head.byMsgType = C2S_CHECKFW;
|
|
|
|
+ head.dwPackageLen = sizeof(DATAHEADER) + sizeof(MSG_INFO);
|
|
|
|
+
|
|
|
|
+ Utility::g_pPipeClient->SendPackage(head, msg);
|
|
|
|
+#pragma endregion
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ void __declspec(naked) Call_MyCheckFW()
|
|
|
|
+ {
|
|
|
|
+ // 备份寄存器;
|
|
|
|
+ __asm pushad;
|
|
|
|
+ MyCheckFW();
|
|
__asm{
|
|
__asm{
|
|
// 恢复寄存器;
|
|
// 恢复寄存器;
|
|
popad;
|
|
popad;
|