JS逆向探索比较重要而且关键的地方是找对加密关键位置代码,通过关键位置的加密代码断点分析得出加密方式,加密函数代码,如果再一开始加密位置就找错了,那就比较头大,容易陷入停滞以及进入误区了!
很多加密搜索关键词一方面是容易出来很多文件及位置区域,另一方面也会存在很多干扰及误区,这就比较考验经验和耐心,话说某些时候也要看运气的成分,去赌一下契合度了。
网址:
aHR0cHM6Ly93d3cuZG5zLmNvbS9sb2dpbi5odG1s
2.登陆获取加密特征信息
3.加密特征信息
email_or_phone: Z/7vS/mdKwX7zRPy4uKfdA==
password: /b1Ean4b7bteH9OA9V8gPg==
4.再登陆一次,加密信息特征对比
5.老规矩,搜索关键字 password
6.第一个js文件匹配度相当之多,很容易就陷入误区
本渣渣就是在第一个js文件陷进去,怎么打断点调试,都没有用;
你会发现调试过程就能得知自己是否找错了加密位置。
7.分析搜索结果文件找到最可疑的地方
8.打开查看
9.打开至面板,搜索找到关键加密位置
10.打上断点,登陆调试
11.调试,点击执行下一行代码
12.可以看到结果已经出来了
13.console.log 验证对比一下
email_or_phone: 'Z/7vS/mdKwX7zRPy4uKfdA==', password: '/b1Ean4b7bteH9OA9V8gPg==',
14.关键位置加密代码
aes 加密函数
var obj = {
'email_or_phone': aes($(".email_or_phone").val()),
'password': aes($(".password").val()),
'type': aes('account'),
'redirectTo': 'https://www.dns.com/dashboard',
'_token': _token
}
15.打开关键加密函数 aes函数查看
function aes(val) {
var k = CryptoJS.enc.Utf8.parse('1234567890abcDEF');
var iv = CryptoJS.enc.Utf8.parse('1234567890abcDEF');
enc = CryptoJS.AES.encrypt($.trim(val), k, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
}).toString();
return enc;
}
很明显的是AES加密!
16.抠出并修改一下参数代码
$.trim(val) 直接替换成要加密的参数,直接改成 val 或者其他变量名!
17.本地运行效果
还有一个 _token 的值固定,可在页面中寻找到:
最后我们再使用 Pyhton 来实现AES加密及解密:
#公众号:eryeji
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
import base64
import execjs
#调用JS文件实现加密
def get_encrypted(password):
"""
调用js文件实现AES加密
:param password:
:return:
"""
with open('dns.js', 'r', encoding='utf-8') as f:
www_37_js = f.read()
encrypted_pwd = execjs.compile(www_37_js).call('aes', password)
print(encrypted_pwd)
return encrypted_pwd
#Python 实现AES 加密
def encryptByAES(message,key):
"""
#CBC模式加密
:param message:
:param key:
:return:
"""
iv = key.encode('utf-8')
aeskey = key.encode('utf-8')
secretData = message.encode('utf-8')
pad_len = 16 - len(secretData) % 16
secretData += bytes([pad_len]) * pad_len
cipher = AES.new(aeskey, AES.MODE_CBC, iv)
encrypted = cipher.encrypt(secretData)
return base64.b64encode(encrypted).decode('utf-8')
if __name__ =="__main__":
phone="189999988888"
password="123456"
get_encrypted(phone)
get_encrypted(password)
key='1234567890abcDEF'
print(encryptByAES(phone, key))
print(encryptByAES(password, key))
这里提一下python实现AES加密,不管是 ECB 模式加密,还是 CBC 模式加密,都与本地nodejs运行加密结果不一致,故代码仅供参考学习!
声明
本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系立即删除!
参考来源:
Python爬虫进阶必备 | 关于AES 的案例分析与总结-咸鱼学Python
https://mp.weixin.qq.com/s/ZTB4l0B5gpzqwrbMzkRBUg
本文分享自 Python与SEO学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!