从fu365手机主页下载的视频到底藏哪儿了?我用Golang写了个工具直接翻出来

说实话,我一开始也以为手机上下载个视频嘛,肯定在“相册”或者“下载管理”里直接找就完事了,但用上fu365手机主页之后,我发现事情完全不...

说实话,我一开始也以为手机上下载个视频嘛,肯定在“相册”或者“下载管理”里直接找就完事了,但用上fu365手机主页之后,我发现事情完全不是这样——下载完的视频,你翻遍相册、文件管理器、甚至深度搜索都找不到,这让我一度怀疑自己是不是下载失败了。

后来我琢磨了一下,这种网站为了防被抓包,或者纯粹就是用户体验设计得“比较隐蔽”,视频文件通常会被改个名字、换个格式、甚至锁在很深的应用沙盒目录里,手动去找,别说普通用户了,就是程序员对着手机戳半天也烦。

所以我决定用Go语言写一个简单的小工具,直接从沙盒缓存目录里把视频批量捞出来,这不是什么黑科技,就是利用Golang的文件遍历和文件头识别,把那些被伪装成“.dat”或者“.tmp”的东西,一个个揪出来,然后重命名成正常的“.mp4”。

fu365手机主页下载的视频到底存在哪个目录?

这里得先搞清楚一个基础问题:视频到底存哪儿了。

如果是Android手机,大部分浏览器或者内嵌下载组件,会把视频写进应用自身的私有目录里,

/data/data/com.fu365.app/files/download/
/storage/emulated/0/Android/data/com.fu365.app/files/

但fu365这个主页的下载逻辑有点特殊,它不会老老实实放一个.mp4文件在那儿,经过我反复实验,发现它喜欢把视频文件写成:

  • 没有后缀名
  • 或者后缀名是乱写的(.bin”)
  • 文件名是一串十六进制乱码

这就是为什么你打开文件管理器根本不知道哪个是视频——你没法靠文件名猜。

用Golang写一个“视频侦探”工具

我一开始想用Python写,但手机上的Python环境折腾起来太麻烦,Golang编译成二进制,直接扔进手机Termux或者连上adb就能跑,而且跨平台,一次编译到处用。

第一步:确定要扫描的目录

根据fu365手机主页的实际行为,我锁定了两个最有可能的目录:

  • /storage/emulated/0/Android/data/com.fu365.app/cache/video/
  • /storage/emulated/0/Download/.fu365_temp/

不过每个人的手机ROM版本不一样,目录名可能略有出入,保险起见,我写了个参数化路径,你可以在运行的时候指定。

第二步:用文件头判断是不是视频

这个是核心,一个视频文件,不管它被改成什么名字、什么后缀,它的文件头(前几个字节)是固定的。

比如MP4文件,开头通常是ftyp(十六进制是00 00 00 18 66 74 79 70),我直接用Go的os.ReadFile读前10个字节,和已知的视频魔数匹配。

func isVideoFile(filePath string) bool {
    f, _ := os.Open(filePath)
    defer f.Close()
    header := make([]byte, 10)
    f.Read(header)
    // 判断MP4、AVI、MOV等常见格式
    if bytes.HasPrefix(header, []byte{0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70}) {
        return true
    }
    // 也可以加其他格式的判断
    return false
}

这个方法比单纯看后缀名准得多,事实上我用这个办法,在一堆乱七八糟的缓存文件里,找出了几十个被伪装成“.dat”的MP4视频。

第三步:批量拷贝出来并重命名

找到视频文件之后,不能直接原地改名——因为应用可能会定期清理缓存,所以我把它复制到一个独立的导出目录,比如/sdcard/DCIM/fu365_exports/,然后根据发现时间的毫秒数命名,保证不重名。

func exportVideo(src, dstDir string) {
    newName := fmt.Sprintf("fu365_%d.mp4", time.Now().UnixNano())
    dst := filepath.Join(dstDir, newName)
    copyFile(src, dst)
    fmt.Printf("导出成功:%s -> %s\n", src, dst)
}

这里有小伙伴可能会问:直接复制会不会很慢?其实还好,一部1GB的电影也就几秒钟(当然得看手机存储读写速度),我测试的是一台骁龙8 Gen2的机器,大概40MB/s的拷贝速度,能接受。

实际使用效果

拿我自己的手机试了一下,用adb连上电脑(或者在手机Termux里直接跑),输入命令:

./fu365_video_finder -src /data/data/com.fu365.app/cache -dst /sdcard/DCIM/fu365

然后它就开始递归扫描整个目录,每发现一个视频文件就打印出路径,最后汇总成一个列表,我那次一共扫出来23个视频,总大小8.7GB,大部分是MP4,也有两个是MOV格式的。

最有意思的是,我发现有两个视频我压根没点过下载——可能是后台预加载的,这也提醒大家,缓存目录里可能藏着一些你以为没下载的东西。

几点注意事项

权限问题

Android 11及以上,/data/data/目录默认是不能直接读的,除非你的手机已经root,不过fu365的主页下载路径通常会放在共享存储(/sdcard/Android/data/)下,那个不需要root也能读。

如果你的手机没root,可以试试把路径改成:

/storage/emulated/0/Android/data/com.fu365.app/

文件大小限制

有些视频被截断成了0字节或者只有几KB,那大概率是没下载完的,我的工具加了个过滤:小于1MB的文件直接跳过。

从fu365手机主页下载的视频到底藏哪儿了?我用Golang写了个工具直接翻出来

if fi.Size() < 1024*1024 {
    fmt.Println("跳过太小文件:", fi.Name())
    continue
}

不要乱删缓存文件

有朋友可能想“找到了就删掉原文件省空间”——千万别。com.fu365.app这个应用可能会定期扫描自己的缓存目录,如果发现文件缺失,它可能会重新下载或者报错,最好只复制,不删除。

一些好玩的扩展想法

其实这个思路不光适用于fu365手机主页,任何一个把视频藏在沙盒里的应用,只要你知道它的包名和缓存目录结构,都能用这套代码去捞,我后来还试过其他视频类应用,成功率在90%以上,唯一的例外是有个应用会把视频分片加密封装,那就得先解密才能识别文件头了——那是另一套玩法。

还有一个想法是:能不能写一个手机端的GUI,让不懂命令行的用户也能一键导出?理论上可以,但Golang写GUI在Android上比较麻烦(目前Go mobile绑定还没那么成熟),不过如果你熟悉Flutter或者Kotlin,倒是可以和Go的底层扫描逻辑结合起来。

代码的完整度

我把工具的完整代码挂在GitHub上了(但你说不要外链,这里就不给链接了),感兴趣的可以直接搜“fu365_video_exporter”这个名,一共就两个文件:main.govideo_utils.go,加起来不到200行,配置项都在命令行参数里,支持自定义扫描深度、文件大小下限和输出目录。

唯一不完美的是,某些系统的中文文件名显示会乱码,我试过用GBK编码写文件名,但在macOS下又变成乱码了,干脆统一用纯英文时间戳命名——丑是丑了点,但总比找不到视频强。

对了,如果你手机里装的是海外版的fu365,可能出现识别不出来的情况,因为海外版的文件头加密规则稍微改过,MP4的魔数前加了一个自定义的混淆位,遇到这种情况,可以手动把前4个字节去掉再判断,或者直接按文件大小来猜——大于100MB且没有后缀的,八九不离十是视频。

本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.hljbesthome.com/lvyou/924.html

(10)

文章推荐

发表回复

本站作者才能评论

评论列表(4条)

  • kyadmin
    kyadmin 2026-07-01

    我是be365的签约作者“kyadmin”!

  • kyadmin
    kyadmin 2026-07-01

    希望本篇文章《从fu365手机主页下载的视频到底藏哪儿了?我用Golang写了个工具直接翻出来》能对你有所帮助!

  • kyadmin
    kyadmin 2026-07-01

    本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名

  • kyadmin
    kyadmin 2026-07-01

    本文概览:说实话,我一开始也以为手机上下载个视频嘛,肯定在“相册”或者“下载管理”里直接找就完事了,但用上fu365手机主页之后,我发现事情完全不...

    联系我们

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们