学姐把我拉进小树林,奇怪的知识增加了

JS逆向咸鱼级别,翻身跃龙门!

  • 懂点技术,谈点感悟;大家好,我叫夜斗,请多指教!

  • 最近刚好看到一篇关于js逆向的爬虫文章,然后就想着分享给大家,对我的帮助真挺大的,谢谢这位博主啦! https://blog.csdn.net/weixin_37254196/article/details/112361386

  • 然后我自己就挑了js文件一段代码细说啦,看下面看下面!

  • 这是一段js代码文件里面的一段参数加密代码

var r = function(e) {
        var t = n.md5(navigator.appVersion)
          , r = "" + (new Date).getTime()
          , i = r + parseInt(10 * Math.random(), 10);
        return {
            ts: r,
            bv: t,
            salt: i,
            sign: n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@")
        }
    };
  • 让我们一句句来看看到底这段代码是怎么加密的,然后用自己熟悉的语言写出相应的加密代码,因为我自己比较熟悉python,就拿python来写啦!
  1. var t = n.md5(navigator.appVersion)(md5加密浏览器版本信息然后赋值给参数t)

没有js基础的同学这边集合一下:
navigator: 表示浏览器的信息
appVersion属性:浏览器版本

那这个md5是个啥意思呢? 没听说过的小伙伴们可以看下下面:

md5是一种密码散列函数,能够产生128位的散列值,简单说就是字符加密操作;而且由于md5加密算法是不可逆的,所以解密一般都是通过暴力穷举方法,通过网站的接口实现解密,推荐一个md5在线解密接口https://www.cmd5.com/

md5加密的三种简单方式

import hashlib

# md5对英文数字加密的三种方式

name = '夜斗小神社'

# 第一种
secret_name_1 = hashlib.md5()
secret_name_1.update(name.encode('utf-8'))  # 编码
print(f'secret_name_1: {secret_name_1.hexdigest()}')  # 返回摘要,作为十六进制数据字符串值

# 第二种
secret_name_2 = hashlib.md5(name.encode("utf-8")).hexdigest()
print(f'secret_name_2: {secret_name_2} ')

# 第三种
secret_name_3 = hashlib.new('md5', name.encode('utf-8')).hexdigest()
print(f'secret_name__3: {secret_name_3}')

'''
结果如下: 
C:\ProgramData\Anaconda3\python.exe "L:/python package/python爬虫/js逆向/md5加密.py"
secret_name_1: cedf3c63cb14220e633df6d01ac0bd28
secret_name_2: cedf3c63cb14220e633df6d01ac0bd28 
secret_name__3: cedf3c63cb14220e633df6d01ac0bd28

Process finished with exit code 0

'''
  1. r = "" + (new Date).getTime() : 参数r接受一个返回的是13位数字毫秒数,相应的python代码如下:
# 获取一个13位的时间戳,因为需要拼接字符所以用str转换一下
r = "" + str(int(time.time() * 1000))
  1. i = r + parseInt(10 * Math.random(), 10): parseInt强制取整,把小数部分去掉只去整数部分,所以就变成了产生0~9之间的整数赋给i,相应的python代码如下:
# 获得0-9的随机整数,因为需要拼接字符所以用str转换一下
i = r + str(int(random.randint(0, 9)))
  1. sign: n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@"):这个比较复杂,先是将括号里面的参数拼接起来然后再进行md5加密,具体python代码如下:
# e: 是函数传入的字符参数
# i: 0-9的随机整数
join_character =  "fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@"
# 然后进行对join_character进行md5,随便选上述三种中一种加密
sign =  hashlib.md5() 
sign.update(join_character.encode('utf-8'))
sign_result = sign.hexdigest()
  • 上述就是三种简单的参数加密啦,了解这几种加密对爬虫有很大帮助!

最后结合上述三种加密一起使用

  • 代码如下:
import hashlib
import time
import random


def secret_fuc(e):
    # 获取一个13位的时间戳,因为需要拼接字符所以用str转换一下
    r = "" + str(int(time.time() * 1000))
    # 获得0-9的随机整数,因为需要拼接字符所以用str转换一下
    i = r + str(int(random.randint(0, 9)))
    # e: 是函数传入的字符参数
    # i: 0-9的随机整数
    join_character = "fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@"
    # 然后进行对join_character进行md5,随便选上述三种中一种加密
    sign = hashlib.md5()
    sign.update(join_character.encode('utf-8'))
    sign_result = sign.hexdigest()
    return r, i, sign_result


name = "夜斗小神社"
t, salt, sign = secret_fuc(name)
print(f't: {t}')
print(f'salt: {salt}')
print(f'sign: {sign}')

'''
结果如下: 
C:\ProgramData\Anaconda3\python.exe "L:/python package/python爬虫/js逆向/三种加密实战.py"
t: 1610363742211
salt: 16103637422115
sign: 458b3ec27ae42f9ff505546a658eec72

Process finished with exit code 0

'''
  • 好啦!可能最近得去复习金融学啦,爬虫路上估计得停一会儿啦,喜欢的小伙伴不妨点个赞呗!
  • 在这个星球上,你很重要,请珍惜你的珍贵! ~~~夜斗小神社

你可能感兴趣的:(学姐把我拉进小树林,奇怪的知识增加了)