新版某乎Js逆向分析

简介: 新版某乎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];
};

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

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

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

相关文章
|
2月前
|
Web App开发 前端开发 JavaScript
技术心得记录:瀑布流的布局原理分析(纯CSS瀑布流与JS瀑布流)
技术心得记录:瀑布流的布局原理分析(纯CSS瀑布流与JS瀑布流)
26 0
|
2月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
1月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
12 0
|
1月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
25 0
|
1月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的学生成绩分析和弱项辅助系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的学生成绩分析和弱项辅助系统附带文章源码部署视频讲解等
26 0
|
2月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的高校智能培训管理系统分析与设计附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的高校智能培训管理系统分析与设计附带文章和源代码设计说明文档ppt
24 1
|
3月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的法律咨询系统的分析与设计附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的法律咨询系统的分析与设计附带文章和源代码设计说明文档ppt
28 1
|
2月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的电商数据分析附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的电商数据分析附带文章和源代码部署视频讲解等
27 0
|
3月前
|
数据采集 JavaScript 数据可视化
Node.js爬虫在租房信息监测与分析中的应用
Node.js爬虫在租房信息监测与分析中的应用
|
3月前
|
JavaScript 前端开发 API
框架分析(3)-Vue.js
框架分析(3)-Vue.js