JS逆向---补环境方法详解(案例一分析-今日头条)


前言

该文章主要进行讲解遇到JSVMP情况下怎样进行补环境方法对JS部分进行逆向


声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除,请各位自觉遵守相关法律法规。


一. JS虚拟机保护方案

  • 参考文章:https://mp.weixin.qq.com/s/YDx5Dr-HDfAm-sAqeWW0qg

常见的jsvmp的实现方法,你可以理解为:就是自己写了一段代码解释器,用来解释自己的代码
而这个自己的代码:可以是密文,也可以是所谓的明文

关于jsvmp的解法一般有3种,

  • 补环境
  • 插桩扣逻辑
  • JS-RPC技术进行远程调试

当然还有自动化等方式可自行研究试试

二. 实战分析

  • 逆向目标:今日头条
  • 逆向参数:_signature
  • 逆向接口:feed?channel_id=31893990

确定数据逆向接口和逆向参数后,直接对逆向参数进行搜索
在这里插入图片描述
确定该加密参数位置,然后进行一步一步调试分析,打下断点,对u进行分析
在这里插入图片描述
再次打下断点,发现返回值即为我们要的加密参数值,分析返回值的这个三元表达式(具体分析可看知识补充)

知识补充
这段代码是一个三元表达式,它的作用是根据条件判断来赋值给变量 o.body。
条件部分是 t.data,它判断了变量 t.data 的值是否为真。如果变量 t.data 为真,则执行赋值操作:o.body = t.data。
如果条件部分的结果为假,那么会执行冒号后面的表达式。这个表达式是一个函数调用 (null === (a = null === (n = window.byted_acrawler) || void 0 === n ? void 0 : n.sign) || void 0 === a ? void 0 : a.call(n, o)) || “”。
这个函数调用首先判断 window.byted_acrawler 对象是否存在,然后从该对象中获取 sign 属性,并将其赋值给变量 a。如果 a 的值为 null 或者 undefined,则整个函数调用结果为 undefined。否则,会调用 a 对应的函数,传入参数 o,并将函数调用的结果赋值给 o.body。如果函数调用的结果为 null 或者 undefined,则整个函数调用结果为 undefined。最后,如果整个三元表达式的结果为 undefined,则会将空字符串赋值给 o.body。
简而言之,这段代码的作用是先判断 t.data 是否为真,如果为真则将其赋值给 o.body。如果 t.data 为假,则判断 window.byted_acrawler 对象是否存在以及其属性 sign 对应的函数是否存在。如果都存在,则调用该函数并将结果赋值给 o.body。如果函数调用的结果为 null 或者 undefined,则将空字符串赋值给 o.body。

综上所述,其实加密参数_signature就是window.byted_acrawler.sign函数生成
所以直接在控制台打出window.byted_acrawler.sign进行搜索
在这里插入图片描述
该JS文件为JSvmp
对该文件全复制,拿在node.js里面进行补环境操作
细节分析补环境如下:
在这里插入图片描述
在这里插入图片描述
输出结果
在这里插入图片描述
补充了referrer,sign,href,length,useragent
signature长短和cookie的长度有关,所以打上条件断点,然后我们再补个cookie,而且document.cookie的位置得往后放,否则可能被删除清空什么的;还有signature如果不成功的话,有可能就是此处281行出了问题,可以对比的继续补环境

写在最后:
本人写作水平有限,如有讲解不到位或者讲解错误的地方,还请各位大佬在评论区多多指教,共同进步.如有需要代码和讲解交流,可以加本人微信18847868809

猜你喜欢

转载自blog.csdn.net/m0_52336378/article/details/133042514
今日推荐