从“为爱守护”到“最后一道防线”:记录逆向某steam工具并复现其家庭监护密码破解器

查看 50|回复 5
作者:M3351AN   

[color=]从“为爱守护”到“最后一道防线”:Steam 家庭监护密码,真的安全吗?


先说结论:
如果你将其视为账户的“最后一道防线”,Steam 家庭监护密码,并不安全。但它有用吗?有用。
从何讲起
前几天在网吧开机,壁纸上出现了一则熟悉的“防盗号友情提示”,写着:“开启家庭守护模式。”


image.png (115.29 KB, 下载次数: 0)
下载附件
2025-10-31 22:18 上传

这个功能的初衷无疑是美好的——让家长能够管理孩子的游戏时间,限制访问不适宜的内容。它像一把数字世界的“爱心锁”,旨在守护家庭数字空间的健康。
我也曾深信,这串由我自己设置的四位数密码,是我账号安全的又一道坚实屏障。
通过搜索引擎查找“破解 Steam 家庭监护”和“steam family view bypass”,要么是求助无果的帖子,要么开头就标着大大的“方法已失效”,其余大多无关。
最终能看到的,只有那句“如果您遗失了 PIN 码且尚未设置恢复电子邮件地址,请联系 Steam 客服”。这一切,让我对这“最后一道防线”多了一份信任。


image.png (175.26 KB, 下载次数: 0)
下载附件
2025-10-31 22:18 上传

当我尝试暴力破解时,果然几次错误后就出现要求重启客户端的提示。即便真想暴力尝试,时间成本也根本划不来。


image.png (50.97 KB, 下载次数: 0)
下载附件
2025-10-31 22:19 上传

这“最后一道防线”看起来“固若金汤”,不是吗?
然而
直到我偶然使用某个最近火爆的Steam游戏入库工具,发现了一个令人瞠目结舌的功能。它的描述简单直接:“Get Family View (PIN)”。


image.png (45.46 KB, 下载次数: 0)
下载附件
2025-10-31 22:21 上传

好奇心驱使我运行了它。整个过程简单到超乎想象:没有复杂操作,没有高深指令,仅仅点击一个按钮,等待进度条滚动,我那自以为牢靠的“监护密码”就在几秒钟之内被破解了——我的 Steam 家庭监护密码,赫然显示在屏幕上。


image.png (30.59 KB, 下载次数: 0)
下载附件
2025-10-31 22:21 上传

一切发生得太快,我愣了好几秒。如果一道“防线”能被一个如此简单的工具轻易绕过,那它存在的意义究竟是什么?
作为一名技术爱好者与业余开发者,我不满足于“能用”,更想弄懂“为什么能”。
于是,我打开反编译工具,深入这个“破解器”的程序逻辑,一探究竟。将程序拖入 IDA,直接搜索 family 相关字段,定位到了破解相关函数的位置。


image.png (116.2 KB, 下载次数: 0)
下载附件
2025-10-31 22:22 上传

按下 F5,阅读伪代码,发现破解过程用到了名为 localconfig.vdf 的文件。


image.png (78.08 KB, 下载次数: 0)
下载附件
2025-10-31 22:22 上传

从这个文件入手,直接用记事本打开浏览(vdf 格式类似 JSON,可读性不错),发现家庭监护相关数据保存在 ParentalSettings 下。


image.png (66.64 KB, 下载次数: 0)
下载附件
2025-10-31 22:23 上传

经验告诉我,那一长串看似十六进制数组成的数据可能是 Protobuf 格式。于是,我利用在线工具进行反序列化来验证我的猜想。


image.png (21.96 KB, 下载次数: 0)
下载附件
2025-10-31 22:23 上传

果然,在第11个field中,我的家庭监护恢复邮箱赫然在列。
那么与密码遍历相关的哈希值也很明显了:第8个field的长字节序列应该就是哈希值,而第7个field较短的字节序列则是“盐”。


image.png (18.11 KB, 下载次数: 0)
下载附件
2025-10-31 22:24 上传

拿到这些数据后,回到工具本身,看看它还做了什么。
程序利用了存在于 steamclient64.dll 中的某个函数,这一长串字符串的传参可能是通过特征码扫描定位函数指针,再调用。


image.png (81.16 KB, 下载次数: 0)
下载附件
2025-10-31 22:24 上传

于是我又进行了更深入的分析,先是阅读函数的伪代码,发现这一串字符串并不直接就是特征码本身,然后又借助AI造轮子,最后生成了IDA风格的特征码。


image.png (56.19 KB, 下载次数: 0)
下载附件
2025-10-31 22:24 上传

接着,在 steamclient64.dll 中搜索该特征码,最终定位到一个函数。
有兴趣可自己尝试一下:48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 41 56 41 57 48 83 EC 60 48 8B 05


image.png (61.17 KB, 下载次数: 0)
下载附件
2025-10-31 22:25 上传

根据可辨字符串,确认它就是与 PIN 验证相关的函数。
逆向进行到这一步,结果既在情理之中,又出乎意料。
原来,所谓的“监护密码”,其验证与执行逻辑完全依赖本地客户端,安全模型脆弱得不堪一击。程序甚至不需复杂修改,仅利用客户端本地函数,遍历保存在本地文件中的数据,仅此而已。
继续深入
继续分析,
在师父的帮助下,最终弄清了 Steam 客户端使用的密码学算法与参数。
(师父建议动态调试,但我这种一开 IDA 就按 F5 的菜鸟也只能硬着头上了。结果就在我盯着伪代码挠头时,师父直接给出了答案。看来对于各位高手来说并不算太复杂)
用 hashcat 跑了一遍验证,确认无误(师父牛逼)。


image.png (81.45 KB, 下载次数: 0)
下载附件
2025-10-31 22:26 上传

基于这些信息,我花了约两小时,重新实现了一个破解工具。代码逻辑之简洁,再次印证了这一保护机制的薄弱。


image.png (67.21 KB, 下载次数: 0)
下载附件
2025-10-31 22:26 上传

对代码进行了一些优化后,结果更让人震惊:不到十秒即可遍历出密码,甚至比之前用的SteamTools更快。


image.png (44.17 KB, 下载次数: 0)
下载附件
2025-10-31 22:26 上传

至此,一个残酷却必须认清的真相浮出水面:Steam 家庭监护密码的设计目的,从来就不是为了保护你的账号免受“恶意攻击”。
那么
它防的是谁?防的是坐在电脑前、对技术不甚了解的孩子。它是一种“君子协定”,一种基于信任和轻微技术障碍的家庭管理工具,其象征意义远大于实际安全意义。
在大语言模型普及的信息时代,它无法阻止任何稍有计算机知识的用户,甚至可能拦不住一个会使用搜索引擎的孩子。
指望它来防御盗号者、黑客或恶意软件,或许已背离其初衷。
这次实践给我们上了一课:永远不要将“简单的”误认为是“安全的”。 真正的账户安全,仍需依赖真正有效的措施——哪怕它们会让你感到“不方便”。
我们该怎么做呢
回到开头网吧电脑的那张壁纸:
  • 上机检查很重要:如果电脑不是新开机,可能已有盗号脚本运行,正等你上钩。
  • 绑定邮箱很重要:很多人账号被盗后,因邮箱同时失守,导致密码被改、交易提示被转发至盗号者,最终造成损失。
  • 不常用电脑上不保存账户凭据:现今大多数 Steam 盗号木马,正是利用本地凭据在其他设备上仍可登录的特性实施盗窃。
  • 更重要的是习惯:不随意出租、出借账号,不轻信代练、代充,不点击不明链接,不运行不明软件,定期修改密码,移除不常用设备的授权,定期使用杀毒软件扫描等等。

    那么,回到家庭监护密码本身:为什么我在开头说作为“最后一道防线”它并不安全,但有用?
    一方面,网页端 Steam 及通过 API 访问账号时,家庭监护密码验证并非在本地完成,所有验证都在 Steam 服务器后端进行。因此,在面对 API 劫持、浏览器 Cookie 劫持等盗号方式时,家庭监护密码依然有效。
    另一方面是时间成本:虽然“薄如蝉翼”的监护密码几秒就能破解,但大批量盗号的脚本往往需自动化处理,这几秒在大规模“洗号”时显得尤为漫长。
    但它终究不是为成为“最后一道防线”而生的。
    它的使命
    家庭监护密码的初衷是爱与沟通。
    它始终是冰箱上关着冰淇淋的那把锁,书房里藏着游戏机手柄的抽屉柜,或只是一个把糖果罐放到孩子够不着位置的架子。
    但若试图以一项可轻易绕过的技术手段替代深入的教育和陪伴,或许从一开始,就是我们一厢情愿的误解。


    image.png (152.01 KB, 下载次数: 0)
    下载附件
    2025-10-31 22:27 上传

    最终,这把“锁”锁住的,可能只是我们内心那句“已采取控制措施”的虚假安全感。
    写在最后
    我选择将工具源码公开,一方面是因为既然已有“公之于众”的工具,即便我不公开,意图恶意使用的人也能找到公开方法。斧子是工具还是凶器,取决于用它的人,不能因一人持斧就视其为凶手。
    另一方面,家庭监护密码本就不是为“账户安全”而生。相较于威胁他人“账户安全”,技术的分享与探讨,以及对更好账号保护方法的思考,更有意义。
    最后,感谢所有给予我帮助的人,也感谢 SteamTools 团队以“半公开”(不开放源码,但所有人可使用)形式发布该方法,让我这半桶水也有了研究的切入点。感谢Hex-Ray强大的调试工具,感谢所有为大语言模型贡献的人们,爱你们。
    附件是源码,也已经发布在Github:https://github.com/M3351AN/FamilyFixer

    FamilyFixer-main.zip
    (9.3 KB, 下载次数: 1)
    2025-10-31 22:28 上传
    点击文件名下载附件
    下载积分: 吾爱币 -1 CB

    下载次数, 下载附件

  • M3351AN
    OP
      

    加上封面和引用就真的是论文了
    结构这么完整嘛
    BrutusScipio   


    涛之雨 发表于 2025-11-2 13:40
    加上封面和引用就真的是论文了
    结构这么完整嘛

    毕竟我是文科生所以...
    M3351AN
    OP
      

    无法解密的加密有什么实用价值吗?实际上来说本地存储时,设备总会在某个时候用明文比较。现实上,安全敏感行业用的是多因素验证。
    happyvbf66   


    BrutusScipio 发表于 2025-11-2 19:08
    无法解密的加密有什么实用价值吗?实际上来说本地存储时,设备总会在某个时候用明文比较。现实上,安全敏感 ...

    一般合格的密码程序,不会有明文比较,到最终也是密码学算法或者摘要算法进行非对称、数学方法上不可逆的检查(本次的例子就是如此),因为这样就不需要在数据库中保存密码明文或数学上可逆的密文,降低数据库泄露可能造成的风险。但如果是以一个”保护账号的密码“来看待这个,那显然还不合格,一方面是验证完全在前端完成,什么算法,从哪拿数据一目了然,对于四位数密码来说,爆破毫无难度。另一方面是验证所需的哈希也一样保存在客户端设备的文件中,病毒、木马等可以轻易的窃取。但正如我已经说的,它存在的意义只是为了给不懂事的小孩一点技术障碍,给家长一个管理游戏时间的手段,能做到这一步已经足够了。
    M3351AN
    OP
      

    学习一下大神的操作~
    您需要登录后才可以回帖 登录 | 立即注册