您当前的位置: 首页 >  爬虫

不会翻墙的泰隆

暂无认证

  • 6浏览

    0关注

    31博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【爬虫进阶】猿人学任务一之JS混淆(难度2.0)

不会翻墙的泰隆 发布时间:2022-09-15 17:29:24 ,浏览量:6

目录
  • 简介
  • 分析
  • 扣代码(心态崩)
  • 成果

简介

你问我Js逆向是什么?请看:👇👇👇

分析

网站:aHR0cHM6Ly9tYXRjaC55dWFucmVueHVlLmNvbS9tYXRjaC8x(base64解密)

  1. 打开调式,发现弹出无限Debug,有几种跳过方法就不过多说明,我这里采用最简单的方法直接在debug行号下右键,点击不在此处暂停,就能跳过debug 在这里插入图片描述

  2. 跳过之后刷新一下页面,找到数据接口,有一个m参数,毫无疑问,我们需要逆向的就是它了 在这里插入图片描述

  3. 全局搜索m,可惜找不到,从题目标题大概可以确定代码都混淆过了

  4. 我们直接在启动堆栈里面找调用的js,前两个都是jquery,所以我们直接从第三个开始入手 在这里插入图片描述

  5. 确实是混淆,我们在控制台打印一下_0x2268f9,看看这是个啥玩意 在这里插入图片描述

  6. 打开控制台,又一个debug,老样子行号右键,一律跳过! 在这里插入图片描述

  7. 跳过之后,继续打印,结果是一个时间戳 在这里插入图片描述

  8. 再往下看_0x57feae,里面调用了oo0O0函数,点进去看看 在这里插入图片描述

  9. 找到oo0O0函数,代码无法格式化,利用格式化工具美化一下 在这里插入图片描述

  10. 继续往下看,打印所有参数,发现_0x5d83a3[‘\x6d’]和M参数很接近,会不会就是要破解的M呢? 在这里插入图片描述

扣代码(心态崩)

激动的心颤抖的手,看到代码就全身发抖 接下来就是最最最关键的扣代码环节,也是很关键的部分,要是扣不好,前面白费功夫

  1. 上面已经找到oo0O0函数,经过美化,我们得到:

    function oo0O0(mw) {
    	window.b = '';
    	for (var i = 0,
    	len = window.a.length; i > ( - 0x2 * C & 0x6)) : 0x0) {
    					W = m['indexOf'](W)
    				}
    				return A
    			};
    			var t = function(w, m) {
    				var T = [],
    				A = 0x0,
    				C,
    				b = '',
    				W = '';
    				w = Y(w);
    				for (var R = 0x0,
    				v = w['length']; R  16) + (c >> 16);
    	return (b > ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15)
    	}
    	return d
    }
    function binl2b64(d) {
    	var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    	var f = "";
    	for (var b = 0; b > 2] >> 8 * (b % 4)) & 255)  2] >> 8 * ((b + 1) % 4)) & 255)  2] >> 8 * ((b + 2) % 4)) & 255);
    		for (var a = 0; a  d.length * 32) {
    				f += b64pad
    			} else {
    				f += c.charAt((e >> 6 * (3 - a)) & 63)
    			}
    		}
    	}
    	return f
    };
    window.f = hex_md5(mwqqppz)
    
  2. 很容易理解,这里就是把 mwqqppz 替换成了 mw, 通过eval执行hex_md5(mw), 最后赋值给 window.f

  3. 我们将window.f 稍微改一下,就能得到m了

    function get_param(ts){
        var timestamp = parseInt(ts)
        var mwqqppz = timestamp + 100000000
        var m = hex_md5(mwqqppz.toString()) + '丨' + mwqqppz / 1000;
        return m
    }
    
成果
  1. 成功获取m参数,对比网页一致

    在这里插入图片描述

  2. py中导入execjs运行Js文件

    pip install execjs

    import requests
    import time
    import execjs
    
    def get_param():
        ts = str(int(time.time())) + "000"
        with open('jm.js','r',encoding='utf8') as f:
            js = f.read()
        param = execjs.compile(js).call('get_param',ts)
        # response = requests.get(url=self.jm_url, params=params)
        # param = response.text
        print(param)
        return param
    
  3. 请求接口,获取数据

    def get_data(page, param):
      headers = {
          "User-Agent": "yuanrenxue.project",
      }
      params = {
          "page": page,
          "m": param,
      }
      response = requests.get(url=self.base_url, params=params, headers=headers).json()
      if response["status"] == "1":
          data = response["data"]
          values = [i["value"] for i in data]
          print(values)
          return values
    
  4. 计算结果,得到平均数

    import numpy as np #导入numpy计算 mean
    
    def mean():
       value = []
        for i in range(1, 6):
            param = get_param()
            value = get_data(page=i, param=param)
            value.append(value)
            
        result = np.mean(total_value)
        print(result)
    

    在这里插入图片描述

点关注不迷路,本文若对你有帮助,烦请三连支持一下 ❤️❤️❤️ 各位的支持和认可就是我最大的动力❤️❤️❤️

在这里插入图片描述

关注
打赏
1658128969
查看更多评论
立即登录/注册

微信扫码登录

0.0496s