猿人学第十八题(jsvmp)

前言:记录一下

分析参数

 

从图中可以看到第一页没有什么加密参数,第二页才开始有 ,其中最为关键的是v,t

加密入口方向

 进去后会看到这可能是个AES加密

 

 在这里下个断点

 会看到这个pwdsecret_key

向上跟栈,他们是从这里return  yU_[_v].apply(yU_, __)进来的

 其实这两处就是本题最关键的了,对于jsvmp常见的有两种方法,第一中是补环境,第二个是日志断点算法还原,我这里用的是日志断点算法还原,分别在这两个位置

第一个

第二个

 下完后刷新看控制台

 

 

这是日志结果 , 从第一红线处可以看到将十位数的时间戳通过 toString(16)转化为16进制的字符串64dfad00 ,secret_key =64dfad00+64dfad00,pwd= 2|72m569,71m569,70m569,70d569,70u569,2为page,72m569,71m569,70m569,70d569,70u569是滑动轨迹,可以固定

 secret_key其实就是AES加密的密钥,通过parse化为words

pwd是AES加密的内容 ,通过parse化为message,

iv和key都是通过secret_key得来的,iv=key

分析到这就差不多了

 

v=['N', 'j', 'z', 'w', 'B', 'l', 'C', 's', 'F', 'C', 'w', 'k', 'I', 'f', '9', 't', 'i', 'z', 'Y', '3', '7', 'C', 'R', '5', 'd', 'e', 'M', 'A', 'R', 'T', 'p', 'S', 'e', '1', 'y', 'h', 'X', 'B', 'V', 'H', 'r', 'G', 'U', 'P', 'b', 'F', 'v', 'Q', 'A', '6', '7', 'w', 'R', 'K', 'F', 'b', 'D', 'i', 'X', 'F', 'C', '1', 'm', '2'].join ('')

 

JS加密代码

const CryptoJS = require("crypto-js")

function getEncrypteddata(page) {
    t = Date['parse'](new Date()) / 1000
    secret_key = t.toString(16) + t.toString(16)
    key = iv = CryptoJS.enc.Utf8.parse(secret_key);
    srcs = CryptoJS.enc.Utf8.parse(`${page}|56d400,56d400,56u400,56u400,136u16`);
    let encrypted = CryptoJS.AES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return {
        page: page,
        t: t,
        v: encrypted.toString(),
    }
}

python代码

import execjs
import requests
from loguru import logger

js_code=execjs.compile(open('demo.js','r',encoding='utf-8').read())
cookies = {自己的cookie}


headers = {自己的headers}
nums=0
for page in range(1,6):
    params=js_code.call('getEncrypteddata',page)
    if page>3:
        headers['user-agent']='yuanrenxue.project'
    response = requests.get('https://match.yuanrenxue.com/match/18data', headers=headers, params=params,cookies=cookies)
    res=response.json()
    logger.debug(res)
    for k in res['data']:
        nums+=k['value']
logger.debug(nums)

提交结果图

 

如果还是不是很清楚,可以参考下面的文章

js逆向之猿人学-反混淆刷题平台第十八题(jsvmp) - 知乎 (zhihu.com)

如有侵权请及时联系删除,谢谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值