新版某乎Js逆向分析

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 新版某乎Js逆向分析
项目地址:aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbj9uZXh0PSUyRg==

观前提示:

本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除



1.参数定位

启动抓包,输出参数并点击登录找到 oauth/sign_in 关键字眼的包可以看到

POST的Form Data是被加密过的,那么我们可以通过全局搜索URL的oauth/sign_in 关键字眼找到

点击进去  在关键位置打上断点

到这里发现数据还是处于未加密状态

接着往下跟发现跟了很久也没跟到 那我们不能在一棵树上吊死是吧 得换一种思路 那回到最初断点的位置找找有没有特别的关键字 发现 zsEncrypt 这个就很可疑了 CTRL+F页面搜索一下 出现了几十个结果 一个一个往下看 如果你不清楚哪个是你需要的就在可疑的位置打上断点 然后在调试

到了这里就非常可疑 断点打上 然后再进行一次发包操作

进行了一次操作后断了下来了 明文也肉眼可见了 就证明我们断的位置正确了

那接着继续步进当我们到了下面位置的时候发现明文a被重写了一遍 变成了密文 那整个逻辑就很明了了 这里就是我们的加密位置 如果不确定的话可以控制台输出a的密文和发包密文对比 也是一模一样的



(a = (0,                r.default)(a)

继续跟进去加密位置 加密位置就出来了

       


接下来就是扣Js和改写Js的操作

2.扣出和改写

我们现在需要把整个加密函数给扣出来 整体扣取有一个小技巧 可以在末端的花括号点击一下变成灰色

然后再去往上找也有一个花括号变成灰色 这中间就是一整个完整的函数了

将Js复制粘贴到调试器 接下来就是Js改写步骤了运行Js根据控制台输出的错误进行相对应的修改 去变量 改自执行 导出函数

改完之后运行Js提示atob is not defined 就是node环境没有atob这个东西那缺啥补啥就行啦 补完之后再运行 结果就出来了


感谢您的观看






















不会吧 不会吧 你真的以为某乎就这样一点坑都没有吧


回到浏览器调试我们输出同样的加密明文看输出密文

node输出:a0F0rAFX

浏览器输出BTY0

对不上 那咋办

还能咋办 一步一步调呗

但是新手才会这样做 还费肝

我们运行Js的时候提示我们缺少navigator 但是在Js代码里面并没有出现这个东西

事情逐渐蹊跷 这这这这不是和tou条一个德行的嘛 逻辑混淆


那咋整呢 逻辑混淆肯定有取值 赋值的操作存在的 通常也会伴随

eval apply call Function等字眼的出现 那我们咋办呢

其实 很很简单的 肝就完事了

回到浏览器中找到这段加密位置 凭经验找关键字眼 那就有人问了 我没有经验我怎么看出来哪个是哪个? 很好 那你问到点上了 跟着看 跟着学


主要加密代码就四百多行 从头看到尾 注意看关键字眼 那些位操作就基本可以忽略啦

这 这 这不就是我刚刚说的eval了嘛 断点打上 测试一波

呕吼 好家伙 不愧是我 一下子就断对了

那这里就有人问了 断这里有啥用呀


诶嘿 问得好 要知道 我们浏览器和node的环境是有差别的 既然这个代码能在我们的node环境运行得出结果 但是拿到的值却和浏览器的值不相同 那我们是不是要考虑一下 哪里出了问题呢 既然我们找到了操作位置 那我们接下来就可以进行插桩操作了


什么是插桩?

其实就是console



插好桩了之后呢我们就可以取出代码放浏览器调试啦

这是浏览器插桩输出的结果

这是浏览器输出的结果

一项一项对比发现 浏览器的123并没有增加奇怪的字符 长度3正常

而node环境的123被加上了奇奇怪怪的字符 长度变成5 和 6

也许 我们发现了问题所在既然 他修改了我们的字符 那我们就强制还原为正常的明文


详细的你们在这个位置进行插桩调试便知


下面说说我的做法:

首先呢 检测了navigatoruserAgent 补上就是了


window.navigator={
    userAgent:"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400"
};


if(t=="length"){
  A.k[0]=A.k[0].slice(1);
  A.r[0]=A.k[0];
};

先判断t是不是length我们需要修改的属性然后在进行修改 运行输出一下

结果很相近了 但是结果还是不正确 回到原来的地方输出一下

console.log("取出",A.r[this.c],"的",t,"结果",A.r[this.c][t]);

发现 wocao 代码被slice了俩次 原文被改变了 那可不行 那简单 加个判断就行了

首先 在头部定义一个东西 随便一个名字就行

var xxx =false;

然后 在if里面加上判断即可(当然 其他方法判断也是可以的 不限于这种笨方法)

if(t=="length" && xxx==false){
  xxx=true;
  A.k[0]=A.k[0].slice(1);
  A.r[0]=A.k[0];
};

改好之后我们再输出一下结果

再算一个真实参数的密文和浏览器的对比一下看看

好了 到此 才算是真正的结束啦

相关文章
|
6天前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
60 9
|
1天前
|
Web App开发 监控 JavaScript
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
|
4天前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
11 1
|
28天前
|
数据采集 JSON 前端开发
JavaScript逆向爬虫实战分析
JavaScript逆向爬虫实战分析
|
5天前
|
JavaScript 前端开发 API
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
11 0
|
5月前
|
Web App开发 前端开发 JavaScript
技术心得记录:瀑布流的布局原理分析(纯CSS瀑布流与JS瀑布流)
技术心得记录:瀑布流的布局原理分析(纯CSS瀑布流与JS瀑布流)
54 0
|
29天前
|
前端开发 JavaScript
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
|
5月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
21 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
36 0