静态前端项目密码破解
# 前言
摘要
在网络上查资料老铁们都知道,有时候搜索到一个感觉还不错的项目,想了解详情或者体验更多功能,这个时候弹出一个二维码要注xxx 公众号,其实大多数人是很反感的,因为这些公众号全部都是广告,跟个营销号差不多。但是如果你想继续体验,没办法只好掏出手机微信扫一扫 🙄。
思考
这个时候你需要思考密码或者验证码是不是写死的 ,其实大多数情况下是写死的 ,为什么?
- 关注公众号的目的是为了推流(100%)
- 要实现动态二维码发送到微信公众号才能获取成本不小,也比较麻烦,既然只是一个个人网站或者是一个演示项目 ,这么做肯定时不划算的(90%+)。
# 演示
# 普通前端网站密码获取
找ID
通过找到对应Id,然后前文检查 使用该Id地方,如果没有到引用js地方找
如果找不到请找引用 js ,排除一些肯定不是的 比如常见库文件,比如这个就是引用方式
找 js 引用,经过检索,这个最有可能
找密码
所以这弹窗密码是 coke
# 模块化打包后项目密码获取
模块化打包项目后的文件可读性十分差的,也没有办法通过 上面直接查找方式直接获取。
这个时候需要从提示信息方面获取,不管是 Vue 还是 React 打包后的项目,提示信息是唯一的。
比如输入验证码错误后会提示 验证码错误之类,通过错误信息获取验证码字段,然后检索找到。
无从下手
其实仔细观察,下面 el-xxx 结尾的都是 element 打包后的js文件,肯定跟密码无关。
找错误信息,发现打包将中文提示信息全部转换为 unicode 编码,所以需要将 错误信息转换为 unicode 编码。
在浏览器中将 验证码不能为空
字段转换为 unicode 编码
var verificationCode = "验证码不能为空";
// 将人机验证字符串转换为 Unicode
var unicodeString = Array.from(verificationCode).map(function(char) {
return "\\u" + char.charCodeAt(0).toString(16);
}).join("");
console.log(unicodeString);
// \u9a8c\u8bc1\u7801\u4e0d\u80fd\u4e3a\u7a7a
2
3
4
5
6
7
8
9
经过几次筛选找到字段信息了
全文检索 找到错误信息这个js文件中 , 其实也在这个文件中。比如上面通过错误信息找到验证码字段为 code
当 S.code === E && N() ,字段信息上面都能看到 ,画横线懂得都懂,将获取之后验证码保存到浏览器本地中(因为下次访问还需要通过这个字段验证)
因为 E = "yunai"
,函数 N()
是保存验证码的,只有 S.code === E 才会执行保存密码函数 N()
所以字段 code = "yunai"
# 说明
以上仅供学习🤣