JavaScript 逆向 Steam 登录二维码

众所周知,steam里骗子猖狂。以下页面是骗子私信发给我的一个仿冒的steam钓鱼网站。 如果点击 接受礼物 就会跳转至虚假的steam登录界面。 如果毫无防备,通过手机steam客户端扫描右边的二维码进行登录,steam会进行登录异常的警告,一般来说要通过这一步还是很麻烦的。如果强行继续,那么steam账号除了会被劫持api key以外,大概率还会被洗库存,比如一些便宜的卡片和库存里的小件都会被卖出,而不会触发steam手机令牌的验证。 那么骗子是如何制作这些钓鱼网站的?steam对于自身系统的保护究竟做的怎么样? 这些都绕不开对于steam的逆向分析。 开始逆向 抓包观察了一会steam登录界面后,就已经捋清了整个登录站点的逻辑。 在最开始会连接/BeginAuthStatusViaQRCode 获取登录二维码,之后每隔一段时间(5s)就会请求 PollAuthSessionStatus/v1 以更新会话状态,如果当前页面的二维码已经过期,则会刷新。 如果先点击登录按钮,会请求/GetPasswordRSAPublicKey/v1,之后是 /BeginAuthSessionStatusViaCredentials。 可以很明显的看到用的是 protobuf 协议。 查看这个网络请求的来源: 继续追踪这个API的来源。在js文件顶部可以看到这是用webpack打包的: 找到来自Send的方法调用比较可疑: 这里的 r 是一个对象,查看一下它的构造方法: 已经能看到proto的结构了。 构建出用于请求GetPasswordRSAPublicKey/v1的proto: syntax = "proto3"; package steam; option go_package = "proto/steam" message GetPasswordRSAPublicKey_Request { string account_name = 1; } message GetPasswordRSAPublicKey_Response { string public_key_mod = 1; string public_key_exp = 2; uint64 timestamp = 3; } 编译proto: $ protoc --go_out=. --go-grpc_out=. steam.proto 安装golang的protobuf包: ...

February 5, 2025 · LingC