小红书x-s 最新 JS逆向 jsvmp

目录

前言

JSVMP是什么

JSVMP一般怎么处理

小红书X-S案例实战

流程分析解决过程

最后整合代码出结果


前言

  • 爬虫越来越内卷,js防护技术日益精进,更多的网站采用vmp的技术反爬,vmp 就是虚拟机 就是混淆控制流 ,但是如果你想像调试普通js一样跟栈, 那么可能你跟个好多天都不一定能搞出来 ,搞的头晕眼花,非常恼火。。。怎么办?还是得硬着头皮干,不能畏惧,需要极强耐心, 本文重点分析分享如何处理jsvmp, 内容为个人见解,不足之处请多指教

JSVMP是什么

  •  jsvmp(JavaScript Virtual Machine Protection)是一种前端代码虚拟化保护技术。它将JavaScript源代码首先编译为自定义的字节码,只有对应的解释器才能执行这种字节码。

    .......巴拉巴拉网上搜出很多类似介绍,大概单了解一下就行,不太理解没关系

  • 个人理解,实际上jsvmp就是一种软件实现的计算机硬件系统,比如某些代码在程序运行过程,起到拟寄存器的作用,用来存值。去了解下电脑CUP工作原理,学过汇编会更易于理解

  • 简化的描述流程

  •  在JSVMP逆向分析中,寄存器,循环是重要的特征,还有有一个特性,加密结果是一个一个字符生成的,基本由一个循环就是for循环或者while循环以及switch case控制。这一点至关重要,算法的分析还原就依赖这个特性。

JSVMP一般怎么处理

  • 目前解决jsvmp的主要方案为3种;1、rpc; 2、补环境;3、插桩日志还原算法,第一种不难,第二种补环境遇到小红书x-s这样的检测点太多,对新手来说也不好高,本人喜欢后面这种硬干,一但熟悉了jsvmp流程,硬干挺爽的,思维沉浸在日志分析中 ,一步一步,由浅入深,攻破他的感觉很爽,哈哈哈
  • 总结下,JSVMP,一般在代码中会有一个超长字符串(指令),然后会把这个字符串decode成一个大数组,不断循环从数组中取指令,分配函数执行运算操作,运算过程会在一个数组或者对象中不断放进或取出生成的值,最后生成目标结果,这个过程会有+,/,%,*操作,会有个apply操作,这些都是插桩的关键位置
  • 个人建议对 jsvmp 不太熟的, 了解了如上信息,可以先去实战下携程的testab,kar98k,

小红书X-S案例实战

流程分析解决过程

  • 登录,笔记,评论,点赞等接口目前都需要校验x-s
  • 全局搜索,堆栈跟踪,hook三大法,随便选一个就能轻松定位到关键函数window._webmsxyw
  • 单步进去,就是vmp的代码了,这个时候不能再单步调试了,否则就迷失在里面了,天荒地老也搞不出了,
  • 先把整段代码复制到Notepad++,折叠查看下代码结构
  • 一共五百多行大概看下结构,结合文章开头提到的jsvmp特征,心里有个大概
  • 那咱们就先在关键地方插桩看看(忘记说了,本文暂时以这个接口调试com/api/sns/web/v1/login/qrcode/create),进vmp后这些位置插桩(循环处,apply处)
  • + /  * % 等运算处打上日志
  • 完蛋了,日志太多,浏览器卡死了😢。。。电脑都卡死机了😂☠️。别怕,这就是真实的调试过程
  • 现在来想一下为什么在上面这几个位置打断点🤪,如果不明白再回到文章开头读一遍,
  • 当你懂了为什么这样插桩,就入门了,再多搞几个jsvmp就出师了,再遇到就不是什么难事了
  • 如果到了里文章反复看了几遍还是不明白,拉到文章底部扫码解答👌
  • 废话不多说,来分析关键问题,为什么卡死,代码中一共有两个while循环,刚才只在第一个循环处插桩了,日志一直打印直至卡死,说明陷入大量无用循化,那就是插桩位置不对,,那好知道了原因,就有了解决办法,,尝试在其第一个插桩,第二个循环处打断点,看清楚第二处,打断点,不是接着插桩,
  • 就这样再来一遍,发现代码在循环一处运行没几次就在第二个循环处断下,那好既然第二个循环会运行,第一个又会永不停止的循环,那就把第一处关了,第二处改为插桩,放开断点,接着发现可以正常打印日志了,
  • 接下来的工作就是,查看日志,根据打印出来的消息分析规律,一边根据分析得到的规律一边查看相应位置执行了那些操作
  • 基本都是逆着看,先看结果,再看结果怎么来的,上步怎么操作的,看看看着就找到全部算法了
  • 这个过程不在本文续写了,一个真的费时间,一个是要想有所得,就得自己亲自分析领悟。
  • 实在不行,可以拉到文章底部扫码

最后整合代码出结果

写文章真的是花时间,又没奖励,有时候真不知道研究这些干啥,哎,就是喜欢硬干的小小成就感吧,希望对有缘人有所帮助吧!

如读完还有疑问的朋友可联系我,深入交流

  • 35
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老妖哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值