js逆向案例_小白JS逆向
js逆向案例
目录
-
-
- 零、概述
- 一、请求参数|Cookie|Referer校验(⭐)
-
- 1、案例1_有道翻译
- 2、案例2_百度翻译
- 二、参数响应加密解密AES、DES、RSA(⭐)
-
- 1、案例3_建筑市场_AES
- 2、案例4_毛毛租_AES
- 3、案例5_翼龙登录_DES
- 4、案例6_房天下登录_RSA
- 三、其它js混淆(⭐⭐)
-
- 下一篇文章待发布
-
零、概述
-
难度系数一颗星,简单的js逆向,适合初级新手练习,每个案例1小时内可完成破解
-
涉及到md5、aes、des、rsa,本地需安装node环境,然后再安装crypto-js库:
npm install -g crypto-js
-
base64、des、aes、rsa、eval加密解密、url编码工具
-
eval之js的加密解密工具
-
sojson_v6、v5、v4加密工具
-
obfuscator混淆
-
各种useragent合集
-
js当中遇到base64、window.btoa、window.atob处理方法
-
python还原AES、DES、RSA等加密解密代码
-
严禁带着攻击目的对网站进行研究或对网站造成不稳定等影响,请遵循网站所规定的一切robots.txt协议,建议仅限学习练习
一、请求参数|Cookie|Referer校验(⭐)
1、案例1_有道翻译
-
(1)案例网址: 点击网址,execjs调用或python还原逻辑
-
(2)案例反爬点:
请求参数salt、sign、Its、bv可变,请求头cookie和referer反爬校验
-
(3)案例分析:采用
salt:
关键词搜索精准定位js文件-
定位到js文件,通过搜索关键词发现r = v.generateSaltSign(n)这一段js即是生成参数salt、sign、Its、bv的方法
-
点击进入 v.generateSaltSign(n)这个方法,
直接找到salt、sign、Its、bv这4个参数js的生成方法
,有两种可以解析加密参数,1种是通过直接扣出这段js通过execjs来解析,另1种是通过python还原js逻辑解析;由于该段js逻辑加密一目了然,所以我们选择python还原js逻辑进行解析
-
cookie、Referer校验,其中cookie是由首页Set-Cookie而得,referer直接加在header里即可,较简单
-
最终代码、待上传
-
2、案例2_百度翻译
-
(1)案例网址: 点击网址,execjs调用
-
(2)案例反爬点:
请求参数sign、token可变,请求头cookie反爬校验
-
(3)案例分析:采用
sign:
关键词搜索精准定位js文件,直接找到sign、token生成位置
- 点击进入f(n),找到sign生成的js,其中这段js差i参数,i就是window.gtk为定值,还差个n函数,点击扣出即可,这里js较长,直接用execjs调用解析即可
- cookie、token,toke可以从页面响应里直接搜到;逻辑上是第一次请求首页拿到cookie,再带着cookie进行第二次请求,正则提取响应里面的token即可,第三次请求即可正常翻译
- 最终代码、待上传
- 点击进入f(n),找到sign生成的js,其中这段js差i参数,i就是window.gtk为定值,还差个n函数,点击扣出即可,这里js较长,直接用execjs调用解析即可
二、参数响应加密解密AES、DES、RSA(⭐)
1、案例3_建筑市场_AES
-
(1)案例网址: 点击网址,execjs调用,或者python还原
-
(2)案例反爬点:
Cryptojs_AES_CBC加密, 响应加密返回的hexStr
-
(3)案例分析:aes解密既可以python还原也可以通过js调用
-
方法1:选择python直接还原aes,直接搜索’decrypt’,找到key和iv,进行还原
-
方法2:js还原,通过
XHR断点
来定位, 翻页断点看堆栈右侧栏的堆栈Call Stack,往堆栈前面的方法撒鱼式打断点,然后调试
-
逐步调试,直接找到关键方法,熟悉加密的,一眼就能看出这是cryptojs里面的aes之cbc加密模式,根据js的逻辑
enc.Hex.parse
,可以判断出响应式16进制的字符串。选择用python的aes库还原
-
本案例不用扣js,对于CryptoJS加密解密的了解,直接找出key,iv,再确定加密模式,然后写js代码即可。aes校验工具
-
最终代码、待上传
-
2、案例4_毛毛租_AES
-
(1)案例网址: 点击网址,execjs调用或python直接还原
-
(2)案例反爬点:
Cryptojs_AES_CBC加密, 响应加密返回的base64Str,请求参数也是相同加密
-
(3)案例分析:通过搜索词
encrypt
断点来定位,直接找到js关键加密解密的位置,此为cryptojs里面的aes之cbc加密解密模式,响应是base64字符串(选择用python的aes库还原)- aes加密,直接找key,iv,mode方式,用python还原即可
- 本案例既可以用js,也可以用python直接还原加密解密
- 最终代码、待上传
- aes加密,直接找key,iv,mode方式,用python还原即可
3、案例5_翼龙登录_DES
- (1) 案例网址:点击网址
- (2)案例反爬点:
des加密登录密码参数,暂不做图形验证
- (3)案例分析:直接搜索关键词
encrypt
精准定位,扣js或者python还原都可以
- 最终代码、待上传
4、案例6_房天下登录_RSA
-
(1)案例网址: 点击网址,execjs调用或python直接还原
-
(2)案例反爬点:
rsa加密登录密码参数、referer校验
-
(3)案例分析:方法1:由于已经知道是RSA加密,可以选择用python还原,对于python还原的RSA有两种方式,一种是js对应的是
setPublicKey
已事先生成,另一种是new RSAKeyPair
的方式。也可以扣js- 方法1: 尝试
new RSAKeyPair
搜索找到类公钥复制下来即可,用python还原测试成功
尝试直接搜索setPublicKey
找到公钥,用python还原(此种方法实践后发现与网页生成结果不一致,舍弃)。
- 方法2:扣js通过搜索关键词
pwd:
,找到关键位置
- 点击进入encryptedString方法,直接将RSA整个js文件扣下来,其中
key_to_encode
也通过全局搜索,扣出相应js代码
- 本案例直接用js调用加密,拼接js代码,运行如下;
- 最终代码、待上传
- 方法1: 尝试