update_db.sh
2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/bash
# update_wechathook_db.sh — 重装 wechathook APK 后更新 LSPosed modules_config.db
set -e
ADB="${ADB:-$(dirname "$0")/../platform-tools/adb}"
[ ! -f "$ADB" ] && ADB=adb
TERMUX_PY=/data/data/com.termux/files/usr/bin/python3
NEW_PATH=$($ADB shell 'pm path com.example.wechathook' | tr -d '\r' | sed 's/package://')
echo "New APK path: $NEW_PATH"
# Phase 1: in-place UPDATE via Python (WAL commit visible to running lspd)
$ADB shell "su -c \"$TERMUX_PY -c \\\"
import sqlite3
db = sqlite3.connect('/data/adb/lspd/config/modules_config.db')
db.execute(\\\\\\\"UPDATE modules SET apk_path='${NEW_PATH}' WHERE module_pkg_name='com.example.wechathook'\\\\\\\")
db.commit()
try:
db.execute('PRAGMA wal_checkpoint(TRUNCATE)')
except:
pass
db.close()
print('phase1 done')
\\\"\"" 2>&1
# Phase 2: pull + checkpoint locally + push clean main file
$ADB shell 'su -c "cp /data/adb/lspd/config/modules_config.db /data/local/tmp/mc_wh.db && cp /data/adb/lspd/config/modules_config.db-wal /data/local/tmp/mc_wh.db-wal 2>/dev/null; chmod 644 /data/local/tmp/mc_wh.db /data/local/tmp/mc_wh.db-wal 2>/dev/null; true"'
$ADB pull /data/local/tmp/mc_wh.db /tmp/mc_wh.db 2>/dev/null
$ADB pull /data/local/tmp/mc_wh.db-wal /tmp/mc_wh.db-wal 2>/dev/null || true
sqlite3 /tmp/mc_wh.db "PRAGMA wal_checkpoint(TRUNCATE);" 2>/dev/null || true
ACTUAL=$(sqlite3 /tmp/mc_wh.db "SELECT apk_path FROM modules WHERE module_pkg_name='com.example.wechathook';")
echo "Verified path: $ACTUAL"
$ADB push /tmp/mc_wh.db /data/local/tmp/mc_wh_clean.db
$ADB shell 'su -c "cp /data/local/tmp/mc_wh_clean.db /data/adb/lspd/config/modules_config.db && rm -f /data/adb/lspd/config/modules_config.db-wal /data/adb/lspd/config/modules_config.db-shm && echo phase2 done"'
# Phase 3: verify scope (mid=18, com.tencent.mm)
MID=$(sqlite3 /tmp/mc_wh.db "SELECT mid FROM modules WHERE module_pkg_name='com.example.wechathook';")
echo "mid: $MID"
SCOPE=$(sqlite3 /tmp/mc_wh.db "SELECT count(*) FROM scope WHERE mid=$MID AND app_pkg_name='com.tencent.mm';")
if [ "$SCOPE" -eq 0 ]; then
echo "scope missing — inserting mid=$MID → com.tencent.mm"
sqlite3 /tmp/mc_wh.db "INSERT OR REPLACE INTO scope (mid, app_pkg_name, user_id) VALUES ($MID, 'com.tencent.mm', 0);"
$ADB push /tmp/mc_wh.db /data/local/tmp/mc_wh_scope.db
$ADB shell "su -c 'cp /data/local/tmp/mc_wh_scope.db /data/adb/lspd/config/modules_config.db && rm -f /data/adb/lspd/config/modules_config.db-wal /data/adb/lspd/config/modules_config.db-shm && echo scope fixed'"
else
echo "scope OK (mid=$MID, com.tencent.mm exists)"
fi
echo "DB updated. Reboot required."