前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JS逆向】某DNS网登陆密码AES加密逆向分析探索!

【JS逆向】某DNS网登陆密码AES加密逆向分析探索!

作者头像
二爷
发布2024-01-11 14:36:25
2030
发布2024-01-11 14:36:25
举报
文章被收录于专栏:二爷记二爷记

JS逆向探索比较重要而且关键的地方是找对加密关键位置代码,通过关键位置的加密代码断点分析得出加密方式,加密函数代码,如果再一开始加密位置就找错了,那就比较头大,容易陷入停滞以及进入误区了!

很多加密搜索关键词一方面是容易出来很多文件及位置区域,另一方面也会存在很多干扰及误区,这就比较考验经验和耐心,话说某些时候也要看运气的成分,去赌一下契合度了。

网址:

代码语言:javascript
复制
aHR0cHM6Ly93d3cuZG5zLmNvbS9sb2dpbi5odG1s
  1. 用错误的账号信息登陆尝试,老规矩密码:123456

2.登陆获取加密特征信息

3.加密特征信息

代码语言:javascript
复制
email_or_phone: Z/7vS/mdKwX7zRPy4uKfdA==
password: /b1Ean4b7bteH9OA9V8gPg==

4.再登陆一次,加密信息特征对比

5.老规矩,搜索关键字 password

6.第一个js文件匹配度相当之多,很容易就陷入误区

本渣渣就是在第一个js文件陷进去,怎么打断点调试,都没有用;

你会发现调试过程就能得知自己是否找错了加密位置。

7.分析搜索结果文件找到最可疑的地方

8.打开查看

9.打开至面板,搜索找到关键加密位置

10.打上断点,登陆调试

11.调试,点击执行下一行代码

12.可以看到结果已经出来了

13.console.log 验证对比一下

代码语言:javascript
复制
email_or_phone: 'Z/7vS/mdKwX7zRPy4uKfdA==', password: '/b1Ean4b7bteH9OA9V8gPg==',

14.关键位置加密代码

aes 加密函数

代码语言:javascript
复制
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函数查看

代码语言:javascript
复制
 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加密及解密:

代码语言:javascript
复制
#公众号: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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与SEO学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档