鍍金池/ 問答/Python  C  Linux/ 模擬登陸網(wǎng)站,發(fā)現(xiàn)post表單時密碼和賬號都被加密,加密的js可以找到,但是加密

模擬登陸網(wǎng)站,發(fā)現(xiàn)post表單時密碼和賬號都被加密,加密的js可以找到,但是加密的參數(shù)還有一個是服務(wù)器隨機返回的,怎么辦?

一、
模擬登陸一個網(wǎng)站,發(fā)現(xiàn)post表單時密碼和賬號都被加密,加密后的數(shù)據(jù)傳遞給一個type屬性為hidden的input,我想獲取這個input,但是點擊登錄按鈕后這個input就刷新了
這是js代碼
這是登錄的js代碼,可以看出加密后的參數(shù)傳為encoded
圖片描述
我嘗試將input的type屬性hidden改為txt,再獲取它的value,但是也沒成功
二、
登錄的驗證碼怎么獲取
圖片描述
驗證碼沒有直接用URL給出,而是src=‘’,獲取驗證碼的URL會加一個random的參數(shù)
post表單

上面是post的表單

最后網(wǎng)站鏈接為鏈接描述

回答
編輯回答
鹿惑

人家防的就是你

2018年4月2日 14:59
編輯回答
落殤

我看到的encoded是通過請求這個接口/Logon.do?method=logon&flag=sess得到一字串,然后前半部分是需要混合的字串,后半部分是混合的長度,然后與用戶名和密碼拼接起來字串進行交叉混合得到最終的encoded
驗證碼你需要識別圖片

2018年1月9日 10:29
編輯回答
背叛者

編碼函數(shù)相當簡單,可以直接轉(zhuǎn)換成 python 代碼,如下

# !/usr/bin/python2
# -*- coding: utf-8 -*-
import requests


def get_login_data():
    # 請?zhí)鎿Q成合適的域名
    url = 'http://xxx.xxx.xxx/Logon.do?method=logon&flag=sess'
    rsp = requests.get(url)
    rsp.raise_for_status()
    return rsp.text.encode()


def encode(usr, pwd, data):
    scode, sxh = data.split('#')
    raw = usr + '%%%' + pwd
    enc = ''
    for i in range(len(raw)):
        if i < 20:
            enc += raw[i] + scode[0:int(sxh[i])]
            scode = scode[int(sxh[i]):]
        else:
            enc += raw[i:]
            break
    return enc


def login():
    # encoded = encode(xx, xx, get_login_data())
    # requests.post(...)
    # ...

若遇到非常復(fù)雜的編碼(加密)函數(shù),可提取 javascript 代碼,直接用 js 引擎(如 nodejs)執(zhí)行它得到結(jié)果。

2017年6月13日 07:44