0
点赞
收藏
分享

微信扫一扫

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


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

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

网址:

aHR0cHM6Ly93d3cuZG5zLmNvbS9sb2dpbi5odG1s

  1. 用错误的账号信息登陆尝试,老规矩密码:123456

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

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

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

3.加密特征信息

【JS逆向】某DNS网登陆密码AES加密逆向分析探索!_开发语言_03

email_or_phone: Z/7vS/mdKwX7zRPy4uKfdA==
password: /b1Ean4b7bteH9OA9V8gPg==

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

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

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

【JS逆向】某DNS网登陆密码AES加密逆向分析探索!_开发语言_05

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

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

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

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

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

【JS逆向】某DNS网登陆密码AES加密逆向分析探索!_开发语言_07

8.打开查看

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

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

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

10.打上断点,登陆调试

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

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

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

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

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

13.console.log 验证对比一下

【JS逆向】某DNS网登陆密码AES加密逆向分析探索!_开发语言_13

email_or_phone: 'Z/7vS/mdKwX7zRPy4uKfdA==', password: '/b1Ean4b7bteH9OA9V8gPg==',

14.关键位置加密代码

【JS逆向】某DNS网登陆密码AES加密逆向分析探索!_javascript_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.抠出并修改一下参数代码

【JS逆向】某DNS网登陆密码AES加密逆向分析探索!_开发语言_15

$.trim(val) 直接替换成要加密的参数,直接改成 val 或者其他变量名!

17.本地运行效果

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

还有一个 _token 的值固定,可在页面中寻找到:

【JS逆向】某DNS网登陆密码AES加密逆向分析探索!_开发语言_17

最后我们再使用 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运行加密结果不一致,故代码仅供参考学习!

完整代码获取 

后台回复“NS”

声明 

本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系立即删除!

参考:

Python爬虫进阶必备 | 关于AES 的案例分析与总结-咸鱼学Python

https://mp.weixin.qq.com/s/ZTB4l0B5gpzqwrbMzkRBUg

·················END·················

你好,我是二大爷,

革命老区外出进城务工人员,

互联网非早期非专业站长,

喜好python,写作,阅读,英语


【JS逆向】某DNS网登陆密码AES加密逆向分析探索!_开发语言_18

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

关注我的都变秃了

说错了,都变强了!

不信你试试

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

扫码关注最新动态

公众号ID:eryeji

举报

相关推荐

0 条评论