feat: 新增视频分析流水线、Web界面、孤儿清理工具;修复健壮性问题
- 新增 analysis/ 模块:MOG2活动检测、YOLO人物跟踪、MediaPipe摔倒检测、Ollama活动打标、缩略图抽取 - 新增 webapp/:Flask事件浏览界面,按需HEVC→H264转码缓存 - 新增 analyze.py:7阶段状态机流水线(scan→backfill→motion→person→fall→activity→thumbnail) - 新增 cleanup_orphans.py:清理文件已删除的数据库孤儿记录 - 修复:motion/person/activity三阶段加单视频异常兜底,避免批次中断 - 修复:ollama_client加健康检查和3次重试,num_ctx从8192降到2048 - 修复:transcode_cache加fcntl文件锁,防止并发转码同一视频 - 修复:SQLite开WAL模式+busy_timeout,支持读写并发 - 修复:sync.py ffmpeg路径改为shutil.which查找,删除automate.py死代码PYTHON - 修复:thumbnail失败加3次重试上限,避免无限重试损坏文件 - 新增:requirements.lock锁定版本、README文档 - 更新:.gitignore排除.playwright-mcp、截图、备份文件
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* 通用 Android SSL Pinning 绕过脚本(Frida)
|
||||
* 覆盖常见实现:系统 TrustManagerImpl、OkHttp3 CertificatePinner、
|
||||
* SSLContext 自定义 TrustManager、Conscrypt。
|
||||
* 用途:抓包萤石云 app (com.videogo) 的 HTTPS 私有接口。
|
||||
*/
|
||||
setTimeout(function () {
|
||||
Java.perform(function () {
|
||||
console.log('[unpin] 开始注入');
|
||||
|
||||
// 1. 系统 TrustManagerImpl.verifyChain —— 直接放行
|
||||
try {
|
||||
var TMI = Java.use('com.android.org.conscrypt.TrustManagerImpl');
|
||||
TMI.verifyChain.implementation = function (untrustedChain, trustAnchorChain, host, clientAuth, ocspData, tlsSctData) {
|
||||
console.log('[unpin] TrustManagerImpl.verifyChain 放行 host=' + host);
|
||||
return untrustedChain;
|
||||
};
|
||||
} catch (e) { console.log('[unpin] TrustManagerImpl 跳过: ' + e); }
|
||||
|
||||
// 2. OkHttp3 CertificatePinner.check —— 直接返回
|
||||
try {
|
||||
var CP = Java.use('okhttp3.CertificatePinner');
|
||||
CP.check.overload('java.lang.String', 'java.util.List').implementation = function (a, b) {
|
||||
console.log('[unpin] okhttp3 CertificatePinner.check 放行 ' + a);
|
||||
return;
|
||||
};
|
||||
} catch (e) { console.log('[unpin] okhttp3 CertificatePinner 跳过: ' + e); }
|
||||
|
||||
// 3. 自定义 X509TrustManager —— 替换成全信任
|
||||
try {
|
||||
var X509TM = Java.use('javax.net.ssl.X509TrustManager');
|
||||
var SSLContext = Java.use('javax.net.ssl.SSLContext');
|
||||
var TrustManager = Java.registerClass({
|
||||
name: 'com.ez.FakeTM',
|
||||
implements: [X509TM],
|
||||
methods: {
|
||||
checkClientTrusted: function () {},
|
||||
checkServerTrusted: function () {},
|
||||
getAcceptedIssuers: function () { return []; }
|
||||
}
|
||||
});
|
||||
var TMs = [TrustManager.$new()];
|
||||
var initOverload = SSLContext.init.overload(
|
||||
'[Ljavax.net.ssl.KeyManager;', '[Ljavax.net.ssl.TrustManager;', 'java.security.SecureRandom');
|
||||
initOverload.implementation = function (km, tm, sr) {
|
||||
console.log('[unpin] SSLContext.init 替换 TrustManager');
|
||||
initOverload.call(this, km, TMs, sr);
|
||||
};
|
||||
} catch (e) { console.log('[unpin] SSLContext 跳过: ' + e); }
|
||||
|
||||
console.log('[unpin] 注入完成');
|
||||
});
|
||||
}, 0);
|
||||
Reference in New Issue
Block a user