您好,登錄后才能下訂單哦!
這篇文章主要介紹“用Python模擬網站中對JavaScript加密的方法”,在日常操作中,相信很多人在用Python模擬網站中對JavaScript加密的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”用Python模擬網站中對JavaScript加密的方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
第一種是改寫JavaScript的代碼
這沒什么好說的,不過只適用于比較小而且不復雜的JavaScript代碼片段。比如人人網上發站內信的頁面有這樣的一個隱藏post數據:
<input type="hidden" name="biz" value=0 id="xn_biz"/>
在頁面上biz的值為0,但是post的時候就會變成類似于941_683291223928232的字串,仔細看一下頁面的源代碼,就會發現這段驗證的加密字串是通過一段JavaScript的代碼生成的:
<script>var mREOQQ=’A`ZDu^`’;var VKMHX=’^&+*L/~’;var
uCHKAU=0;var rTIU;var wCJS=”;var yAYH=Math.floor
(VKMHX.length/2);while(uCHKAU<mREOQQ.length)
{rTIU=mREOQQ.charCodeAt(uCHKAU++);var aYDG=VKMHX.
charCodeAt(rTIU%VKMHX.length);aYDG=String.
fromCharCode(aYDG);if(aYDG==’L')aYDG=’<<’
;if(aYDG==’~')wCJS+=~rTIU*(-1);else{wCJS+=Math.
floor(eval(rTIU+aYDG+yAYH));}}var ab=941;
ab+="_";ab+=wCJS; document.getElementById("xn_biz")
.value=ab;</script>
這其實類似一段小型的驗證加密,它先隨機生產一段字串,復制給隨機產生的一個變量名,再隨機生成一段運算符,復制給另一個隨機生成的變量名,然后對這兩個變量進行一系列操作和運算,生成一個類似于941_683291223928232的字串。每次刷新頁面這段代碼中產生的字串和變量名都是不一樣的,但是仔細研究這段代碼,算法都是相同的,只要得到字串和運算符串,就可以生成這串驗證密鑰了。
所以將這段代碼簡單的改寫成python代碼,問題得到解決,在python模擬網站的JavaScript加密過程下面代碼中code就是提取出來的上述JavaScript代碼中的mREOQQ,operator代表VKMHX,而xn則代表ab的初始值,***得到的xn_biz就是我們最終需要的驗證密鑰了。
def __genBizCode(code, operator, xn): rXHU = unicode( code ) yAMKEN = operator VCHEN, yEEJ, eLKKIH = (0, 0, ”); KFNQH = int( len(yAMKEN)/2 ); while VCHEN < len(rXHU): yEEJ = ord(rXHU[VCHEN]) VCHEN += 1 index = yEEJ % len(yAMKEN) dDWE = ord( yAMKEN[index] ) dDWE = chr(dDWE) if dDWE==’L': dDWE = ‘<<’ if dDWE==’~': eLKKIH += str( ~yEEJ*(-1) ) else: reg = ‘%d%s%d’ % ( yEEJ, dDWE, KFNQH) eLKKIH += str( int( eval(reg) ) ) xnxn_biz = xn + ‘_’ xn_biz += eLKKIH return xn_biz
這種方法沒有依賴性,但是使用的范圍較窄,一是要求算法簡單才能改寫,二是要求算法固定,如果每次刷新頁面算法都不一樣,這種方法就不使用了。下面會談到一種通用性的方法。
第二種是在python中運行js代碼由于QZone和QQ校友登陸的時候,post的密碼都進行了加密,搜索了一下,發現很多人都研究過這個東東。騰訊將用戶的密碼和驗證碼一起,通過一些js代碼進行加密,生成一個32為的密鑰最終post到服務器上。
對于這個加密算法,網上大部分流傳的說法是,先將用戶密碼進行3次md5的加密,轉成大寫的32位字符串,再將驗證轉換成大寫,與前面的32位md5大寫字符串相加,得到一個36位的字符串,***對這個36位的字串進行md5加密并轉換成大寫字串,得到最終post的密鑰。
網上很多人說用標準的md5加密,但是我用python的hashlib里的md5進行上述的加密,得到的結果卻與標準結果不同,于是只能尋求其他辦法。后來在Google的時候搜到了在python中利用windows的插件Windows ScriptControl運行其他腳本語言的方法,不僅適用js,還可以運行vbs等。
首先需要安裝Windows ScriptControl插件,可以去微軟的官網上下載。其次還需要安裝python的win32庫,然后就可以簡單的如下執行:
import win32com.client
def readJsFile(filename):
fp = file( filename, ‘r’ )
lines = ”
for line in fp:
lines += line
return lines
def driveJsCode(code, func, paras=None):
js = win32com.client.Dispatch
(’MSScriptControl.ScriptControl’)js.Language = ‘JavaScript’
js.AllowUI = False
js.AddCode( code )
if paras:
return js.Run(func, paras[0], paras[1])
else:
return js.Run(func)
if __name__ == ‘__main__’:
code = readJsFile( ‘comm.js’ )
p = driveJsCode
( code, ‘myPreProcess’, [password, verfcode] )print ‘The decoded code is %s’ % p
這種方法通用性強,而且即使服務器改變算法,依然可以得到正確的加密驗證碼。
到此,關于“用Python模擬網站中對JavaScript加密的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。