【JS逆向百例-2】某票房数据逆向分析


声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,相关网址和数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!若有侵权,请联系删除!
 
 

前言

  • 网址:a142fba3ce81b2b367bdfb6fe9b0ae5f
  • 加密接口:b806cc12db93aacb67a81f0faa2ff1e2
     
     

抓包分析

万能第一步,F12打开开发者工具进行抓包,因为这个网址有日期,所以我们可以通过这个来进行发包
在这里插入图片描述
然后找到带有数据的接口,发现是在这里
在这里插入图片描述
很明显,数据是已经加密的,然后看请求头、查询参数、cookie,发现是没有加密的,所以我们的逆向目标只有一个:解密响应数据
 
 

逆向分析


大概来分析一下:

一个网站如果返回的数据加密了,那么显示在浏览器时是一定要解密的,这种算法显然就是对称算法,要么就是DES,要么就是AES,也可能是魔改算法,但是大概率都会有decrypt这个关键字,所以我们可以先尝试关键字搜索来进行定位


我们来搜索一下关键字decrypt在这里插入图片描述
可以发现,第一个文件名有我们眼熟的DES,想也不用想,我们先排查第一个文件,给出现decrypt的地方打上断点,重新发包,看看断在哪一个地方
在这里插入图片描述
成功断住!!!离成功不远啦,先来看看这段代码

_0x554c90 = _grsa_JS[_0x2246('0x25d', 'E&PI')]['decrypt']({
                        'ciphertext': _grsa_JS['enc'][_0x2246('0x25e', 'sy^o')]['parse'](_0xa0c834)
                    }, _0x2cf8ae, {
                        'iv': _0x554c90,
                        'mode': _grsa_JS[_0x2246('0x16c', 'O^50')][_0x2246('0x25f', 'Who^')],
                        'padding': _grsa_JS[_0x2246('0x260', '7IfV')][_0x2246('0x261', 'E&PI')]
                    })[_0x2246('0x1c', 'yY#5')](_grsa_JS['enc'][_0x2246('0x262', ']2BX')]);

显然这是一段ob混淆代码,其中的_0x2246('0x25d', 'E&PI')就是DES,并且整体上看也是对称算法的风格

  • iv:偏移量
  • mode:工作方式
  • padding:填充模式
     

将这段代码放在控制台输出
在这里插入图片描述
完美,得出结果,但是仔细一看后面,好像有多余的东西,那显然这段数据没有处理完,我们可以下一步进行调试,找一找显眼的东西
在这里插入图片描述走到这一步的时候,可以看到参数e是加密的数据,而webInstace.shell(e)打印的正是我们需要的数据并且已经处理干净,接下来我们进入到这个函数中,把它扣下来放在node中
在这里插入图片描述

 
 

扣代码

在这里插入图片描述
把它扣下来运行后,大多就是这种错误,只需要根据缺啥补啥的原则慢慢去补就好了
在这里插入图片描述
在这里插入图片描述
在这个报错里,我们不仅要扣那个数组,还要把下面那个自执行方法拿下来,当然,对于这种ob混淆代码,也可以全扣,也可以去慢慢扣
在这里插入图片描述
到了这里,我相信许多人的想法都和我一样,以不报错为主,所以直接就是写上navigator = {}
在这里插入图片描述
很好完美,不报错了,但是纳闷的是,没有打印出任何结果,后面排查了下,就是上面的补环境少补了!

case '7':
	if (!navigator || !navigator[_0x2246('0x26d', '0I#o')])
      	return '';

看看这段代码,前面的navigator 有了为false,但是因为没有补后面的东东,所以后面的判断为true,所以给我们返回了空!!!真坑啊,把_0x2246('0x26d', '0I#o')拿去打印一下,发现是userAgent,我们补上就可以了

navigator.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'

然后我们继续运行,继续扣缺少的代码,就到了这一步报错
在这里插入图片描述
去源代码可以发现,这是一个对象,里面存放了一些处理好了的函数
在这里插入图片描述
仔细一看,这不就是和node中那个加密模块差不多嘛,所以我们只需要加上这个代码就完事了

var crypto = require('crypto-js')
_grsa_JS = crypto

输出发现,成功!!!
在这里插入图片描述
 
 

Js部分实现

function get_data(e) {
    return aaa(e)
}

 
 

Py部分实现


import requests
import execjs

with open('./解密.js', 'r', encoding='utf-8') as f:
    js_code = execjs.compile(f.read())

headers = {
   
}
response = requests.post(url, headers=headers, data=data)

data = js_code.call('get_data', response.text)

print(data)

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值