diff --git a/.gitignore b/.gitignore index 884fe97..723a1ce 100644 --- a/.gitignore +++ b/.gitignore @@ -349,5 +349,6 @@ cygwin-build/**/*.lib cygwin-build/**/MAKING_* cygwin-build/**/distx* cygwin-build/**/*.stackdump +cygwin-build/**/*.bin win32_output/ include/function_pointers_configured.h \ No newline at end of file diff --git a/README.md b/README.md index 34b2ed9..1b036c2 100644 --- a/README.md +++ b/README.md @@ -140,11 +140,12 @@ programs). See "To-do and Known Issues". Perhaps solution based on - [X] ~~Add ".bat" etc. extension (PATHEXT) when SearchPath()~~ Fixed in 0.4 - [ ] ~~Fix 32-bit proxychains SearchPath(ssh) failure~~ (Windows Filesystem Redirection) - [X] ~~Dynamic selection of 32-bit DLL and 64-bit DLL~~ Fixed in 0.4 -- [ ] ~~Try to fix `proxychains git clone https://...` under Cygwin~~ Use `-q` in 0.4.1 - reduces the probability to happen +- [ ] ~~Try to fix `proxychains git clone https://...` under Cygwin~~ + Using `-q` in 0.4.1 reduces the probability to happen - [X] ~~Try to fix `proxychains npm install` in a huge project~~ (may be caused by excess usage of stack in GetAddrInfoW, turn off `proxy_dns` in 0.4 fixes this) +- [ ] Resolve race condition in `FormatHostPortToStr()` # Licensing diff --git a/cygwin-build/proxychains_remote_function_x64d.bin b/cygwin-build/proxychains_remote_function_x64d.bin deleted file mode 100644 index 668368e..0000000 Binary files a/cygwin-build/proxychains_remote_function_x64d.bin and /dev/null differ diff --git a/include/defines_generic.h b/include/defines_generic.h index 8a1fa8a..51c6a52 100644 --- a/include/defines_generic.h +++ b/include/defines_generic.h @@ -290,8 +290,8 @@ typedef struct _PXCH_HOSTS_ENTRY { #define PXCH_CONFIG_EXTRA_SIZE_G PXCH_CONFIG_EXTRA_SIZE(g_pPxchConfig) -#define PXCH_CONFIG_EXTRA_SIZE_BY_N(proxyNum, ruleNum, hostsEntryNum, remoteFuncX64SizeInBytes, remoteFuncX86SizeInBytes) ((sizeof(PXCH_RULE) * ruleNum) + (sizeof(PXCH_PROXY_DATA) * proxyNum) + (sizeof(PXCH_HOSTS_ENTRY) * hostsEntryNum) + remoteFuncX64SizeInBytes + remoteFuncX86SizeInBytes) -#define PXCH_CONFIG_EXTRA_SIZE(pPxchConfig) PXCH_CONFIG_EXTRA_SIZE_BY_N((pPxchConfig)->dwRuleNum, (pPxchConfig)->dwProxyNum, (pPxchConfig)->dwHostsEntryNum, (pPxchConfig)->cbRemoteFuncX64Size, (pPxchConfig)->cbRemoteFuncX86Size) +#define PXCH_CONFIG_EXTRA_SIZE_BY_N(proxyNum, ruleNum, hostsEntryNum, remoteFuncX64SizeInBytes, remoteFuncX86SizeInBytes) ((sizeof(PXCH_PROXY_DATA) * proxyNum) + (sizeof(PXCH_RULE) * ruleNum) + (sizeof(PXCH_HOSTS_ENTRY) * hostsEntryNum) + remoteFuncX64SizeInBytes + remoteFuncX86SizeInBytes) +#define PXCH_CONFIG_EXTRA_SIZE(pPxchConfig) PXCH_CONFIG_EXTRA_SIZE_BY_N((pPxchConfig)->dwProxyNum, (pPxchConfig)->dwRuleNum, (pPxchConfig)->dwHostsEntryNum, (pPxchConfig)->cbRemoteFuncX64Size, (pPxchConfig)->cbRemoteFuncX86Size) #define PXCH_CONFIG_PROXY_ARR(pPxchConfig) ((PXCH_PROXY_DATA*)((char*)(pPxchConfig) + pPxchConfig->cbProxyListOffset)) #define PXCH_CONFIG_RULE_ARR(pPxchConfig) ((PXCH_RULE*)((char*)(pPxchConfig) + pPxchConfig->cbRuleListOffset)) diff --git a/include/version.h b/include/version.h index 391d84a..ee773eb 100644 --- a/include/version.h +++ b/include/version.h @@ -23,5 +23,5 @@ #define PXCH_VERSION_MINOR 4 #endif #ifndef PXCH_VERSION_PATCH -#define PXCH_VERSION_PATCH 1 +#define PXCH_VERSION_PATCH 2 #endif \ No newline at end of file diff --git a/src/exe/args_and_config.c b/src/exe/args_and_config.c index bfde34f..9e484ac 100644 --- a/src/exe/args_and_config.c +++ b/src/exe/args_and_config.c @@ -466,8 +466,26 @@ void PrintConfiguration(PROXYCHAINS_CONFIG* pPxchConfig) default: pszTargetDesc = L"???"; break; } LOGD(L"DefaultTarget: %ls", pszTargetDesc); + LOGD(L"sizeof(PROXYCHAINS_CONFIG): %lu", (unsigned long)(sizeof(PROXYCHAINS_CONFIG))); LOGD(L""); - LOGD(L"[RuleList] " WPRDW L", Offset " WPRDW, pPxchConfig->dwRuleNum, pPxchConfig->cbRuleListOffset); + + LOGD(L"[ProxyList] Offset: " WPRDW L", sizeof(): " WPRDW L", Length: " WPRDW, pPxchConfig->cbProxyListOffset, (DWORD)(sizeof(PXCH_PROXY_DATA)), pPxchConfig->dwProxyNum); + arrProxy = PXCH_CONFIG_PROXY_ARR(pPxchConfig); + for (dw = 0; dw < pPxchConfig->dwProxyNum; dw++) { + switch (arrProxy[dw].dwTag) { + case PXCH_PROXY_TYPE_INVALID: pszTagDesc = L"INVALID"; break; + case PXCH_PROXY_TYPE_SOCKS5: pszTagDesc = L"SOCKS5"; break; + case PXCH_PROXY_TYPE_DIRECT: pszTagDesc = L"DIRECT"; break; + default: pszTagDesc = L"???"; break; + } + + if (ProxyIsType(SOCKS5, arrProxy[dw])) { + LOGD(L"[" WPRDW L"] <%ls> %ls(%d) " WPRS L" " WPRS L" %ls %ls", dw, pszTagDesc, FormatHostPortToStr(&arrProxy[dw].CommonHeader.HostPort, arrProxy[dw].CommonHeader.iAddrLen), arrProxy[dw].CommonHeader.iAddrLen, arrProxy[dw].CommonHeader.Ws2_32_ConnectFunctionName, arrProxy[dw].CommonHeader.Ws2_32_HandshakeFunctionName, arrProxy[dw].Socks5.szUsername, arrProxy[dw].Socks5.szPassword); + } + } + LOGD(L""); + + LOGD(L"[RuleList] Offset: " WPRDW L", sizeof(): " WPRDW L", Length: " WPRDW, pPxchConfig->cbRuleListOffset, (DWORD)(sizeof(PXCH_RULE)), pPxchConfig->dwRuleNum); arrRule = PXCH_CONFIG_RULE_ARR(pPxchConfig); for (dw = 0; dw < pPxchConfig->dwRuleNum; dw++) { switch (arrRule[dw].dwTag) { @@ -491,33 +509,17 @@ void PrintConfiguration(PROXYCHAINS_CONFIG* pPxchConfig) LOGD(L"[" WPRDW L"] <%ls> %ls/" WPRDW L" -> %ls", dw, pszTagDesc, FormatHostPortToStr(&arrRule[dw].HostPort, sizeof(PXCH_IP_ADDRESS)), arrRule[dw].dwCidrPrefixLength, pszTargetDesc); } LOGD(L""); - LOGD(L"[ProxyList] " WPRDW L", Offset " WPRDW, pPxchConfig->dwProxyNum, pPxchConfig->cbProxyListOffset); - arrProxy = PXCH_CONFIG_PROXY_ARR(pPxchConfig); - for (dw = 0; dw < pPxchConfig->dwProxyNum; dw++) { - switch (arrProxy[dw].dwTag) { - case PXCH_PROXY_TYPE_INVALID: pszTagDesc = L"INVALID"; break; - case PXCH_PROXY_TYPE_SOCKS5: pszTagDesc = L"SOCKS5"; break; - case PXCH_PROXY_TYPE_DIRECT: pszTagDesc = L"DIRECT"; break; - default: pszTagDesc = L"???"; break; - } - - switch (arrRule[dw].dwTarget) { - case PXCH_RULE_TARGET_BLOCK: pszTargetDesc = L"BLOCK"; break; - case PXCH_RULE_TARGET_DIRECT: pszTargetDesc = L"DIRECT"; break; - case PXCH_RULE_TARGET_PROXY: pszTargetDesc = L"PROXY"; break; - default: pszTargetDesc = L"???"; break; - } - - if (ProxyIsType(SOCKS5, arrProxy[dw])) { - LOGD(L"[" WPRDW L"] <%ls> %ls(%d) " WPRS L" " WPRS L" %ls %ls", dw, pszTagDesc, FormatHostPortToStr(&arrProxy[dw].CommonHeader.HostPort, arrProxy[dw].CommonHeader.iAddrLen), arrProxy[dw].CommonHeader.iAddrLen, arrProxy[dw].CommonHeader.Ws2_32_ConnectFunctionName, arrProxy[dw].CommonHeader.Ws2_32_HandshakeFunctionName, arrProxy[dw].Socks5.szUsername, arrProxy[dw].Socks5.szPassword); - } - } - LOGD(L""); - LOGD(L"[HostsEntry] " WPRDW L", Offset " WPRDW, pPxchConfig->dwHostsEntryNum, pPxchConfig->cbHostsEntryListOffset); + + LOGD(L"[HostsEntry] Offset: " WPRDW L", sizeof(): " WPRDW L", Length: " WPRDW, pPxchConfig->cbHostsEntryListOffset, (DWORD)(sizeof(PXCH_HOSTS_ENTRY)), pPxchConfig->dwHostsEntryNum); arrHostsEntry = PXCH_CONFIG_HOSTS_ENTRY_ARR(pPxchConfig); for (dw = 0; dw < pPxchConfig->dwHostsEntryNum; dw++) { LOGD(L"[" WPRDW L"] %ls %ls", dw, arrHostsEntry[dw].Hostname.szValue, FormatHostPortToStr(&arrHostsEntry[dw].Ip, sizeof(PXCH_IP_ADDRESS))); } + LOGD(L""); + + LOGD(L"RemoteFuncX64 Offset: " WPRDW L", Size: " WPRDW, pPxchConfig->cbRemoteFuncX64Offset, pPxchConfig->cbRemoteFuncX64Size); + LOGD(L"RemoteFuncX86 Offset: " WPRDW L", Size: " WPRDW, pPxchConfig->cbRemoteFuncX86Offset, pPxchConfig->cbRemoteFuncX86Size); + LOGD(L"PXCH_CONFIG_EXTRA_SIZE_G: " WPRDW, PXCH_CONFIG_EXTRA_SIZE_G); } DWORD LoadConfiguration(PROXYCHAINS_CONFIG** ppPxchConfig, PROXYCHAINS_CONFIG* pTempPxchConfig)