diff --git a/.gitignore b/.gitignore index b932c49cd21e47cfcc677738a629c0cbbf8d02bd..0b691d05733497faca9bcc9b683e9afe47db0155 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,26 @@ -/Debug -*.exp -*.pdb -*.lib -*/Debug/ -*/Release/ -*/SOCKET_Debug/ -*/SOCKET_Release/ -*/Win32/ -*/x64/ +build/ +Debug/ +!/Release +Release/ +SOCKET_Debug/ +SOCKET_Release/ +Win32/ +x64/ *.rar -/.vs/ -/x64 -*/obj/ -/wxRobot/bin/Debug/ -/wxRobot/bin/Release/*.pdb -*/__pycache__/ -packages +obj/ +packages/ + mongoose.c mongoose.h json.hpp +# py +__pycache__/ +# Visual Studio +.vs +*.exp +*.pdb +*.lib # VSCode .vscode # JetBrians IDE diff --git a/CWeChatRobot/WeChatRobotCOM.vcxproj b/CWeChatRobot/WeChatRobotCOM.vcxproj index 6eb1e11b501e7077e14d80646263c2c99745d13d..f0c6a3c0e54463571a4e6834827a0a1b65a54a88 100644 --- a/CWeChatRobot/WeChatRobotCOM.vcxproj +++ b/CWeChatRobot/WeChatRobotCOM.vcxproj @@ -71,6 +71,8 @@ true true + false + false true @@ -79,6 +81,7 @@ true false + true true @@ -114,6 +117,10 @@ Windows true + + + + @@ -177,6 +184,9 @@ true true + + xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\com\" + @@ -337,4 +347,4 @@ - \ No newline at end of file + diff --git a/ComWeChatRobot.sln b/ComWeChatRobot.sln index 0cfc740cb37b6c74316b121f26aeabaafffe5b42..c7ca181059bfc2533388b9fa344b611736697487 100644 --- a/ComWeChatRobot.sln +++ b/ComWeChatRobot.sln @@ -5,21 +5,8 @@ VisualStudioVersion = 16.0.31605.320 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CWeChatRobot", "CWeChatRobot\WeChatRobotCOM.vcxproj", "{F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatTools", "WeChatTools\WeChatTools.vcxproj", "{3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DWeChatRobot", "DWeChatRobot\DWeChatRobot.vcxproj", "{C0FC8DAB-0590-46AC-9270-6FEA45D52390}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wxRobot", "wxRobot", "{8E5B7B88-AB21-4B97-BAC1-956A35E33671}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{9533FA77-5AB8-473D-83D5-55E07137401E}" - ProjectSection(SolutionItems) = preProject - Python\wxRobot.py = Python\wxRobot.py - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSharp", "CSharp", "{4DE1F624-3F17-44E8-9B1F-28D88285D25F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "wxRobot", "wxRobot\wxRobot.csproj", "{10504CFA-6D19-4A97-8728-11BCE6C2499F}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxDriver", "wxDriver\wxDriver.vcxproj", "{B8740C2A-CBE7-4873-9669-E0DFEC4A3B8D}" EndProject Global @@ -60,28 +47,6 @@ Global {F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.SOCKET_Release|x64.Build.0 = Release|x64 {F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.SOCKET_Release|x86.ActiveCfg = Release|Win32 {F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.SOCKET_Release|x86.Build.0 = Release|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x64.ActiveCfg = Debug|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x64.Build.0 = Debug|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x86.ActiveCfg = Debug|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x86.Build.0 = Debug|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|Any CPU.ActiveCfg = Release|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x64.ActiveCfg = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x64.Build.0 = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x86.ActiveCfg = Release|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x86.Build.0 = Release|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|Any CPU.ActiveCfg = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|Any CPU.Build.0 = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|x64.ActiveCfg = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|x64.Build.0 = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|x86.ActiveCfg = Release|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|x86.Build.0 = Release|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|Any CPU.ActiveCfg = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|Any CPU.Build.0 = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|x64.ActiveCfg = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|x64.Build.0 = Release|x64 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|x86.ActiveCfg = Release|Win32 - {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|x86.Build.0 = Release|Win32 {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|Any CPU.ActiveCfg = Debug|Win32 {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|x64.ActiveCfg = Debug|x64 {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|x64.Build.0 = Debug|x64 @@ -102,30 +67,6 @@ Global {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.SOCKET_Release|x64.Build.0 = SOCKET_Release|x64 {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.SOCKET_Release|x86.ActiveCfg = SOCKET_Release|Win32 {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.SOCKET_Release|x86.Build.0 = SOCKET_Release|Win32 - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|x64.ActiveCfg = Debug|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|x64.Build.0 = Debug|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|x86.ActiveCfg = Debug|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|x86.Build.0 = Debug|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|Any CPU.Build.0 = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|x64.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|x64.Build.0 = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|x86.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|x86.Build.0 = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|Any CPU.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|Any CPU.Build.0 = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|x64.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|x64.Build.0 = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|x86.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|x86.Build.0 = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|Any CPU.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|Any CPU.Build.0 = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|x64.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|x64.Build.0 = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|x86.ActiveCfg = Release|Any CPU - {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|x86.Build.0 = Release|Any CPU {B8740C2A-CBE7-4873-9669-E0DFEC4A3B8D}.Debug|Any CPU.ActiveCfg = Debug|Win32 {B8740C2A-CBE7-4873-9669-E0DFEC4A3B8D}.Debug|x64.ActiveCfg = Debug|x64 {B8740C2A-CBE7-4873-9669-E0DFEC4A3B8D}.Debug|x64.Build.0 = Debug|x64 @@ -152,11 +93,6 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {9533FA77-5AB8-473D-83D5-55E07137401E} = {8E5B7B88-AB21-4B97-BAC1-956A35E33671} - {4DE1F624-3F17-44E8-9B1F-28D88285D25F} = {8E5B7B88-AB21-4B97-BAC1-956A35E33671} - {10504CFA-6D19-4A97-8728-11BCE6C2499F} = {4DE1F624-3F17-44E8-9B1F-28D88285D25F} - EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {20BD2B3B-13AA-4C38-8216-127895041F93} EndGlobalSection diff --git a/DWeChatRobot/DWeChatRobot.vcxproj b/DWeChatRobot/DWeChatRobot.vcxproj index 287ff4a00c8f225b7c62c7cf9186b601e92d845d..8e2b58bdb6ffdf98b3a112faa57aa762bbdb9ebe 100644 --- a/DWeChatRobot/DWeChatRobot.vcxproj +++ b/DWeChatRobot/DWeChatRobot.vcxproj @@ -140,12 +140,14 @@ false $(ProjectName) + true false SWeChatRobot $(Configuration)\ $(SolutionDir)Release\socket\ + true true @@ -208,6 +210,10 @@ true false + + xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\com\" +xcopy /y /d "$(OutDir)..\Python\com\wxRobot.py" "$(SolutionDir)build\com\" + @@ -228,6 +234,10 @@ true false + + xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\http\" +xcopy /y /d "$(OutDir)..\..\Python\http\wxDriver.py" "$(SolutionDir)build\http\" + diff --git a/DWeChatRobot/ReceiveMessage.cpp b/DWeChatRobot/ReceiveMessage.cpp index 75d1f06a6343b55a388f69a5ac0ab114d0770207..8619442410da894067dc66a2ea2560be01dc1fd4 100644 --- a/DWeChatRobot/ReceiveMessage.cpp +++ b/DWeChatRobot/ReceiveMessage.cpp @@ -142,7 +142,7 @@ static void dealMessage(DWORD messageAddr) string jstr = jMsg.dump() + '\n'; #ifdef USE_COM // 通过连接点,将消息广播给客户端 - VARIANT vsaValue = (_variant_t)jstr.c_str(); + VARIANT vsaValue = (_variant_t)utf8_to_unicode(jstr.c_str()).c_str(); PostComMessage(jMsg["pid"].get(), WX_MESSAGE, msgid, &vsaValue); #endif // 为保证线程安全,需要手动管理内存 diff --git a/Python/requirements.txt b/Python/com/requirements.txt similarity index 54% rename from Python/requirements.txt rename to Python/com/requirements.txt index 2857e849a83a6db14a46f6f568f30e2a8926eb27..2113b7a363325c80d45b4bc7cb5bf11a5a0928a1 100644 --- a/Python/requirements.txt +++ b/Python/com/requirements.txt @@ -1,2 +1,2 @@ -comtypes==1.1.11 -psutil==5.9.0 \ No newline at end of file +comtypes==1.1.11 +psutil==5.9.0 diff --git a/Python/test.py b/Python/com/test.py similarity index 100% rename from Python/test.py rename to Python/com/test.py diff --git "a/Python/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" "b/Python/com/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" similarity index 100% rename from "Python/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" rename to "Python/com/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" diff --git "a/Python/test/\346\265\213\350\257\225\346\226\207\344\273\266" "b/Python/com/test/\346\265\213\350\257\225\346\226\207\344\273\266" similarity index 100% rename from "Python/test/\346\265\213\350\257\225\346\226\207\344\273\266" rename to "Python/com/test/\346\265\213\350\257\225\346\226\207\344\273\266" diff --git a/Python/wxRobot.py b/Python/com/wxRobot.py similarity index 100% rename from Python/wxRobot.py rename to Python/com/wxRobot.py diff --git a/Python/http/wxDriver.py b/Python/http/wxDriver.py new file mode 100644 index 0000000000000000000000000000000000000000..b65ca66f71994906ac0486a90036e27cf594f899 --- /dev/null +++ b/Python/http/wxDriver.py @@ -0,0 +1,306 @@ +import ctypes +import json +import copy +import threading +import requests +import base64 +import socketserver + +if ctypes.sizeof(ctypes.c_void_p) == ctypes.sizeof(ctypes.c_ulonglong): + driver = ctypes.cdll.LoadLibrary('./wxDriver64.dll') +else: + driver = ctypes.cdll.LoadLibrary('./wxDriver.dll') + +new_wechat = driver.new_wechat +new_wechat.argtypes = None +new_wechat.restype = ctypes.c_int + +start_listen = driver.start_listen +start_listen.argtypes = [ctypes.c_int,ctypes.c_int] +start_listen.restype = ctypes.c_int + +stop_listen = driver.stop_listen +stop_listen.argtypes = [ctypes.c_int] +stop_listen.restype = ctypes.c_int + +class WECHAT_HTTP_APIS: + # login check + WECHAT_IS_LOGIN = 0 # 鐧诲綍妫鏌 + + # self info + WECHAT_GET_SELF_INFO = 1 # 鑾峰彇涓汉淇℃伅 + + # send message + WECHAT_MSG_SEND_TEXT = 2 # 鍙戦佹枃鏈 + WECHAT_MSG_SEND_AT = 3 # 鍙戦佺兢鑹剧壒 + WECHAT_MSG_SEND_CARD = 4 # 鍒嗕韩濂藉弸鍚嶇墖 + WECHAT_MSG_SEND_IMAGE = 5 # 鍙戦佸浘鐗 + WECHAT_MSG_SEND_FILE = 6 # 鍙戦佹枃浠 + WECHAT_MSG_SEND_ARTICLE = 7 # 鍙戦亁ml鏂囩珷 + WECHAT_MSG_SEND_APP = 8 # 鍙戦佸皬绋嬪簭 + + # receive message + WECHAT_MSG_START_HOOK = 9 # 寮鍚帴鏀舵秷鎭疕OOK锛屽彧鏀寔socket鐩戝惉 + WECHAT_MSG_STOP_HOOK = 10 # 鍏抽棴鎺ユ敹娑堟伅HOOK + WECHAT_MSG_START_IMAGE_HOOK = 11 # 寮鍚浘鐗囨秷鎭疕OOK + WECHAT_MSG_STOP_IMAGE_HOOK = 12 # 鍏抽棴鍥剧墖娑堟伅HOOK + WECHAT_MSG_START_VOICE_HOOK = 13 # 寮鍚闊虫秷鎭疕OOK + WECHAT_MSG_STOP_VOICE_HOOK = 14 # 鍏抽棴璇煶娑堟伅HOOK + + # contact + WECHAT_CONTACT_GET_LIST = 15 # 鑾峰彇鑱旂郴浜哄垪琛 + WECHAT_CONTACT_CHECK_STATUS = 16 # 妫鏌ユ槸鍚﹁濂藉弸鍒犻櫎 + WECHAT_CONTACT_DEL = 17 # 鍒犻櫎濂藉弸 + WECHAT_CONTACT_SEARCH_BY_CACHE = 18 # 浠庡唴瀛樹腑鑾峰彇濂藉弸淇℃伅 + WECHAT_CONTACT_SEARCH_BY_NET = 19 # 缃戠粶鎼滅储鐢ㄦ埛淇℃伅 + WECHAT_CONTACT_ADD_BY_WXID = 20 # wxid鍔犲ソ鍙 + WECHAT_CONTACT_ADD_BY_V3 = 21 # v3鏁版嵁鍔犲ソ鍙 + WECHAT_CONTACT_ADD_BY_PUBLIC_ID = 22 # 鍏虫敞鍏紬鍙 + WECHAT_CONTACT_VERIFY_APPLY = 23 # 閫氳繃濂藉弸璇锋眰 + WECHAT_CONTACT_EDIT_REMARK = 24 # 淇敼澶囨敞 + + # chatroom + WECHAT_CHATROOM_GET_MEMBER_LIST = 25 # 鑾峰彇缇ゆ垚鍛樺垪琛 + WECHAT_CHATROOM_GET_MEMBER_NICKNAME = 26 # 鑾峰彇鎸囧畾缇ゆ垚鍛樻樀绉 + WECHAT_CHATROOM_DEL_MEMBER = 27 # 鍒犻櫎缇ゆ垚鍛 + WECHAT_CHATROOM_ADD_MEMBER = 28 # 娣诲姞缇ゆ垚鍛 + WECHAT_CHATROOM_SET_ANNOUNCEMENT = 29 # 璁剧疆缇ゅ叕鍛 + WECHAT_CHATROOM_SET_CHATROOM_NAME = 30 # 璁剧疆缇よ亰鍚嶇О + WECHAT_CHATROOM_SET_SELF_NICKNAME = 31 # 璁剧疆缇ゅ唴涓汉鏄电О + + # database + WECHAT_DATABASE_GET_HANDLES = 32 # 鑾峰彇鏁版嵁搴撳彞鏌 + WECHAT_DATABASE_BACKUP = 33 # 澶囦唤鏁版嵁搴 + WECHAT_DATABASE_QUERY = 34 # 鏁版嵁搴撴煡璇 + + # version + WECHAT_SET_VERSION = 35 # 淇敼寰俊鐗堟湰鍙 + + # log + WECHAT_LOG_START_HOOK = 36 # 寮鍚棩蹇椾俊鎭疕OOK + WECHAT_LOG_STOP_HOOK = 37 # 鍏抽棴鏃ュ織淇℃伅HOOK + +APIS = WECHAT_HTTP_APIS + +# http api 鍙傛暟妯℃澘 +class WECHAT_HTTP_API_PARAM_TEMPLATES: + __HTTP_API_PARAM_TEMPLATE = { + # login check + APIS.WECHAT_IS_LOGIN: {}, + + + # self info + APIS.WECHAT_GET_SELF_INFO: {}, + + + # send message + APIS.WECHAT_MSG_SEND_TEXT: {"wxid": "", + "msg": ""}, + # wxids闇瑕佷互`,`鍒嗛殧锛屼緥濡俙wxid1,wxid2,wxid3` + APIS.WECHAT_MSG_SEND_AT: {"chatroom_id":"", + "wxids": "", + "msg": "", + "auto_nickname": 1}, + APIS.WECHAT_MSG_SEND_CARD: {"receiver":"", + "shared_wxid":"", + "nickname":""}, + APIS.WECHAT_MSG_SEND_IMAGE: {"receiver":"", + "img_path":""}, + APIS.WECHAT_MSG_SEND_FILE: {"receiver":"", + "file_path":""}, + APIS.WECHAT_MSG_SEND_ARTICLE: {"wxid":"", + "title":"", + "abstract":"", + "url":"", + "img_path":""}, + APIS.WECHAT_MSG_SEND_APP: {"wxid":"", + "appid":""}, + + + # receive message + APIS.WECHAT_MSG_START_HOOK: {"port": 10808}, + APIS.WECHAT_MSG_STOP_HOOK: {}, + APIS.WECHAT_MSG_START_IMAGE_HOOK: {"save_path":""}, + APIS.WECHAT_MSG_STOP_IMAGE_HOOK: {}, + APIS.WECHAT_MSG_START_VOICE_HOOK: {"save_path":""}, + APIS.WECHAT_MSG_STOP_VOICE_HOOK: {}, + + + # contact + APIS.WECHAT_CONTACT_GET_LIST: {}, + APIS.WECHAT_CONTACT_CHECK_STATUS: {"wxid":""}, + APIS.WECHAT_CONTACT_DEL: {"wxid":""}, + APIS.WECHAT_CONTACT_SEARCH_BY_CACHE: {"wxid":""}, + APIS.WECHAT_CONTACT_SEARCH_BY_NET: {"keyword":""}, + APIS.WECHAT_CONTACT_ADD_BY_WXID: {"wxid":"", + "msg":""}, + APIS.WECHAT_CONTACT_ADD_BY_V3: {"v3":"", + "msg":"", + "add_type": 0x6}, + APIS.WECHAT_CONTACT_ADD_BY_PUBLIC_ID: {"public_id":""}, + APIS.WECHAT_CONTACT_VERIFY_APPLY: {"v3":"", + "v4":""}, + APIS.WECHAT_CONTACT_EDIT_REMARK: {"wxid":"", + "remark":""}, + + + # chatroom + APIS.WECHAT_CHATROOM_GET_MEMBER_LIST: {"chatroom_id":""}, + APIS.WECHAT_CHATROOM_GET_MEMBER_NICKNAME: {"chatroom_id":"", + "wxid":""}, + # wxids闇瑕佷互`,`鍒嗛殧锛屼緥濡俙wxid1,wxid2,wxid3` + APIS.WECHAT_CHATROOM_DEL_MEMBER: {"chatroom_id":"", + "wxids":""}, + # wxids闇瑕佷互`,`鍒嗛殧锛屼緥濡俙wxid1,wxid2,wxid3` + APIS.WECHAT_CHATROOM_ADD_MEMBER: {"chatroom_id":"", + "wxids":""}, + APIS.WECHAT_CHATROOM_SET_ANNOUNCEMENT: {"chatroom_id":"", + "announcement":""}, + APIS.WECHAT_CHATROOM_SET_CHATROOM_NAME: {"chatroom_id":"", + "chatroom_name":""}, + APIS.WECHAT_CHATROOM_SET_SELF_NICKNAME: {"chatroom_id":"", + "nickname":""}, + + + # database + APIS.WECHAT_DATABASE_GET_HANDLES: {}, + APIS.WECHAT_DATABASE_BACKUP: {"db_handle":0, + "save_path":""}, + APIS.WECHAT_DATABASE_QUERY: {"db_handle":0, + "sql":""}, + + + # version + APIS.WECHAT_SET_VERSION: {"version": "3.7.0.30"}, + + + # log + APIS.WECHAT_LOG_START_HOOK: {}, + APIS.WECHAT_LOG_STOP_HOOK: {}, + } + + def get_http_template(self, api_number): + try: + return copy.deepcopy(self.__HTTP_API_PARAM_TEMPLATE[api_number]) + except KeyError: + raise ValueError("There is no interface numbered %s." % api_number) + +get_http_template = WECHAT_HTTP_API_PARAM_TEMPLATES().get_http_template + +class ReceiveMsgSocketServer(socketserver.BaseRequestHandler): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def handle(self): + conn = self.request + while True: + try: + ptr_data = b"" + while True: + data = conn.recv(1024) + ptr_data += data + if len(data) == 0 or data[-1] == 0xA: + break + msg = json.loads(ptr_data.decode('utf-8')) + ReceiveMsgSocketServer.msg_callback(msg) + except OSError: + break + except json.JSONDecodeError: + pass + conn.sendall("200 OK".encode()) + conn.close() + + @staticmethod + def msg_callback(msg): + # 闄勫姞淇℃伅鏄痯rotobuf鏍煎紡锛岄渶瑕佽嚜琛屽鐞 + msg['extrainfo'] = base64.b64decode(msg['extrainfo']) + # TODO: 鍦ㄨ繖閲屽啓棰濆鐨勬秷鎭鐞嗛昏緫 + + print(msg) + +def post_wechat_http_api(api,port,data = {}): + url = "http://127.0.0.1:{}/api/?type={}".format(port,api) + resp = requests.post(url = url,data = json.dumps(data)) + return resp.json() + +def get_wechat_http_api(api,port,data = {}): + url = "http://127.0.0.1:{}/api/?type={}".format(port,api) + resp = requests.get(url = url,params = data) + return resp.json() + +def get_wechat_pid_list() -> list: + import psutil + pid_list = [] + process_list = psutil.pids() + for pid in process_list: + try: + if psutil.Process(pid).name() == 'WeChat.exe': + pid_list.append(pid) + except psutil.NoSuchProcess: + pass + return pid_list + +def start_socket_server(port: int = 10808, + request_handler = ReceiveMsgSocketServer, + main_thread: bool = True) -> int or None: + ip_port = ("127.0.0.1", port) + try: + s = socketserver.ThreadingTCPServer(ip_port, request_handler) + if main_thread: + s.serve_forever() + else: + socket_server = threading.Thread(target=s.serve_forever) + socket_server.setDaemon(True) + socket_server.start() + return socket_server.ident + except KeyboardInterrupt: + pass + except Exception as e: + print(e) + return None + +def test(test_port): + post_wechat_http_api(APIS.WECHAT_LOG_START_HOOK,port = test_port) + if post_wechat_http_api(APIS.WECHAT_IS_LOGIN,port = test_port)["is_login"] == 1: + print(post_wechat_http_api(APIS.WECHAT_GET_SELF_INFO,port = test_port)) + + data = {"wxid":"filehelper","msg":"hello http"} + post_wechat_http_api(APIS.WECHAT_MSG_SEND_TEXT,data = data,port = test_port) + + data = {"receiver":'filehelper',"shared_wxid":"filehelper","nickname":"鏂囦欢浼犺緭鍔╂墜"} + post_wechat_http_api(APIS.WECHAT_MSG_SEND_CARD,data = data,port = test_port) + + data = {"receiver":'filehelper',"img_path":r"D:\VS2019C++\MyWeChatRobot\test\娴嬭瘯鍥剧墖.png"} + post_wechat_http_api(APIS.WECHAT_MSG_SEND_IMAGE,data = data,port = test_port) + + data = {"receiver":'filehelper',"file_path":r"D:\VS2019C++\MyWeChatRobot\test\娴嬭瘯鏂囦欢"} + post_wechat_http_api(APIS.WECHAT_MSG_SEND_FILE,data = data,port = test_port) + + data = {"wxid":'filehelper', + "title":"鐧惧害", + "abstract":"鐧惧害涓涓嬶紝浣犲氨鐭ラ亾", + "url":"https://www.baidu.com/", + "img_path":""} + post_wechat_http_api(APIS.WECHAT_MSG_SEND_ARTICLE,data = data,port = test_port) + + print(post_wechat_http_api(APIS.WECHAT_CONTACT_GET_LIST,port = test_port)) + data = {"wxid":"filehelper"} + print(post_wechat_http_api(APIS.WECHAT_CONTACT_CHECK_STATUS,data = data,port = test_port)) + dbs = post_wechat_http_api(APIS.WECHAT_DATABASE_GET_HANDLES,port = test_port) + db_handle = dbs['data'][0]['handle'] + sql = "select * from Contact limit 1;" + data = {"db_handle":db_handle,"sql":sql} + res = post_wechat_http_api(APIS.WECHAT_DATABASE_QUERY,data = data,port = test_port) + print(res) + post_wechat_http_api(APIS.WECHAT_LOG_STOP_HOOK,port = test_port) + +if __name__ == '__main__': + port = 8000 + pids = get_wechat_pid_list() + if len(pids) == 0: + pids.append(new_wechat()) + start_listen(pids[0],port) + post_wechat_http_api(APIS.WECHAT_LOG_START_HOOK,8000) + post_wechat_http_api(APIS.WECHAT_MSG_START_HOOK,8000,{"port":10808}) + start_socket_server() + stop_listen(pids[0]) diff --git a/README.md b/README.md index 6635bedb98d35175fc060e4140cff3879187a311..430e4ac9a946206044e7fcd8322d93c086533610 100644 --- a/README.md +++ b/README.md @@ -32,14 +32,14 @@ PC寰俊鏈哄櫒浜猴紝瀹炵幇浠ヤ笅鍔熻兘锛 # 鐩綍璇存槑 `./CWeChatRobot`锛欳OM缁勪欢鐨勫疄鐜颁唬鐮 `./DWeChatRobot`锛氭敞鍏ョ殑DLL瀹炵幇浠g爜锛屾牴鎹钩鍙伴厤缃彲缂栬瘧鍑簊ocket鐗堝拰COM鐗 -`./wxRobot`: 鍖呭惈C#鐨勮皟鐢ㄧず渚 +`./old_projects`: 鍖呭惈C#鐨勮皟鐢ㄧず渚嬩互鍙3.7.0.26鐗堟湰鐨凟璇█璋冪敤 `./Python`锛歱ython绀轰緥鍜屾帴鍙f祴璇曟枃浠 `./wxDriver`锛歞river鐨勫疄鐜颁唬鐮侊紝鏈変簺鍑芥暟鍏锋湁涓瀹氱殑瀛︿範鎰忎箟 `./Release/CWeChatRobot.exe`锛氱紪璇戠殑COM缁勪欢 `./Release/DWeChatRobot.dll`锛氱紪璇戠殑DLL鏂囦欢 `./Release/socket`锛氬寘鍚玾xDriver.dll鍜宻ocket鎺ュ彛鐨凞LL `./Release/WeChatTools.exe`锛氱敤浜庤皟璇曟椂娉ㄥ叆鎴栧嵏杞紻LL绋嬪簭锛屽叿浣撳弬闃呯浉鍏充唬鐮 -# 娉ㄥ唽COM +# 蹇熷惎鍔 浠ョ鐞嗗憳鏉冮檺鎵ц浠ヤ笅鍛戒护锛 ```shell # 瀹夎 @@ -49,11 +49,11 @@ CWeChatRobot.exe /unregserver ``` # 璋冪敤 **Python锛** -鍙傝僛wxRobot.py](/Python/wxRobot.py) +鍙傝僛wxRobot.py](/Python/com/wxRobot.py) **C#锛** 鍙傝僛ComWechatRobotCsharp](https://github.com/RingoStudio/ComWechatRobotCsharp)锛屾劅璋RingoStudio 鐨勮础鐚 **鏄撹瑷锛** -鍙傝僛ESDK](/ESDK)锛屾劅璋lovezm 鐨勮础鐚 +鍙傝僛ESDK](/old_projects/ESDK)锛屾劅璋lovezm 鐨勮础鐚 # 鏇村鍔熻兘 1. 灏濊瘯娣诲姞issue涓殑鍔熻兘 @@ -118,11 +118,11 @@ CWeChatRobot.exe /unregserver 2. 閲嶆瀯COM涓殑閮ㄥ垎瀹炵幇 ## 2022.08.13 1. 鐜板湪娑堟伅HOOK鍐呭鍖呭惈娑堟伅ID -2. 瀹屾垚鍙戦佹秷鎭殑http鎺ュ彛锛屽彲鍙傝僛wxDriver.py](/Release/socket/wxDriver.py)锛屽叾浠栨帴鍙h繕闇瑕佷竴鐐规椂闂 +2. 瀹屾垚鍙戦佹秷鎭殑http鎺ュ彛锛屽彲鍙傝僛wxDriver.py](/Python/http/wxDriver.py)锛屽叾浠栨帴鍙h繕闇瑕佷竴鐐规椂闂 3. 鏂板椤圭洰閰嶇疆鏂囦欢锛屾劅璋amchii 鎻愪緵鐨勬柟娉 ## 2022.08.21 1. 鎵鏈夊姛鑳絟ttp鎺ュ彛灏佽瀹屾垚锛屽彲鎺ュ彈get銆乸ost璇锋眰 -2. 鎻愪緵http鎺ュ彛璋冪敤绀轰緥锛屽弬鑰僛wxDriver.py](/Release/socket/wxDriver.py) +2. 鎻愪緵http鎺ュ彛璋冪敤绀轰緥锛屽弬鑰僛wxDriver.py](/Python/http/wxDriver.py) ## 2022.08.25 1. 鎺ユ敹娑堟伅鏍煎紡淇敼涓簀son锛岀幇鍦ㄤ篃鍙互鑾峰彇鍒版墿灞曚俊鎭紝鍙粠鎵╁睍淇℃伅涓幏鍙栧埌鏂囦欢淇濆瓨璺緞鎴栬鑹剧壒浜簑xid 2. 浼樺寲鑾峰彇涓汉淇℃伅锛岃幏鍙栧ソ鍙嬩俊鎭帴鍙 diff --git a/Release/CWeChatRobot.exe b/Release/CWeChatRobot.exe index e628e019752e9872a4e492f26ca6c7eda94ff1b5..c2c78b3884ab0400dd46ac1053e1dbae1b9fcca5 100644 Binary files a/Release/CWeChatRobot.exe and b/Release/CWeChatRobot.exe differ diff --git a/Release/DWeChatRobot.dll b/Release/DWeChatRobot.dll index fa807ed9f92ba66df2c8b04ffaeef72be9a27f7a..17de4284dcc6e8f12e30648560e8453c0a02ea85 100644 Binary files a/Release/DWeChatRobot.dll and b/Release/DWeChatRobot.dll differ diff --git a/Release/socket/SWeChatRobot.dll b/Release/socket/SWeChatRobot.dll index 895c2238b75ed246bb11e26f9fad3574cdf0bd3a..7c59fd54a612b0cc28f643f5105f27b6f3c75c48 100644 Binary files a/Release/socket/SWeChatRobot.dll and b/Release/socket/SWeChatRobot.dll differ diff --git a/Release/socket/wxDriver.dll b/Release/socket/wxDriver.dll index 7dad9332b465ffd825d6f49fc64ba431d9844338..200967164952f0339cf4800293533adf539354ff 100644 Binary files a/Release/socket/wxDriver.dll and b/Release/socket/wxDriver.dll differ diff --git a/Release/socket/wxDriver64.dll b/Release/socket/wxDriver64.dll index c1fe9d73a2d0505b80c622afa5e506c4c1581928..f1650adab76b7f9eb7bbcaa50a24d573b610d409 100644 Binary files a/Release/socket/wxDriver64.dll and b/Release/socket/wxDriver64.dll differ diff --git a/WeChatTools/main.h b/WeChatTools/main.h deleted file mode 100644 index 7b5dfc1e5fdfcdb0f032aa8c0ea069fa036da4e1..0000000000000000000000000000000000000000 --- a/WeChatTools/main.h +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -#include "base.h" \ No newline at end of file diff --git "a/ESDK/HOOK\347\233\221\345\220\254.e" "b/old_projects/ESDK/HOOK\347\233\221\345\220\254.e" similarity index 100% rename from "ESDK/HOOK\347\233\221\345\220\254.e" rename to "old_projects/ESDK/HOOK\347\233\221\345\220\254.e" diff --git a/ESDK/HPSocket4C.dll b/old_projects/ESDK/HPSocket4C.dll similarity index 100% rename from ESDK/HPSocket4C.dll rename to old_projects/ESDK/HPSocket4C.dll diff --git a/ESDK/HP_Socket.ec b/old_projects/ESDK/HP_Socket.ec similarity index 100% rename from ESDK/HP_Socket.ec rename to old_projects/ESDK/HP_Socket.ec diff --git "a/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.e" "b/old_projects/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.e" similarity index 100% rename from "ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.e" rename to "old_projects/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.e" diff --git "a/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.ec" "b/old_projects/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.ec" similarity index 100% rename from "ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.ec" rename to "old_projects/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.ec" diff --git "a/ESDK/VX3.7.0.30\346\250\241\345\235\227_\350\277\234\347\250\213\347\272\277\347\250\213\350\260\203\347\224\250.e" "b/old_projects/ESDK/VX3.7.0.30\346\250\241\345\235\227_\350\277\234\347\250\213\347\272\277\347\250\213\350\260\203\347\224\250.e" similarity index 100% rename from "ESDK/VX3.7.0.30\346\250\241\345\235\227_\350\277\234\347\250\213\347\272\277\347\250\213\350\260\203\347\224\250.e" rename to "old_projects/ESDK/VX3.7.0.30\346\250\241\345\235\227_\350\277\234\347\250\213\347\272\277\347\250\213\350\260\203\347\224\250.e" diff --git "a/ESDK/VX3.7.0.30\346\250\241\345\235\227\350\260\203\347\224\250\344\276\213\347\250\213.e" "b/old_projects/ESDK/VX3.7.0.30\346\250\241\345\235\227\350\260\203\347\224\250\344\276\213\347\250\213.e" similarity index 100% rename from "ESDK/VX3.7.0.30\346\250\241\345\235\227\350\260\203\347\224\250\344\276\213\347\250\213.e" rename to "old_projects/ESDK/VX3.7.0.30\346\250\241\345\235\227\350\260\203\347\224\250\344\276\213\347\250\213.e" diff --git a/ESDK/test.e b/old_projects/ESDK/test.e similarity index 100% rename from ESDK/test.e rename to old_projects/ESDK/test.e diff --git a/WeChatTools/Inject.cpp b/old_projects/WeChatTools/Inject.cpp similarity index 82% rename from WeChatTools/Inject.cpp rename to old_projects/WeChatTools/Inject.cpp index 85e0f42d07416c1b510a2515275a2a1748d2fa69..062cc692d48cabb77a9b1f1f3046a15f7a90cc39 100644 --- a/WeChatTools/Inject.cpp +++ b/old_projects/WeChatTools/Inject.cpp @@ -1,7 +1,8 @@ #include "base.h" HANDLE hProcess = NULL; -bool isFileExists_stat(string& name) { +bool isFileExists_stat(string &name) +{ struct stat buffer; return (stat(name.c_str(), &buffer) == 0); } @@ -9,23 +10,24 @@ bool isFileExists_stat(string& name) { string wstring2string(wstring wstr) { std::string result; - //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 + //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL); - char* buffer = new char[len + 1]; - //宽字节编码转换成多字节编码 + char *buffer = new char[len + 1]; + //宽字节编码转换成多字节编码 WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL); buffer[len] = '\0'; - //删除缓冲区并返回值 + //删除缓冲区并返回值 result.append(buffer); delete[] buffer; return result; } -bool InjectDll(DWORD dwId, WCHAR* szPath)//参数1:目标进程PID 参数2:DLL路径 +bool InjectDll(DWORD dwId, WCHAR *szPath) //参数1:目标进程PID 参数2:DLL路径 { if (!hProcess) return 1; - if (GetWeChatRobotBase() != 0) { + if (GetWeChatRobotBase() != 0) + { printf("请勿重复注入\n"); return 1; } @@ -44,17 +46,20 @@ bool InjectDll(DWORD dwId, WCHAR* szPath)// { WriteProcessMemory(hProcess, pRemoteAddress, szPath, wcslen(szPath) * 2 + 2, &dwWriteSize); } - else { + else + { printf("写入失败!\n"); return 1; } //三、 创建一个远程线程,让目标进程调用LoadLibrary HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, pRemoteAddress, NULL, NULL); - if (hThread) { - WaitForSingleObject(hThread, -1); + if (hThread) + { + WaitForSingleObject(hThread, -1); } - else { + else + { printf("调用失败!\n"); return 1; } @@ -64,13 +69,15 @@ bool InjectDll(DWORD dwId, WCHAR* szPath)// return 0; } -void Inject(DWORD dwPid, wchar_t* wStr) { +void Inject(DWORD dwPid, wchar_t *wStr) +{ wchar_t dllpath[MAX_PATH]; wchar_t workPath[MAX_PATH]; - wchar_t* pworkPath = _wgetcwd(workPath, MAX_PATH); + wchar_t *pworkPath = _wgetcwd(workPath, MAX_PATH); swprintf_s(dllpath, MAX_PATH, L"%ws%ws%ws", pworkPath, L"\\", wStr); string name = wstring2string((wstring)dllpath); - if (!isFileExists_stat(name)) { + if (!isFileExists_stat(name)) + { wstring info = L"请检查目标文件路径!"; MessageBox(NULL, info.c_str(), _T("警告"), MB_ICONWARNING); return; @@ -79,38 +86,44 @@ void Inject(DWORD dwPid, wchar_t* wStr) { InjectDll(dwPid, dllpath); } -BOOL RemoveDll(DWORD dwId) { +BOOL RemoveDll(DWORD dwId) +{ hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwId); LPVOID pRemoteAddress = VirtualAllocEx(hProcess, NULL, 1, MEM_COMMIT, PAGE_READWRITE); DWORD dwWriteSize = 0; HANDLE hThread = NULL; DWORD dwHandle, dwID; LPVOID pFunc = NULL; - if(pRemoteAddress) + if (pRemoteAddress) WriteProcessMemory(hProcess, pRemoteAddress, dllname, wcslen(dllname) * 2 + 2, &dwWriteSize); - else { + else + { printf("写入失败!\n"); return 1; } pFunc = GetModuleHandleW; hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pRemoteAddress, 0, &dwID); - if (hThread) { + if (hThread) + { WaitForSingleObject(hThread, INFINITE); GetExitCodeThread(hThread, &dwHandle); } - else { + else + { printf("GetModuleHandleW调用失败!\n"); return 1; } CloseHandle(hThread); - + // 释放console窗口,不然关闭console的同时微信也会退出 pFunc = FreeConsole; hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, NULL, 0, &dwID); - if (hThread) { + if (hThread) + { WaitForSingleObject(hThread, INFINITE); } - else { + else + { printf("FreeConsole调用失败!\n"); return 1; } @@ -119,10 +132,12 @@ BOOL RemoveDll(DWORD dwId) { // 使目标进程调用FreeLibrary,卸载DLL pFunc = FreeLibrary; hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, (LPVOID)dwHandle, 0, &dwID); - if (hThread) { + if (hThread) + { WaitForSingleObject(hThread, INFINITE); } - else { + else + { printf("FreeLibrary调用失败!\n"); return 1; } diff --git a/WeChatTools/WeChatTools.vcxproj b/old_projects/WeChatTools/WeChatTools.vcxproj similarity index 99% rename from WeChatTools/WeChatTools.vcxproj rename to old_projects/WeChatTools/WeChatTools.vcxproj index 014152ebc18b4892a7c3d7ed24320ee9c026bbac..3a8d1625cee84fcb498d0413ac30c9151ff5d7fb 100644 --- a/WeChatTools/WeChatTools.vcxproj +++ b/old_projects/WeChatTools/WeChatTools.vcxproj @@ -151,4 +151,4 @@ - \ No newline at end of file + diff --git a/WeChatTools/WeChatTools.vcxproj.filters b/old_projects/WeChatTools/WeChatTools.vcxproj.filters similarity index 99% rename from WeChatTools/WeChatTools.vcxproj.filters rename to old_projects/WeChatTools/WeChatTools.vcxproj.filters index a00d99763538c9721ebbd435b262eba4a4251982..a981004d2da9fc77654f4fc32d662e9a8eeb89cc 100644 --- a/WeChatTools/WeChatTools.vcxproj.filters +++ b/old_projects/WeChatTools/WeChatTools.vcxproj.filters @@ -34,4 +34,4 @@ 閫氱敤鍑芥暟 - \ No newline at end of file + diff --git a/WeChatTools/WeChatTools.vcxproj.user b/old_projects/WeChatTools/WeChatTools.vcxproj.user similarity index 93% rename from WeChatTools/WeChatTools.vcxproj.user rename to old_projects/WeChatTools/WeChatTools.vcxproj.user index 88a550947edbc3c5003a41726f0749201fdb6822..98dadff166c0120fcc54719062d9068d77e550d5 100644 --- a/WeChatTools/WeChatTools.vcxproj.user +++ b/old_projects/WeChatTools/WeChatTools.vcxproj.user @@ -1,4 +1,4 @@ 锘 - \ No newline at end of file + diff --git a/WeChatTools/base.cpp b/old_projects/WeChatTools/base.cpp similarity index 91% rename from WeChatTools/base.cpp rename to old_projects/WeChatTools/base.cpp index 617e76d83f2e7c5af1b7187b62195447a92abb11..aa85cca383e8bf4a0a144ed6833603d006408a8e 100644 --- a/WeChatTools/base.cpp +++ b/old_projects/WeChatTools/base.cpp @@ -1,6 +1,7 @@ #include "base.h" -DWORD GetWeChatRobotBase() { +DWORD GetWeChatRobotBase() +{ if (!hProcess) return 0; DWORD dwWriteSize = 0; @@ -12,14 +13,16 @@ DWORD GetWeChatRobotBase() { DWORD dwHandle, dwID; LPVOID pFunc = GetModuleHandleW; HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pRemoteAddress, 0, &dwID); - if (hThread) { + if (hThread) + { WaitForSingleObject(hThread, INFINITE); GetExitCodeThread(hThread, &dwHandle); } - else { + else + { return 0; } CloseHandle(hThread); VirtualFreeEx(hProcess, pRemoteAddress, 0, MEM_RELEASE); return dwHandle; -} \ No newline at end of file +} diff --git a/WeChatTools/base.h b/old_projects/WeChatTools/base.h similarity index 78% rename from WeChatTools/base.h rename to old_projects/WeChatTools/base.h index 899f5f0cba2f488b92a274781910f9558d8d8127..91f64806186c8f162e27795266c556fa8d0e4747 100644 --- a/WeChatTools/base.h +++ b/old_projects/WeChatTools/base.h @@ -13,12 +13,12 @@ using namespace std; -void Inject(DWORD dwPid, wchar_t* wStr); -bool isFileExists_stat(string& name); +void Inject(DWORD dwPid, wchar_t *wStr); +bool isFileExists_stat(string &name); string wstring2string(wstring wstr); BOOL RemoveDll(DWORD dwId); extern HANDLE hProcess; DWORD GetWeChatRobotBase(); #define dllname L"DWeChatRobot.dll" -#define SendImageOffset 0x000110BE \ No newline at end of file +#define SendImageOffset 0x000110BE diff --git a/WeChatTools/main.cpp b/old_projects/WeChatTools/main.cpp similarity index 68% rename from WeChatTools/main.cpp rename to old_projects/WeChatTools/main.cpp index 4a2141cb64166d58d0cb27000ae5d36fea16f9f3..2ad5ab94ec3b7a8ac68f6bfb7f927910ccb68dba 100644 --- a/WeChatTools/main.cpp +++ b/old_projects/WeChatTools/main.cpp @@ -1,29 +1,32 @@ #include "main.h" - -int _tmain(int nargv, WCHAR* argvs[]) +int _tmain(int nargv, WCHAR *argvs[]) { DWORD dwId = 0; HWND hCalc = FindWindow(NULL, L"微信"); DWORD dwPid = 0; DWORD dwRub = GetWindowThreadProcessId(hCalc, &dwPid); - if (!dwPid) { + if (!dwPid) + { wstring info = L"请先启动目标进程!"; MessageBox(NULL, info.c_str(), _T("警告"), MB_ICONWARNING); return 1; } - wchar_t* wStr = NULL; - - if (nargv == 1) { + wchar_t *wStr = NULL; + + if (nargv == 1) + { return 1; } - else if (nargv == 2) { + else if (nargv == 2) + { wStr = argvs[1]; Inject(dwPid, argvs[1]); } - else if (nargv == 3 && !((wstring)argvs[1]).compare(L"-r")) { + else if (nargv == 3 && !((wstring)argvs[1]).compare(L"-r")) + { wStr = argvs[2]; RemoveDll(dwPid); } return 0; -} \ No newline at end of file +} diff --git a/old_projects/WeChatTools/main.h b/old_projects/WeChatTools/main.h new file mode 100644 index 0000000000000000000000000000000000000000..a8f455b48b5abe682aa9ff1fd81943803042ba95 --- /dev/null +++ b/old_projects/WeChatTools/main.h @@ -0,0 +1,2 @@ +#pragma once +#include "base.h" diff --git a/wxRobot/App.config b/old_projects/wxRobot/App.config similarity index 83% rename from wxRobot/App.config rename to old_projects/wxRobot/App.config index 56efbc7b5f15b5166cc89dae0406895b57de0b67..359541cfa8fd42a51225a674e16cd97b8ca69872 100644 --- a/wxRobot/App.config +++ b/old_projects/wxRobot/App.config @@ -1,6 +1,6 @@ 锘 - + - \ No newline at end of file + diff --git a/wxRobot/Program.cs b/old_projects/wxRobot/Program.cs similarity index 98% rename from wxRobot/Program.cs rename to old_projects/wxRobot/Program.cs index 9f9fb68105a8bd1b8ae4c27b3da8eb2ec5f375d3..68b8172ec609fbeeaab6c8e0565baf8542fd2abd 100644 --- a/wxRobot/Program.cs +++ b/old_projects/wxRobot/Program.cs @@ -83,10 +83,9 @@ namespace wxRobot wx.CStopReceiveMessage(); } - System.Object[,,] FriendList = wx.CGetFriendList() as System.Object[,,]; int length = FriendList.GetLength(0); - for (int i = 0; i < 1/*length*/; i++) + for (int i = 0; i < 1 /*length*/; i++) { Console.WriteLine(FriendList[i, 1, 1]); } @@ -126,7 +125,6 @@ namespace wxRobot Subscription = 3, } - public class WxUserInfo { /// diff --git a/wxRobot/Properties/AssemblyInfo.cs b/old_projects/wxRobot/Properties/AssemblyInfo.cs similarity index 58% rename from wxRobot/Properties/AssemblyInfo.cs rename to old_projects/wxRobot/Properties/AssemblyInfo.cs index 895fb9264a9bb58b6677233af714bccd312e90f2..59843f4fe34b5e90b5b1e0ed6ce72be8c9ecf975 100644 --- a/wxRobot/Properties/AssemblyInfo.cs +++ b/old_projects/wxRobot/Properties/AssemblyInfo.cs @@ -5,24 +5,24 @@ using System.Runtime.InteropServices; // 鏈夊叧绋嬪簭闆嗙殑涓鑸俊鎭敱浠ヤ笅 // 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼 // 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭 -[assembly: AssemblyTitle("wxRobot")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("wxRobot")] -[assembly: AssemblyCopyright("Copyright 漏 2022")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] +[assembly:AssemblyTitle("wxRobot")] +[assembly:AssemblyDescription("")] +[assembly:AssemblyConfiguration("")] +[assembly:AssemblyCompany("")] +[assembly:AssemblyProduct("wxRobot")] +[assembly:AssemblyCopyright("Copyright 漏 2022")] +[assembly:AssemblyTrademark("")] +[assembly:AssemblyCulture("")] // 灏 ComVisible 璁剧疆涓 false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷 //瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷 //璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规ц缃负 true銆 -[assembly: ComVisible(false)] +[assembly:ComVisible(false)] // 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID -[assembly: Guid("10504cfa-6d19-4a97-8728-11bce6c2499f")] +[assembly:Guid("10504cfa-6d19-4a97-8728-11bce6c2499f")] -// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓肩粍鎴: +// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓肩粍鎴: // // 涓荤増鏈 // 娆$増鏈 @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; //鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊 //閫氳繃浣跨敤 "*"锛屽涓嬫墍绀: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly:AssemblyVersion("1.0.0.0")] +[assembly:AssemblyFileVersion("1.0.0.0")] diff --git a/wxRobot/packages.config b/old_projects/wxRobot/packages.config similarity index 91% rename from wxRobot/packages.config rename to old_projects/wxRobot/packages.config index 5eaa239b49e08a8e2a83565b69aadf65161c6e35..d4c69254478c9990580dfd9b86d8b2da0a520426 100644 --- a/wxRobot/packages.config +++ b/old_projects/wxRobot/packages.config @@ -1,4 +1,4 @@ 锘 - \ No newline at end of file + diff --git a/wxRobot/wxRobot.csproj b/old_projects/wxRobot/wxRobot.csproj similarity index 99% rename from wxRobot/wxRobot.csproj rename to old_projects/wxRobot/wxRobot.csproj index 295224444141de8f2d1ee56e5c4705cc33a55723..6b8d8aa102c82e0daf62ee4b968b1675c1de73a4 100644 --- a/wxRobot/wxRobot.csproj +++ b/old_projects/wxRobot/wxRobot.csproj @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git "a/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" "b/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" deleted file mode 100644 index 83ec3c6f4e02dd823414ad891a456bf18ccb1536..0000000000000000000000000000000000000000 Binary files "a/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" and /dev/null differ diff --git "a/test/\346\265\213\350\257\225\346\226\207\344\273\266" "b/test/\346\265\213\350\257\225\346\226\207\344\273\266" deleted file mode 100644 index 9df64990f7be3c1f7194a0c22852a1ab3a09f3c5..0000000000000000000000000000000000000000 Binary files "a/test/\346\265\213\350\257\225\346\226\207\344\273\266" and /dev/null differ diff --git a/wxDriver/wxDriver.vcxproj b/wxDriver/wxDriver.vcxproj index 1c1112b5d88b3e1339e1493254ae621328f425fb..884af810e80c790b97fcb2883e65e42fd4961c0b 100644 --- a/wxDriver/wxDriver.vcxproj +++ b/wxDriver/wxDriver.vcxproj @@ -79,6 +79,7 @@ false $(Platform)\$(Configuration)\ $(SolutionDir)$(Configuration)\socket\ + true true @@ -89,6 +90,7 @@ false $(ProjectName)64 $(SolutionDir)$(Configuration)\socket\ + true @@ -123,6 +125,10 @@ true false + + xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\http\" +xcopy /y /d "$(OutDir)$(TargetName).lib" "$(SolutionDir)build\http\" + @@ -157,6 +163,10 @@ true false + + xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\http\" +xcopy /y /d "$(OutDir)$(TargetName).lib" "$(SolutionDir)build\http\" + @@ -182,4 +192,4 @@ - \ No newline at end of file + diff --git a/wxRobot/bin/Release/wxRobot.exe b/wxRobot/bin/Release/wxRobot.exe deleted file mode 100644 index fb130d9d6d1f61d153c2163644505db96be0a3b1..0000000000000000000000000000000000000000 Binary files a/wxRobot/bin/Release/wxRobot.exe and /dev/null differ diff --git a/wxRobot/bin/Release/wxRobot.exe.config b/wxRobot/bin/Release/wxRobot.exe.config deleted file mode 100644 index 56efbc7b5f15b5166cc89dae0406895b57de0b67..0000000000000000000000000000000000000000 --- a/wxRobot/bin/Release/wxRobot.exe.config +++ /dev/null @@ -1,6 +0,0 @@ -锘 - - - - - \ No newline at end of file