上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

猿人学第一题js混淆加密

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 96 天

    [LV.6]常住居民II

    143

    主题

    525

    帖子

    848

    积分

    版主

    Rank: 8Rank: 8

    积分
    848

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2020-12-30 20:39:27 | 显示全部楼层 | 阅读模式

    image.png

    抓取机票价格,计算平均值。

    先说一下自己的思路,价格源码没有毫无疑问肯定是向服务器发送了一个请求,然后返回回来价格列表,我们只需要将返回的数据,取出我们所需要的价格计算即可。

    首先,打开开发者工具,进行抓包。

    image.png

    debug直接跳过就可以不影响我们后面的操作。

    image.png

    刷新,通过简单的分析我们看到了这条请求,看一下返回的数据。

    image.png

    是我们需要的价格,看一下这个链接:http://match.yuanrenxue.com/api/match/1?m=42532d8cc5d339a5b8a434a7c282e53d%E4%B8%A81609426851

    后面参数m有一个简单的加密,经验告诉我去解码看一下这条链接。

    image.png

    %E4%B8%A8是符号“|”,多次抓包发现每次都携带这个符号,开发者工具中搜索这个符号。

    image.png

    image.png

    可以看到只有一条包含这个符号,进入js文件分析一下。

    这是一整行代码,观察分析起来非常不方便,了解到notepad++里面自带插件jstool对它进行格式化,之后进行观察。

    image.png

    这样观察起来就方便很多。

    image.png

    找到了m所在位置。

    var m = oo0O0(timestamp.toString()) + window.f;

    oo0O0()猜测是一个函数

    timestamp.tostring()时间戳转字符串

    window.f 窗口调用f,f是啥玩意....我也不知道,先不管。先分析都是圈圈的那个函数。

    搜素oo0O0这个函数 找到了两处 一处是function oo0O0() 另外一处就是我们m调用的这个函数

    image.png

    花里胡哨的返回了一个空.....

    var m = window.f;

    源码中搜索window.f

    image.png

    源码中没有找到这个window.f具体是什么东西....搜索方式可能不对,但是肯定不可能单独搜索f不然太多了。。

    oo0O0()返回一个空,多少有点不太正常,我们回去重新看一下,发现在返回空上面那一行出现了

    eval(atob(window['b'])[J('0x0', ']dQW')](J('0x1', 'GTu!'), '\x27' + mw + '\x27'));

    eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

    eval中有一个函数atob()

    atob() 方法用于解码使用 base-64 编码的字符串。

    我们将atob(window[’b‘])在console里面跑一下

    image.png

    稍微有点经验都可以看出来这是md5加密的算法

    image.png

    md5算法的最后我们看到了window.f ,window.f就是将“mwqqppz”进行md5加密之后的值,mwqqppz这是啥玩意....我也不知道

    将eval函数后面的J('0x0', ']dQW')扔进console看一下。

    image.png

    j是在oo0O0函数里面定义的,我们先运行oo0O0函数的代码定义一下这个J 然后再去跑这个J('0x0', ']dQW')

    image.png

    我们看到window.f里面进行md5计算的字符串出来了 是这个代码J('0x1', 'GTu!')

    '\x27' + mw + '\x27'

    这个为什么会找不出来值呢

    image.png

    我们可以看到'\x27'就是个单引号 至于mw是OOOOOO函数传进来的参数,

    我们知道eval函数里面各种东西的意思之后,我们把我们取出来的值替换观察一下。

    eval(atob(window['b'])[J('0x0', ']dQW')](J('0x1', 'GTu!'), '\x27' + mw + '\x27'));

    eval(atob(window['b'])['replace']('mwqqppz', 'mw'));

    这个的大概意思就是....将atob(window['b']里面的'mwqqppz'文本替换为 'mw',也就是替换成传入的参数--时间戳。

    我们捋一下思路看一下,

    var timestamp = Date.parse(new Date()) + 100000000;

    var m = oo0O0(timestamp.toString()) + window.f;

    var m = window.f

    var m =hex_md5(mwqqppz)

    var m = hex_md5(mv)

    var m = hex_md5(timestamp)

    放进调试工具调试看看。

    我们的初始链接:http://match.yuanrenxue.com/api/match/1?m=42532d8cc5d339a5b8a434a7c282e53d%E4%B8%A81609426851

    image.png

    带入我们刚才的时间戳验证一下 经过计算 m的值得到了。

    剩下的就是写代码了,用e 的话可能5分钟可以搞定,但是为了练习自己的python用python尝试写一下看看。

    根据了解python可以用过execjs来执行js文件,我们讲创建js文件然后调用这个js得到加密后的数据使用即可。

    image.png

    计算成功python代码不做解释代码如下:

    import requests
    import execjs
    import time
    
    def Get_md5_value():
        #读取JS文件
        with open('JS/JS.js',encoding='utf-8',mode='r') as f:
            JSdata = f.read()
        #加载JS文件,通过call()传入我们需要调用的函数
        psd = execjs.compile(JSdata).call('get_cipher')
        psd = psd.replace('丨','%E4%B8%A8')
        return psd
    
    def Get_data(page_number,md5):
        url = 'http://match.yuanrenxue.com/api/match/1?page='+str(page_number)+'&m='+md5
        headers = {
            'Host': 'match.yuanrenxue.com',
            'Referer': 'http://match.yuanrenxue.com/match/1',
            'User-Agent': 'yuanrenxue.project',
        }
        res = requests.get(url=url,headers=headers)
        return res.json()
    
    if __name__ == '__main__':
    
        sum_num = 0
        index_number = 0
        for page_number in range(1,6):
            info = Get_data(page_number,Get_md5_value())
            price_list = [i['value'] for i in info['data']]
            print(f'第{page_number}的价格表{price_list}')
            sum_num += sum(price_list)
            index_number += len(price_list)
            time.sleep(1)
        average_price = sum_num/index_number
        print(f'机票的平均价格为{average_price}')

    注:借鉴了大佬思路.

    image.png
    bilibili:陈公子的话   公众号:陈公子的话
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 96 天

    [LV.6]常住居民II

    143

    主题

    525

    帖子

    848

    积分

    版主

    Rank: 8Rank: 8

    积分
    848

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2020-12-30 20:40:21 | 显示全部楼层
    这图片我也是....没整明白....咋就成这了....
    bilibili:陈公子的话   公众号:陈公子的话
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 00:09
  • 签到天数: 67 天

    [LV.6]常住居民II

    150

    主题

    2001

    帖子

    2133

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    2133

    猫咪币纪念章热心会员活跃会员突出贡献三好学生中秋纪念章国庆纪念章管理员家财万贯

    发表于 2020-12-31 09:36:31 | 显示全部楼层
    小陈 发表于 2020-12-30 20:40
    这图片我也是....没整明白....咋就成这了....

    markdown的原因....修复了应该就好了
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    20

    帖子

    30

    积分

    助理工程师

    Rank: 1

    积分
    30

    新人报道猫咪币纪念章国庆纪念章中秋纪念章

    发表于 2020-12-31 12:35:47 | 显示全部楼层
    果然这个论坛里除了我是fw其他都是大佬
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 96 天

    [LV.6]常住居民II

    143

    主题

    525

    帖子

    848

    积分

    版主

    Rank: 8Rank: 8

    积分
    848

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2020-12-31 13:55:04 | 显示全部楼层
    StudyMaker 发表于 2020-12-31 12:35
    果然这个论坛里除了我是fw其他都是大佬

    哥哥谦虚了
    bilibili:陈公子的话   公众号:陈公子的话
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表