Js逆向分析


Js逆向分析

一、總結

一句話總結:

1、知道如何尋找登錄接口
2、知道如何確定Js的位置
3、知道如何觀察js的執行過程
4、知道js的執行方法

 

 

1、js逆向分析一般過程?

1、知道如何尋找登錄接口
2、知道如何確定Js的位置
3、知道如何觀察js的執行過程
4、知道js的執行方法

 

 

2、Js逆向分析 確定網站的登錄接口?

a、登錄的form表單中action對應的url地址
b、通過抓包分析發現,在這個url地址和請求體中均有參數,切換到手機版,參數的個數多少,分析JS

 

 

3、Js逆向分析 確定JS的位置?

*、通過點擊按鈕,然后點擊 Event Listener部分網站可以找到綁定的事件,對應的,只需要點擊即可跳轉到js的位置
*、部分網站的按鈕可能並沒有綁定JS時間監聽,那么這個時候可以通過搜索請求中的關鍵字來找到JS的位置,比如Livecell

 

 

4、Js逆向分析 觀察js的執行過程?

1、找到js的位置之后,我們可以通過觀察js的位置,找到js具體在如何執行,后續我們可以通過python程序模擬js執行,或者使用類似js2py直接把js代碼轉化為python程序去執行。
2、添加斷點之后繼續點擊登錄,每次程序在斷點位置都會停止,通過如果該行有此變量產生,都會把變量結果展示在scoope中

 

 

5、Js逆向分析 執行js:觀察代碼中都需要那些參數?

a、我們要登錄需要對密碼進行加密和獲取rkey字段的值
b、rkey字段的值我們直接發送請求rkey請求就可以獲得
c、密碼是先反轉然后RSA進行加密,js代碼很復雜,我們希望能通過在python中執行js來實現

 

 

6、Js逆向分析 的具體實現思路?

使用session對象發送rKey獲取登錄需要信息,那么首先要獲取session對象,在設置session的請求頭信息,然后通過這個session對象來發請求
session = requests.session()
data = {
    'phoneNum': '131....',
    'password': password,
    'c1':0,
    'rKey':n['rkey']
}

# print(session.headers)
response = session.post("http://activity.renren.com/livecell/ajax/clog", data=data)

 

 

 

二、Js逆向分析

轉自或參考:

 

大概流程:(1).知道如何尋找登錄接口 (2)知道如何確定Js的位置 (3)知道如何觀察js的執行過程 (4)知道js的執行方法

1.確定網站的登錄接口

······(1)登錄的form表單中action對應的url地址

······ (2)通過抓包分析發現,在這個url地址和請求體中均有參數,切換到手機版,參數的個數多少,分析JS

2,確定JS的位置

······ (1)通過點擊按鈕,然后點擊 Event Listener部分網站可以找到綁定的事件,對應的,只需要點擊即可跳轉到js的位置

····· (2)部分網站的按鈕可能並沒有綁定JS時間監聽,那么這個時候可以通過搜索請求中的關鍵字來找到JS的位置,比如Livecell

3.觀察js的執行過程

····· (1)找到js的位置之后,我們可以通過觀察js的位置,找到js具體在如何執行,后續我們可以通過python程序模擬js執行,或者使用類似js2py直接把js代碼轉化為python程序去執行。

····· (2)添加斷點之后繼續點擊登錄,每次程序在斷點位置都會停止,通過如果該行有此變量產生,都會把變量結果展示在scoope中

4.執行js

觀察代碼中都需要那些參數

(1)我們要登錄需要對密碼進行加密和獲取rkey字段的值

(2)rkey字段的值我們直接發送請求rkey請求就可以獲得

(3)密碼是先反轉然后RSA進行加密,js代碼很復雜,我們希望能通過在python中執行js來實現

import requests import json import js2py 

獲取session對象


session = requests.session()

headers = {

    "User-Agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36",

    "X-Requested-With": "XMLHttpRequest",

    "Content-Type":"application/x-www-form-urlencoded"

}

設置session的請求頭信息


session.headers = headers response = session.get("http://activity.renren.com/livecell/rKey") # print(response.content.decode()) n = json.loads(response.content)['data'] # - 2.根據獲取信息對密碼進行加密 # - 准備用戶名和密碼 phoneNum = "131..." password = "****" # - 使用js2py生成js的執行環境:context context = js2py.EvalJs() # - 拷貝使用到js文件的內容到本項目中 # - 讀取js文件的內容,使用context來執行它們 with open("BigInt.js", 'r', encoding='utf8') as f: context.execute(f.read()) with open("RSA.js", 'r', encoding='utf8') as f: context.execute(f.read()) with open("Barrett.js", 'r', encoding='utf8') as f: context.execute(f.read()) # - 向context環境中添加需要數據 context.t = {'password': password} context.n = n # - 執行加密密碼的js字符 js = ''' t.password = t.password.split("").reverse().join(""), setMaxDigits(130); var o = new RSAKeyPair(n.e,"",n.n) , r = encryptedString(o, t.password); ''' context.execute(js) # - 通過context獲取加密后密碼信息 # print(context.r) password = context.r # - 3.使用session發送登錄請求 # - URL: http://activity.renren.com/livecell/ajax/clog # - 請求方法: POST # - 數據: # - phoneNum: 15565280933 # - password: (加密后生產的) # - c1: 0 # - rKey: rkey請求獲取的 data = { 'phoneNum': '131....', 'password': password, 'c1':0, 'rKey':n['rkey'] } # print(session.headers) response = session.post("http://activity.renren.com/livecell/ajax/clog", data=data) print(response.content.decode()) # 訪問登錄的資源 response = session.get("http://activity.renren.com/home#profile") print(response.content.decode())

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM