前言
- 主要监听在:当手机的某个文件夹内发生了以下的改变
- 文件、文件夹被创建
- 文件、文件夹被修改
- 文件、文件夹被删除
则输出变化的路径。
- 所以有啥用处呢?
前几天在QQ群里看到有人用所谓的技术手段实现了:“明明是个抠脚大汉,发出的语音却是萌妹的声音”,而这个所谓的技术就是语音替换。 - 原理很简单:当按住说话录音时,QQ的缓存路径下会生成一个文件,而这个文件就是录音的内容,那么我们只要在录音发送前将这个语音文件替换成自定义的语音文件,那就实现了这个语音替换的过程。
- 所以,问题就来了,如何知道这个生成的录音文件在哪个文件夹?
- 那么,就用到了我们今天的方案了!
实现方案
-
因为自Android11起,由于谷歌政策的隐私限制,安卓机下
/sdcard/Android/data/
的访问受限,用常规的脚本遍历记录是不行的,权限不足,所以就从shell入手了! -
了解到shell里面有个inotifywait,专门是用来监听文件变化的,那就从这里开始研究
-
而对于inotifywait,是比较需要标准的 Linux 环境才能安装,我尝试了MT管理器,发现不太行,估计是环境不到位,那就直接用我的Linux Depoly了
-
对于Linux Depoly,如果要检索的目标文件夹不在容器的安装路径下,那么就需要在配置里设置挂载,挂载要检索的路径。
-
我安装的是Ubuntu系统,安装inotifywait命令如下:
apt-get update
apt-get install inotify-tools
-
安装好后,在Ubuntu的root目录下新建run.sh,权限777,执行用户设置为root,代码内容如下:
#!/bin/sh # 指定要监控的目录 MONITOR_DIR="/sdcard/Android/data/com.tencent.mobileqq/" # 检查是否安装了 inotify-tools if ! command -v inotifywait >/dev/null 2>&1; then echo "inotifywait 未安装,请先安装 inotify-tools。" exit 1 fi # 使用 inotifywait 监控文件夹 inotifywait -m -r -e create -e delete -e modify "$MONITOR_DIR" | while read path action file; do case $action in CREATE,ISDIR) echo "[$(date)] '$path' 中创建了新目录: $file" ;; CREATE) echo "[$(date)] '$path' 中创建了新文件: $file" ;; DELETE,ISDIR) echo "[$(date)] '$path' 中删除了目录: $file" ;; DELETE) echo "[$(date)] '$path' 中删除了文件: $file" ;; MODIFY,ISDIR) echo "[$(date)] '$path' 中有目录被修改: $file" ;; MODIFY) echo "[$(date)] '$path' 中有文件被修改: $file" ;; *) echo "[$(date)] 在 '$path' 发生了未知事件: $action - $file" ;; esac done
-
最后在root路径下打开终端:
此条命令是提升监控点的上限,每个 Linux 系统都有一个限制,即用户可以创建的 inotify 监控点的最大数量。这个限制是为了防止系统资源耗尽。然而,有时候监听的文件夹里面的文件太多了,就达到上限了,此时就需要提升监控点的上限值了echo 65536 > /proc/sys/fs/inotify/max_user_watches
运行监听脚本
./run.sh
效果视频
监听是真的灵敏的很~
这是用监听到的文件路径实现的替换发送效果
(对不起,萌新,我不是故意要拿你鞭尸的[doge][doge][doge])
调用TTS语音引擎,导入其它语音包,各种妹子的声音,再配合文本转语音,香的很~
妥妥的抠脚大汉,得知真相的榜一直接连夜跑路。