JS 逆向中分析探索比较重要,尤其是搜索关键词及加密猜测分析,如果猜错,那就整个大方向都错了,所以在断点调试中,一定要验证,对比印照,不能扣错 js 代码片段。

所以在找加密js文件及代码的时候要有耐心及对比验证!

网址:

aHR0cHM6Ly93d3cuMzcuY29tLw==

密码加密特征:

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

  1. 打开网站,账号密码(123456)登陆测试

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

2.获取到密码加密信息及接口

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

3.搜索关键字 password

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

注意搜索关键字还可以扩展搜索,比如“password”,“password:”,“password=”,甚至“var password”来获取需要的文件信息。

这里用“password:”获取的信息更精准!

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

4.获取到关键js文件及代码片段

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

5.打开至面板,打上断点,调试

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

6.调试

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

7.逐步调试

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

8.关键加密函数代码

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

然而加密关键部分找错了,断点调试没有出来密码加密前后信息,比如123456,和加密后的加密根式信息,不是这个加密js文件代码!

9.重新找,断点调试,确定密码

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

这里用“password =”获取的信息更精准!

10.下一行调试生成加密密码

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

11.打印输出验证密码:R0JXTkt3MEcxMjN1WkZLRDQ1NkhJ

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

12.对比验证密码格式

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

13.查看关键加密函数

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

14.关键加密函数

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

15.抠出所有代码,调试,报错

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

16.密码123456改成字符串,调试成功

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

在登陆接口中还有参数,callback: jQuery18305854424652078813_1704422996008

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

其中_1704422996008 是13位时间戳,使用 Python 很容易构建:

import time
import random

timestamp = str(int(time.time() * 1000))
jsonp = ''
for _ in range(20):
    jsonp += str(random.randint(0, 9))
callback = 'jQuery' + jsonp + '_' + timestamp
print(callback)

附 python 调用js文件运行代码及效果

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

#公众号:eryeji
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import time
import random
import execjs


def get_encrypted_password(password):
    with open('de.js', 'r', encoding='utf-8') as f:
        www_37_js = f.read()
    encrypted_pwd = execjs.compile(www_37_js).call('td', password)
    print(encrypted_pwd)
    return encrypted_pwd


def get_callback():
    timestamp = str(int(time.time() * 1000))
    jsonp = ''
    for _ in range(20):
        jsonp += str(random.randint(0, 9))
    callback = 'jQuery' + jsonp + '_' + timestamp
    print(callback)
    return callback


if __name__ =="__main__":
    password="123456"
    get_encrypted_password(password)
    get_callback()

完整代码获取 

请关注本渣渣公众号 

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