目录
-
-
-
- 一、常用的js基础知识
- 二、常用的谷歌操作
- 三、jsvmp的特征
- 四、jsvmp扣逻辑
-
-
一、常用的js基础知识
- js各种运算符:比如位运算符:
&、|、^、~、<<、>>、>>>
,算术运算符:+、-、*、/、%、++、--
文章图片
文章图片
- 三元运算符又称条件运算符
?
:表达式结果为true
执行冒号前的
:value = https://www.it610.com/article/表达式 ?为true执行:为false执行 ,比如a = 5> 3 ? “true” : “false”
文章图片
文章图片
文章图片
-
String.fromCharCode(num)
:可接受一个指定的 Unicode 值,然后返回一个字符串
文章图片
-
'str'.charCodeAt(num)
:返回字符串指定位置单个字符串的Unicode编码
文章图片
-
parseInt()
:把一个字符串对象转换为一个指定进制的Number
文章图片
-
toString()
:把一个Number对象转换为一个指定进制的字符串
文章图片
- 【SpiderCrawl|js逆向案例-jsvmp纯扣逻辑】
slice()
:截取指定位置范围的字符串
文章图片
- 谷歌开发者工具打断点,如鼠标选择行号右击,
插桩断点Add logpoint
可以打出日志,如条件断点Add conditional breakpoint
可以根据输入的条件表达式为true的时候自动debugger住
文章图片
- xhr断点监控:根据url请求中的链接参数特征,指定监控
文章图片
- jsvmp的特征:请求参数signature反爬,加密算法文件为
acrawler.js
以及文件里面典型的提示字符window)._$jsvmprt("
文章图片
- 关于jsvmp的代码逻辑有点类似生成器执行,可以看这篇文章简单了解下
- 关于jsvmp生成的逻辑思路看这篇文章,简单了解下
- 关于jsvmp虚拟机保护方案
- 关于jsvmp的解法一般有3种,
补环境,和插桩扣逻辑,jsrpc
,当然还有自动化等方式可自行研究试试 补环境
的可以看这篇文章有相关介绍 ,网上有很多,可随意查找插桩扣逻辑
的可以看这两篇文章:逆向简史的公众号,文章前半部分讲了补环境的关键点,文章后半部分讲了如何扣代码的关键点,以及关键的算法函数,强烈推荐,看完实际操作一遍,你会豁然开朗;当你学会了逆向简史的文章,然后再看小小白的公众号,跟着他的思路介绍再巩固一遍
- 定位入口:目标参数signature,采用xhr断点定位,发现是由
acrawler.js
这个文件生成的,然后我们插桩日志输出,找出window.byted_acrawler.sign
函数的传入参数,然后就可以通过补环境的方式生成signature,补环境和该篇文章的解决思路差不多,此处视频讲解在公众号:逆向OneByOne有
文章图片
文章图片
- 扣代码正式逻辑:如果你看完逆向简史公众号的文章你一定知道signature 是由 9 部分组成的,第一部分是固定参数,剩余的8部分都分别由相应的算法逻辑生成
文章图片
- 接着重中之重的是打日志断点插桩的位置:分别在arcawler.js的184行和425行加入日志插桩断点,内容如下
"索引j", j,"索引O", O, " 值:", JSON.stringify(S, function(key, value) {if (value =https://www.it610.com/article/= window) {return undefined} return value})
文章图片
文章图片
- 然后我们清除网页缓存,刷新网页,会发现大概有
1.5w的插桩日志
打印出来,而通过ctrl+f搜索,signature也在我们打印的日志里面输出了,也就是j ===24 && O === 40336
这个位置有了signature以及其对应的值_02B4Z6wo00f010kDMrgAAIDCwkipWBmxc99JAzYAALBd35
文章图片
- 我们继续搜索值
_02B4Z6wo00f010kDMrgAAIDCwkipWBmxc99JAzYAALBd35
,会发现signature的最后两位也就是第9部分135,生成逻辑是
c468ee35`这个字符串的后两位截取生成的,然后我们分别搜索其它②~⑧这几个部分生成的位置
① _02B4Z6wo00f01 ② 0kDMr ③ gAAID ④ Cwkip ⑤ W ⑥ Bmxc9 ⑦ 9JAzY ⑧ AALBd ⑨ 35
文章图片
- 每部分都是由单个字母拼接而成,我们拿第2部分
0kDMr
再详细看下这个流程
文章图片
文章图片
文章图片
文章图片
文章图片
- 最终第2部分
0kDMr
的生成逻辑就是这个,那其实我们只要继续研究这个[48]、[107]、[68]、[77]、[114]这些数字是怎么生成的即可;这个你在逆向简史的文章里面也可以找到答案,或者在我公众号里面的视频里也能知道如何去逆出这个结果
文章图片
- 比如48是(
35394057981102
>>2>>24)&63-4得到的,35394057981102
其实是由二进制转换而来,由于细节太多,讲不清楚,可以到逆向简史的文章继续看分析逻辑
文章图片
- 对啦,我开了微信公众号:
逆向OneByOne
,后面有些我以前发的比较好的文章会逐步迁移到公众号下
推荐阅读
- SpiderCrawl|js逆向案例-某知x-zse-96补环境与扣逻辑
- SpiderCrawl|JS逆向案例-web某音弹幕protobuf逆向解析
- SpiderCrawl|JS逆向-Protobuf逆向解析
- CSS|一行代码渲染头像
- 性能|SQL调优心得(二)(常见性能问题的优化)
- javascript|SegmentFault 创始人祁宁对话 C# 之父 Anders Hejlsberg
- MyGameLife|【MyGameLife】我的游戏职业生涯是从TS(TypeScript)开始的(2|CSDN创作打卡)
- javascript|Delphi、C#之父Anders Hejlsberg首次访华 推广TypeScript
- Vue|Vue组件之间的数据共享