v1.0.2
This commit is contained in:
@@ -6,16 +6,18 @@
|
||||
## 截图预览
|
||||
|
||||
### 主界面 / Control Panel
|
||||
> 使用First的时候,不建议开启调试(调试主包和调试frida)的两个选项,这两个选项是用来输出全量日志的,开启之后用起来可能会比较卡。
|
||||
|
||||

|
||||

|
||||
|
||||
### 路由导航
|
||||

|
||||

|
||||
|
||||
### 云函数分析
|
||||

|
||||
|
||||
### 调试开关(JSRPC 与调用 wx.cloud)
|
||||

|
||||
|
||||
### 安全扫描
|
||||
待优化
|
||||
|
||||
@@ -137,6 +139,7 @@ pyinstaller WMPFDebugger.spec
|
||||
- [evi0s/WMPFDebugger](https://github.com/evi0s/WMPFDebugger)
|
||||
- [0xsdeo/HeartK](https://github.com/0xsdeo/HeartK)
|
||||
- [残笑/FindSomething](https://github.com/momosecurity/FindSomething)
|
||||
- [进击的HACK/JSRPC与调用wx.cloud](https://mp.weixin.qq.com/s/hTlekrCPiMJCvsHYx7CAxw)
|
||||
---
|
||||
|
||||
## 致谢
|
||||
@@ -146,7 +149,7 @@ pyinstaller WMPFDebugger.spec
|
||||
---
|
||||
## 交流群
|
||||
|
||||

|
||||

|
||||
|
||||
## 免责声明
|
||||
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# -*- mode: python ; coding: utf-8 -*-
|
||||
|
||||
|
||||
a = Analysis(
|
||||
['gui.py'],
|
||||
pathex=[],
|
||||
binaries=[],
|
||||
datas=[
|
||||
('src/nav_inject.js', 'src'),
|
||||
('src/cloud_audit_inject.js', 'src'),
|
||||
('frida/hook.js', 'frida'),
|
||||
('frida/config', 'frida/config'),
|
||||
('icon.ico', '.'),
|
||||
],
|
||||
hiddenimports=[
|
||||
'frida',
|
||||
'websockets',
|
||||
'google.protobuf',
|
||||
'PySide6.QtCore',
|
||||
'PySide6.QtGui',
|
||||
'PySide6.QtWidgets',
|
||||
],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
excludes=[],
|
||||
noarchive=False,
|
||||
optimize=0,
|
||||
)
|
||||
pyz = PYZ(a.pure)
|
||||
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
a.binaries,
|
||||
a.datas,
|
||||
[],
|
||||
name='First',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
strip=False,
|
||||
upx=True,
|
||||
upx_exclude=[],
|
||||
runtime_tmpdir=None,
|
||||
console=False,
|
||||
disable_windowed_traceback=False,
|
||||
argv_emulation=False,
|
||||
target_arch=None,
|
||||
codesign_identity=None,
|
||||
entitlements_file=None,
|
||||
icon=['icon.ico'],
|
||||
)
|
||||
+1
-3
@@ -4,7 +4,5 @@
|
||||
"cdp_port": "62000",
|
||||
"debug_main": false,
|
||||
"debug_frida": false,
|
||||
"selected_preload_scripts": [
|
||||
"bypass_debugger.js"
|
||||
]
|
||||
"selected_preload_scripts": []
|
||||
}
|
||||
@@ -1,299 +0,0 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package mmbizwxadevremote;
|
||||
|
||||
message WARemoteDebug_DataFormat {
|
||||
optional uint32 cmd = 1;
|
||||
optional string uuid = 2;
|
||||
optional bytes data = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_BaseReq {
|
||||
optional uint32 clientVersion = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_BaseResp {
|
||||
optional int32 errcode = 1;
|
||||
optional string errmsg = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_CommReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_CommResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DebugMessage {
|
||||
optional uint32 seq = 1;
|
||||
optional uint32 after = 2;
|
||||
optional string category = 3;
|
||||
optional bytes data = 4;
|
||||
optional uint32 compressAlgo = 5;
|
||||
optional uint32 originalSize = 6;
|
||||
}
|
||||
|
||||
message WARemoteDebug_SendDebugMessageReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
repeated WARemoteDebug_DebugMessage debugMessageList = 2;
|
||||
optional uint32 recvAck = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_SendDebugMessageResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
optional uint32 sendAck = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_NewSendDebugMessageReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
repeated WARemoteDebug_DebugMessage debugMessageList = 2;
|
||||
optional uint32 recvAck = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_NewSendDebugMessageResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
optional uint32 minAck = 2;
|
||||
optional uint32 maxAck = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_MessageNotify {
|
||||
repeated WARemoteDebug_DebugMessage debugMessageList = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_MessageNotifyResp {
|
||||
optional uint32 recvAck = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_EventNotify {
|
||||
}
|
||||
|
||||
message WARemoteDebug_EventNotifyResp {
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxHeartBeatReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
optional uint32 recvAck = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxHeartBeatResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevHeartBeatReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
optional uint32 recvAck = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevHeartBeatResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_RoomInfo {
|
||||
optional bool joinRoom = 1;
|
||||
optional string roomId = 2;
|
||||
optional string originalMd5 = 3;
|
||||
optional uint32 roomStatus = 4;
|
||||
optional uint32 wxConnStatus = 5;
|
||||
optional uint32 devConnStatus = 6;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxLoginReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
optional string loginTicket = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxLoginResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
optional WARemoteDebug_RoomInfo roomInfo = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevLoginReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
optional string newticket = 2;
|
||||
optional uint32 autodev = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevLoginResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
optional WARemoteDebug_RoomInfo roomInfo = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxJoinRoomReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
optional string username = 2;
|
||||
optional string roomId = 3;
|
||||
optional string wxpkgInfo = 4;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxJoinRoomResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevJoinRoomReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
optional string appid = 2;
|
||||
optional string roomId = 3;
|
||||
optional string wxpkgInfo = 4;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevJoinRoomResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxQuitRoomReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxQuitRoomResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevQuitRoomReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevQuitRoomResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxSyncMessageReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
optional uint32 minSeq = 2;
|
||||
optional uint32 maxSeq = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_WxSyncMessageResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
repeated WARemoteDebug_DebugMessage debugMessageList = 2;
|
||||
optional uint32 sendAck = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevSyncMessageReq {
|
||||
optional WARemoteDebug_BaseReq baseRequest = 1;
|
||||
optional uint32 minSeq = 2;
|
||||
optional uint32 maxSeq = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DevSyncMessageResp {
|
||||
optional WARemoteDebug_BaseResp baseResponse = 1;
|
||||
repeated WARemoteDebug_DebugMessage debugMessageList = 2;
|
||||
optional uint32 sendAck = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_MethodWithArgs {
|
||||
optional string methodName = 1;
|
||||
repeated string methodArgList = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_RegisterInterface {
|
||||
optional string objName = 1;
|
||||
repeated WARemoteDebug_MethodWithArgs objMethodList = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DeviceInfo {
|
||||
optional string deviceName = 1;
|
||||
optional string deviceModel = 2;
|
||||
optional string systemVersion = 3;
|
||||
optional string wechatVersion = 4;
|
||||
optional uint32 publibVersion = 5;
|
||||
optional float screenWidth = 6;
|
||||
optional float pixelRatio = 7;
|
||||
optional string userAgent = 8;
|
||||
}
|
||||
|
||||
message WARemoteDebug_SetupContext {
|
||||
optional WARemoteDebug_RegisterInterface registerInterface = 1;
|
||||
optional WARemoteDebug_DeviceInfo deviceInfo = 2;
|
||||
optional string configureJs = 3;
|
||||
optional string publicJsMd5 = 4;
|
||||
optional string threeJsMd5 = 5;
|
||||
optional uint32 supportCompressAlgo = 6;
|
||||
}
|
||||
|
||||
message WARemoteDebug_CallInterface {
|
||||
optional string objName = 1;
|
||||
optional string methodName = 2;
|
||||
repeated string methodArgList = 3;
|
||||
optional uint32 callId = 4;
|
||||
}
|
||||
|
||||
message WARemoteDebug_CallInterfaceResult {
|
||||
optional string ret = 1;
|
||||
optional uint32 callId = 2;
|
||||
optional string debugInfo = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_EvaluateJavascript {
|
||||
optional string script = 1;
|
||||
optional uint32 evaluateId = 2;
|
||||
optional string debugInfo = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_EvaluateJavascriptResult {
|
||||
optional string ret = 1;
|
||||
optional uint32 evaluateId = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_Breakpoint {
|
||||
optional bool isHit = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_Ping {
|
||||
optional uint64 pingId = 1;
|
||||
optional string payload = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_Pong {
|
||||
optional uint64 pingId = 1;
|
||||
optional uint32 networkType = 2;
|
||||
optional string payload = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DomOp {
|
||||
optional string params = 1;
|
||||
optional uint32 webviewId = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_DomEvent {
|
||||
optional string params = 1;
|
||||
optional uint32 webviewId = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_NetworkDebugAPI {
|
||||
optional string apiName = 1;
|
||||
optional string taskId = 2;
|
||||
optional string requestHeaders = 3;
|
||||
optional uint64 timestamp = 4;
|
||||
}
|
||||
|
||||
message WARemoteDebug_ChromeDevtools {
|
||||
optional uint64 opId = 1;
|
||||
optional string payload = 2;
|
||||
optional string jscontextId = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_ChromeDevtoolsResult {
|
||||
optional uint64 opId = 1;
|
||||
optional string payload = 2;
|
||||
optional string jscontextId = 3;
|
||||
}
|
||||
|
||||
message WARemoteDebug_AddJsContext {
|
||||
optional string jscontextId = 1;
|
||||
optional string jscontextName = 2;
|
||||
}
|
||||
|
||||
message WARemoteDebug_RemoveJsContext {
|
||||
optional string jscontextId = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_ConnectJsContext {
|
||||
optional string jscontextId = 1;
|
||||
}
|
||||
|
||||
message WARemoteDebug_CustomMessage {
|
||||
optional string method = 1;
|
||||
optional string payload = 2;
|
||||
optional bytes raw = 3;
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+6
-1
@@ -340,7 +340,7 @@ class DebugEngine:
|
||||
logger.info(f"[userscript] immediate inject (Runtime.evaluate): {script.name}")
|
||||
engine.message_counter = seq
|
||||
except Exception as e:
|
||||
logger.error(f"[userscript] immediate inject error: {e}")
|
||||
logger.warn(f"[userscript] immediate inject warning: {e}")
|
||||
except websockets.exceptions.ConnectionClosed:
|
||||
pass
|
||||
except Exception as e:
|
||||
@@ -349,6 +349,11 @@ class DebugEngine:
|
||||
engine.miniapp_clients.discard(websocket)
|
||||
if not engine.miniapp_clients:
|
||||
engine._notify_status("miniapp", False)
|
||||
# 清理所有挂起的 CDP 响应,防止 future 泄漏
|
||||
for fid, fut in list(engine._pending_responses.items()):
|
||||
if not fut.done():
|
||||
fut.set_exception(RuntimeError("miniapp disconnected"))
|
||||
engine._pending_responses.clear()
|
||||
logger.info("[miniapp] miniapp client disconnected")
|
||||
|
||||
server = await websockets.server.serve(
|
||||
|
||||
+4
-1
@@ -32,7 +32,10 @@ class MiniProgramNavigator:
|
||||
"tabBar:window.nav?window.nav.tabBarPages:[],"
|
||||
"appid:window.nav&&window.nav.config?(window.nav.config.appid||''):'',"
|
||||
"entry:window.nav&&window.nav.config?(window.nav.config.entryPagePath||''):'',"
|
||||
"name:(function(){try{var a=window.__wxConfig||window.wx&&window.wx.__wxConfig||{};"
|
||||
"name:(function(){try{"
|
||||
"var f=window.nav&&window.nav.wxFrame;"
|
||||
"var a=(f&&f.__wxConfig)||window.__wxConfig||"
|
||||
"(window.wx&&window.wx.__wxConfig)||{};"
|
||||
"var b=a.accountInfo&&a.accountInfo.appAccount;"
|
||||
"return b&&b.nickname||a.appname||''}catch(e){return ''}})()"
|
||||
"})",
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user