找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5030

积分

0

好友

649

主题
发表于 5 小时前 | 查看: 3| 回复: 0

挑战:代码混淆 0

下方的登录页面并未采用 HTTPS 加密传输,但它会对账号密码做混淆加密处理,因此你无法在抓包工具中直接读取明文账号密码。

你的任务:逆向破解这套混淆加密逻辑。理清加密原理后,分析提供的 pcap 抓包文件,找出真实正确的账号密码,完成登录。

你可以独立解题;如果需要解题提示,往下翻阅。

JavaScript 混淆逆向入门教程

  1. 在登录框输入测试账号:用户名 admin,密码 password,用 Wireshark 抓下 HTTP POST 请求数据包。
  2. 抓包底部会出现分行文本数据,包含两个传参字段:
    xi=benjo
    xp=qbttxpse

想要弄懂加密逻辑,查看网页的 HTML 源代码即可。

登录表单说明

页面登录表单中:账号输入框字段名为 id,密码输入框字段名为 pw

点击登录按钮时,表单提交事件 onsubmit 会执行一段名为 obfuscate() 的 JavaScript 混淆加密函数。

最重要的一点就是分析 pcap 文件。

So to deobfuscate the credentials, open the pcap file and move each character one letter backwards in the alphabet to find the correct credentials.

When you get it right, you’ll be able to log in and see this page:

解题思路与步骤

这道 CTF 题目考察的是基础的前端逆向分析,由于前端代码未做任何混淆保护,加密逻辑可以轻松复现,从安全角度甚至可以衍生出多种通过方式。

第一步,随意输入账号密码抓包。

登录页面输入用户名cscsa

返回的响应是访问被拒绝,通过题目提示可知正确的账号密码存于客户端。

访问被拒绝页面

接着定位登录按钮绑定的事件,在源码中全局搜索 obfuscate

登录表单HTML源代码

搜索obfuscate函数

obfuscate 函数收集的是经过 scramble 处理后的值——也就是说,浏览器最终提交了 4 个字段:混淆后的用户名、混淆后的密码、被清空的原始用户名、被清空的原始密码。真正有用的只有前两个,接下来分析 scramble 函数。

obfuscate函数代码

开发者工具查看用户名输入框

scramble 函数的意义很简单:输入一个字符串,把其中每个字符的 ASCII/Unicode 编码加 1,得到新字符串。后续解密可以由此反推。

scramble混淆函数代码

发包逻辑、加密混淆都分析完了,接下来分析 pcap 文件。使用 certutil 将 pcap 转成十六进制:

certutil -encodehex ob0.pcap -
输入长度=751
输出长度=3477
CertUtil: -encodehex 命令成功完成。

在十六进制视图中可以看到 xi=Tuvefou&xp=Tfdsfu&id=&pw=

HTTP POST数据十六进制视图

第一种方式:编写解密脚本反推

已知源码规则:明文字符+1=混淆字符,那么:混淆字符-1=明文字符

因此:

  • TuvefouStudent
  • TfdsfuSecret

Python 解密代码:

Python解密代码

运行脚本,直接得到用户名 Student、密码 Secret

终端执行解密输出Student和Secret

第二种方式:JS Hook 直接劫持密文

如果不想分析加解密逻辑,可以直接 Hook obfuscate 函数,让它把混淆后的值泄露出来。

Hook 代码示例:

obfuscate赋值代码

obfuscate函数与匿名函数对比

成功登录

挑战成功 Congratulations




上一篇:朝鲜 Sapphire Sleet 组织伪造 macOS 更新,窃取用户密码与加密钱包数据
下一篇:Claude Code 技能实战:从误解到精通,官方核心法则深度解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-6-19 06:56 , Processed in 1.067682 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表