JS 逆向中分析探索比较重要,尤其是搜索关键词及加密猜测分析,如果猜错,那就整个大方向都错了,所以在断点调试中,一定要验证,对比印照,不能扣错 js 代码片段。
所以在找加密js文件及代码的时候要有耐心及对比验证!
网址:
aHR0cHM6Ly93d3cuMzcuY29tLw==
密码加密特征:
- 打开网站,账号密码(123456)登陆测试
2.获取到密码加密信息及接口
3.搜索关键字 password
注意搜索关键字还可以扩展搜索,比如“password”,“password:”,“password=”,甚至“var password”来获取需要的文件信息。
这里用“password:”获取的信息更精准!
4.获取到关键js文件及代码片段
5.打开至面板,打上断点,调试
6.调试
7.逐步调试
8.关键加密函数代码
然而加密关键部分找错了,断点调试没有出来密码加密前后信息,比如123456,和加密后的加密根式信息,不是这个加密js文件代码!
9.重新找,断点调试,确定密码
这里用“password =”获取的信息更精准!
10.下一行调试生成加密密码
11.打印输出验证密码:R0JXTkt3MEcxMjN1WkZLRDQ1NkhJ
12.对比验证密码格式
13.查看关键加密函数
14.关键加密函数
15.抠出所有代码,调试,报错
16.密码123456改成字符串,调试成功
在登陆接口中还有参数,callback: jQuery18305854424652078813_1704422996008
其中_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文件运行代码及效果
#公众号: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()
完整代码获取
请关注本渣渣公众号